Методы чтения и записи потока ввода и вывода байтов файла используют массивы байтов для чтения и записи данных, то есть для обработки данных в байтах. Таким образом, потоки байтов плохо работают с символами Юникода . Например, китайский иероглиф занимает в файле 2 байта. Если используется поток байтов, при неправильном чтении появятся «искаженные символы».
Потокам байтов FileInputStream и FileOutputStream соответствуют потоки символов FileReader и FileWriter (потоки ввода и вывода файловых символов FileReader и FileWriter являются подклассами Reader и Writer соответственно, и их методы построения:
FileReader(Stringfilename);FileReader(Filefilename);Fi1eWriter(Stringfilename);FileWriter(Filefilename);FileWriter(Stringfilename,booleanappend);FileWriter(Filefilename,booleanappend);
Методы чтения и записи потоков ввода символов и потоков вывода используют массивы символов для чтения и записи данных, то есть для обработки данных с символами в качестве базовой единицы.
Например:
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){FilesourceFile=newFile(a.txt);//Файл прочитан FiletargetFile=newFile(b.txt);//Файл записан charc[]=newchar [19] ];//массив символов try{Writerout=newFileWriter(targetFile,true);//выходной поток, указывающий на пункт назначения Readerin=newFileReader(sourceFile);//входной поток, указывающий на источник intn=-1; while(( n= in.read(c))!=-1){out.write(c,0,n);}out.flush();out.close();}catch(IOExceptione){System.out.println (Ошибка +е);}}}
Примечание . Для потоков Writer метод записи сначала записывает данные в буфер. При переполнении буфера содержимое буфера автоматически записывается в место назначения. Если поток закрыт, содержимое буфера будет немедленно записано в место назначения. . Поток вызывает методlush(), чтобы немедленно очистить текущий буфер, то есть записать содержимое текущего буфера в место назначения.