Читать «Java: руководство для начинающих» онлайн - страница 364

Герберт Шилдт

Следует ли перехватывать в программе исключения типа Error? Нет, не следует. Глава 10. Ввод-вывод данных

Для чего в Java определены как байтовые, так и символьные потоки? Байтовые потоки с самого начала были определены в Java. Они особенно удобны для ввода-вывода двоичных данных и поддерживают произвольный доступ к ним в файлах. А символьные потоки оптимизированы для представления в уникоде.

Как известно, ввод-вывод данных на консоль осуществляется в текстовом виде. Почему же в Java для этой цели используются байтовые потоки? Стандартные потоки ввода-вывода System, in, System.out и System.err были определены в Java прежде символьных потоков.

Как открыть файл для чтения байтов? Ниже приведен один из способов открытия файла для ввода данных типа byte. FilelnputStream fin = new FilelnputStream("test");

Как открыть файл для чтения символов? Ниже приведен один из способов открытия файла для ввода символов. FileReader fr = new FileReader("test");

Как открыть файл для ввода-вывода с произвольным доступом? Ниже приведен один из способов открытия файла для ввода-вывода с произвольным доступом. randfile = new RandomAccessFile("test", "rw");

Как преобразовать числовую строку "123.23" в двоичный эквивалент? Для того чтобы преобразовать числовую строку в двоичный эквивалент, следует воспользоваться одним из методов синтаксического анализа, определенных в классах оболочек типов, например Integer или Double.

Напишите программу, которая будет копировать текстовые файлы. Видоизмените ее таким образом, чтобы все пробелы заменялись дефисами. Используйте при написании программы классы, представляющие байтовые потоки, а также традиционный способ закрытия файла явным вызовом метода close (). / Копирование текстового файла с заменой пробелов дефисами. В этой версии программы используются байтовые потоки. Для того чтобы воспользоваться этой программой, укажите в командной строке имена исходного и целевого файлов. Например: java Hyphen source target / import java.io.*; class Hyphen { public static void main(String args[]) { int i; FilelnputStream fin = null; FileOutputStream fout = null; Приложение А. Ответы на вопросы для самопроверки 579 // проверить сначала, указаны ли оба файла if(args.length !=2 ) { System.out.println("Usage: Hyphen From To"); return; } // скопировать файл и заменить в нем пробелы дефисами try { fin = new FilelnputStream(args[0]); fout = new FileOutputStream(args[1]); do { i = fin.read(); // преобразовать пробел в дефис if((char)i == ' ') i = if(i != -1) fout.write(i); } while(i != -1); } catch(IOException exc) { System.out.println("I/O Error: " + exc); } finally { try { if (fin != null) fin.closeO; } catch(IOException exc) { System.out.println("Error closing input file."); } try { if(fin != null) fout.close(); } catch(IOException exc) { System.out.println("Error closing output file."); } } } }

Перепишите программу, созданную в ответ на предыдущий вопрос, таким образом, чтобы в ней использовались классы, представляющие символьные потоки. На этот раз воспользуйтесь оператором try с ресурсами для автоматического закрытия файла. /* Копирование текстового файла с заменой пробелов дефисами. В этой версии программы используются символьные потоки. Для того чтобы воспользоваться этой программой, укажите в командной строке имена исходного и целевого файлов. Например: java Hyphen2 source target Для компиляции этого кода требуется JDK 7