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

InputStreamReader и OutputStreamWriter

Пакет java.ioпредоставляет классы, которые позволяют выполнять конвертацию между символьными потоками Unicode и байтовыми потоками не-Unicode текста. При помощи класса InputStreamReaderсуществует возможность преобразовывать байтовые потоки в символьные потоки. Для перевода символьных потоков в байтовые потоки используется класс OutputStreamWriter.

При создании объектов InputStreamReader и OutputStreamWriter, задается байтовая кодировка, в которую необходимо выполнить преобразование. Например, чтобы перевести текстовый файл в кодировке UTF-8 в Unicode, необходимо сделать следующее:

FileInputStream fis = new FileInputStream("test.txt");

InputStreamReader isr = new InputStreamReader(fis, "UTF8");

Если не указать идентификатор кодировки, InputStreamReader и OutputStreamWriter будут обращаться к кодировке по умолчанию. Вы можете определить кодировку, используемую InputStreamReader или OutputStreamWriter, вызвав метод getEncoding, таким образом:

InputStreamReader defaultReader = new InputStreamReader(fis);

String defaultEncoding = defaultReader.getEncoding();

Пример для разбора

Пусть необходимо разработать программу, подсчитывающую количество определенного слова в файле. В качестве параметров в командной строке передаются:

  1. имя файла

  2. кодировка файла

  3. слово для подсчета

import java.io.*;

import java.util.Scanner;

public class Reader

{

private static String _encoding;

private static String _string;

public static void main(String[] args)

{

if (args.length != 3)

{

System.out.println("Wrong number of input arguments");

return;

}

File testFile = new File(args[0]);

_encoding = args[1];

_string1 = args[2];

String contents = GetContents(testFile);

System.out.print("File contents:\r\n" + contents);

System.out.println("--------------------------------------------");

Analyze(contents);

}

static public String GetContents(File file)

{

StringBuilder contents = new StringBuilder();

try

{

if (file == null)

{

throw new IllegalArgumentException("File should not be null.");

}

if (!file.exists())

{

throw new FileNotFoundException();

}

if (!file.canRead())

{

throw new IllegalArgumentException("File cannot be written: " + file);

}

if (!file.isFile())

{

throw new IllegalArgumentException("Should not be a directory: " + file);

}

FileInputStream fis = new FileInputStream(file);

InputStreamReader in = new InputStreamReader(fis, _encoding);

BufferedReader input = new BufferedReader(in);

try

{

String line = null;

while ((line = input.readLine()) != null)

{

contents.append(line + "\r\n");

}

}

finally

{

input.close();

}

}

catch (FileNotFoundException ex)

{

System.out.println("File does not exist: " + file);

}

catch(IllegalArgumentException ex)

{

System.out.println(ex.getMessage());

}

catch (Exception ex)

{

ex.printStackTrace();

}

return contents.toString();

}

private static void Analyze(String contents)

{

Scanner scanner = new Scanner(contents);

int stringCount = 0;

while (scanner.hasNextLine())

{

Scanner s = new Scanner(scanner.nextLine());

while (s.hasNext())

{

String word = s.next();

if (word.contentEquals(_string))

stringCount++;

}

s.close();

}

scanner.close();

System.out.println(_string + " — " + stringCount);

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]