Предопределенные потоки в Java
Система ввода/вывода языка Java содержит стандартные потоки ввода, вывода и вывода ошибок. Класс System пакета java.lang содержит поле in, которое является ссылкой на объект класса InputStream, и поля out, err – ссылки на объекты класса PrintStream, объявленные со спецификаторами public static и являющиеся стандартными потоками ввода, вывода и вывода ошибок соответственно. Эти потоки связаны с консолью, но могут быть переназначены на другое устройство.
Для назначения вывода текстовой информации в произвольный поток следует использовать класс PrintWriter, являющийся подклассом абстрактного класса Writer.
При наиболее удобного вывода информации в файл (или в любой другой поток) следует организовать следующую последовательность инициализации потоков с помощью класса PrintWriter:
new PrintWriter(new BufferedWriter(
new FileWriter(new File("file.txt"))));
В итоге класс BufferedWriter выступает классом-оберткой для класса FileWriter, так же как и класс BufferedReader для FileReader.
Приведенный ниже пример демонстрирует вывод в файл строк и чисел с плавающей точкой.
// пример # 5 : вывод в файл: DemoWriter.java
package chapt09;
import java.io.*;
public class DemoWriter {
public static void main(String[] args) {
File f = new File("res.txt");
FileWriter fw = null;
try {
fw = new FileWriter(f, true);
} catch (IOException e) {
System.err.println("ошибка открытия потока " + e);
System.exit(1);
}
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
double[] v = { 1.10, 1.2, 1.401, 5.01 };
for (double version : v)
pw.printf("Java %.2g%n", version);
pw.close();
}
}
В итоге в файл res.txt будет помещена следующая информация:
Java 1.1
Java 1.2
Java 1.4
Java 5.0
Для вывода данных в файл в текстовом формате использовался фильтрованный поток вывода PrintWriter и метод printf(). После соединения этого потока с дисковым файлом посредством символьного потока BufferedWriter и удобного средства записи в файл FileWriter становится возможной запись текстовой информации с помощью обычных методов println(), print(), printf(), format(), write(), append().
В отличие от Java 1.1 в языке Java 1.2 для консольного ввода используется не байтовый, а символьный поток. В этой ситуации для ввода используется подкласс BufferedReader абстрактного класса Reader и методы read() и readLine() для чтения символа и строки соответственно. Этот поток для организации чтения из файла лучше всего инициализировать объектом класса FileReader в виде:
new BufferedReader(new FileReader(new File("f.txt")));
Чтение из созданного в предыдущем примере файла с использованием удобной технологии можно произвести следующим образом:
// пример # 6 : чтение из файла: DemoReader.java
package chapt09;
import java.io.*;
public class DemoReader {
public static void main(String[] args) {
try {
BufferedReader br =
new BufferedReader(new FileReader("res.txt"));
String tmp = "";
while ((tmp = br.readLine()) != null) {
//пробел использовать как разделитель
String[] s = tmp.split("\\s");
//вывод полученных строк
for (String res : s)
System.out.println(res);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
В консоль будет выведено:
Java
1.1
Java
1.2
Java
1.4
Java
5.0
Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.