Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Богомазов шпоры.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.32 Mб
Скачать

Текстовые потоки

Например: 1234 в текстовом формате это строка «1234 »

в Unicode – 0031 0032 0033 0034. Но многие ОС не поддерживают Unicode.

в ASCII – 31 32 33 34 –это байтовая кодировка

Поэтому при записи текстового файла происходит автоматическое преобразование символьного Unicode в байтовый ASCII поток с помощью локальной кодовой таблицы и запись в ASCII -кодах.

Преобразование Unicode – ASCII с помощью классов – обёрток OutputStreamWriter и InputStreamReader: Они расширяют Reader и Writer:

InputStreamReader: ASCII → Unicode - поток ввода байтовый -в объект Reader.

OutputStreamWriter: Unicode → ASCII – объект Writer -в поток вывода байтовый

ASCII, локальная кодировка ОС.

InputStreamReader in = new InputStreamReader(System.in);

Или

InputStreamReader in = new InputStreamReader(System.in,”Cp866”);

Или

InputStreamReader in = new InputStreamReader(

new FileInputStream(“file”),”Cp866”).

Для текстовых файлов - классы FileReader и FileWriter. Преобразование автоматическое.

Они расширяют (наследуют) InputStreamReader/ OutputStreamWriter.

FileWriter fw = new FileWriter(”file.txt”,true) ;

//true – дописывать в конец файла.

//false – создать новый файл.

fw.write((char)c);

Это эквивалентно

OutputStreamWriter fw = new OutputStreamWriter(

new FileOutputStream(“file.txt”));

Как работать со строками:

  1. Запись строк текста в поток вывода.

PrintStream –Работает только с локальной кодовой таблицей.

PrintStream – не поддерживает изменение кодовых страниц.

Методы print(), println().

PrintWriter – может установить кодовую таблицу. Здесь println() буферизированы. Конструктор может принимать как символьный, так и байтовый поток.

PrintWriter out=new PrintWriter(

new FileWriter(”file.txt”),true);

PrintWriter out=new PrintWriter(

new FileOutputStream (”file.txt”),true);

//здесь true - автоматический сброс буфера для метода println()- т.е.делает сразу вывод в поток. print() требует flush().

String name = ”Harry”;

double salary = 75000;

out.print(name);

flush();

out.print(‘ ’);

out.println(salary);

Увидим: Harry 75000 - в file.txt файле, в ASCII кодировке.

Если хотим увидеть каждую строку, то нужно добавить flush() после каждой строки (если вывод, например, на печать).

  1. чтение строк из потока ввода

BufferedReader in = new BufferedReader(

new FileReader(“file.txt”));

String line;

while((line=in.readLine())!=null){Цикл для ввода данных}

….

В скобках может быть только символьный поток. Если поток байтовый, ставим преобразование в Unicode.

BufferedReader in = new BufferedReader(

new InputStreamReader(System.in));

Для работы с русскими буквами:

BufferedReader in = new BufferedReader(

new InputStreamReader(System.in,”Cp866”));

Для ввода чисел:

String s = in.readLine();

double x = Double.parseDouble(s);

2