Ответы на вопросы по ревью 4. Java io. Ключевым понятием здесь является понятие потока
Скачать 1.93 Mb.
|
Ввод-вывод в файлы через символьные потокиНа практике чаще всего приходится обращаться с файлами, имеющими байтовую организацию, тем не менее, для этой цели можно пользоваться символьными потоками. Преимущество символьных потоков заключается в том, что они оперируют непосредственно символами в уникоде. Так, если требуется сохранить текст в уникоде, для этой цели лучше всего воспользоваться символьными потоками. Как правило, для файлового ввода-вывода символов служат классы FileReader и FileWriter. Применение класса FileWriterКласс FileWriter представляет поток, через который можно осуществлять запись данных в файл. Ниже приведены общие формы объявления двух наиболее часто употребляемых конструкторов данного класса. FileWriter(String имя_файла) throws IOException FileWriter(String имя_файла, boolean append) throws IOException Здесь имя файла обозначает полный путь к файлу. Если параметр append принимает логическое значение true, данные записываются в конец файла, а иначе они перезаписывают прежние данные на том же месте в файле. При возникновении ошибки в каждом из указанных выше конструкторов генерируется исключение IOException. Класс FileWriter является производным от классов OutputStreamWriter и Writer. Следовательно, в нем доступны методы, объявленные в его суперклассах. Ниже приведен краткий пример программы, демонстрирующий ввод текстовых строк с клавиатуры и последующий их вывод в файл test. txt. Набираемый текст читается до тех пор, пока пользователь не введет слово "stop". Для вывода текстовых строк в файл используется класс FileWriter. // Простой пример утилиты ввода с клавиатуры и вывода данных // на диск, демонстрирующий применение класса FileWriter. // Для компиляции этого кода требуется JDK 7 // или более поздняя версия данного комплекта. import java.io.*; class KtoD { public static void main(String args[]) { String str; BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Enter text ('stop' to quit)."); // Создание потока вывода типа FileWriter. try (FileWriter fw = new FileWriter("test.txt")) { do { System.out.print(": "); str = br.readLine(); if(str.compareTo("stop") == 0) break; str = str + "\r\n"; // add newline // Запись текстовых строк в файл, fw.write(str); } while(str.compareTo("stop") != 0) ; } catch(IOException exc) { System.out.println("I/O Error: " + exc); } } } Применение класса FileReaderВ классе FileReader создается объект типа Reader, который можно использовать для чтения содержимого файла. Чаще всего употребляется такой конструктор этого класса: FileReader(String имя_файла) throws FileNotFoundException где имя файла обозначает полный путь к файлу. Если указанный файл не существует, генерируется исключение FileNotFoundException. Класс FileReader является производным от классов InputStreamReader и Reader. Следовательно, в нем доступны методы, объявленные в его суперклассах. Приведенный ниже пример демонстрирует простую утилиту для отображения на экране содержимого текстового файла test. txt. Она является своего рода дополнением к утилите, рассмотренной в предыдущем разделе. // Простая утилита ввода с дйска и вывода на экран, // демонстрирующая применение класса FileReader. // Для компиляции этого кода требуется JDK 7 // или более поздняя версия данного комплекта. import java.io.*; class DtoS { public static void main(String args[]) { String s; // Создание в классе BufferedReader оболочки с целью заключить // в нее класс FileReader и организовать чтение данных из файла. try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) { while((s = br.readLine()) != null) { System.out.println(s) ; } } catch(IOException exc) { System.out.println("I/O Error: " + exc) ; } } } Обратите внимание на то, что для потока типа FileReader создана оболочка в классе BufferedReader. Благодаря этому появляется возможность обращаться к методу readLine(). Кроме того, закрытие потока типа BufferedReader, на который в данном примере ссылается переменная br, автоматически приводит к закрытию файла. |