2009-11-20 4 views
4

FileInputStream считывает все байты файла и FileOutputStream пишет allbytes в файлFileInputStream и FileOutputStream построчно

, какой класс я использую, если я хочу, чтобы прочитать все байты файла, но построчно

так что

если FiLea содержит две строки

line1 line2

затем байт line1 и line2 читаются отдельно

То же самое касается FileOutputStream

+0

"lines" означает текстовые данные. «Выходной поток» подразумевает двоичные данные. Что это? –

ответ

12

Фредрик прав насчет BufferedReader, но я не согласен о PrintWriter - моя проблема с PrintWriter является то, что она проглатывает исключения.

Стоит понять, почему FileInputStream и FileOutputStream не имеют методов, относящихся к строкам: классы *Stream - это потоки двоичных данных. В терминах двоичных данных нет такой вещи, как «строка». Занятия *Reader и *Writer составляют около текст, где понятие линии имеет гораздо больший смысл ... хотя в целом Reader не хватает smarts для чтения строки (всего лишь блока символов), так что вот где BufferedReader входит в состав.

InputStreamReader и OutputStreamWriter - это классы адаптеров, применяющие кодировку символов к потоку байтов для преобразования их в символы или поток символов, чтобы превратить их в байты.

Таким образом, вы, вероятно, хотите BufferedReader обертывания InputStreamReader упаковки в FileInputStream для чтения - тогда звоните readLine(). Для записи используйте упаковку BufferedWriterOutputStreamWriter обертывание FileOutputStream - затем позвоните write(String) и newLine(). (Это даст вам разделитель платформы строки по умолчанию - если вы хотите конкретный один, просто напишите его в виде строки.)

Там также FileReader класс, сорт сочетает в себе FileInputStream и InputStreamReaderFileWriter делает эквивалент), но они всегда используют стандартную кодировку платформы, которая почти никогда не, что вы хотите. Это делает их всех, кроме бесполезной ИМО.

+0

Я согласен PrintWriter имеет недостатки, но это был самый близкий вопрос. Я начал предлагать Writer, но он действительно не работает «по строкам». Хорошая точка, хотя (+1). – Fredrik

+0

@Fredrik: Это не ваша вина, что разработчики библиотеки Java решили дать слишком много полномочий PrintWriter :( –

+0

@ Jon: Спасибо :-) Я знаю это, я просто хотел объяснить, почему я рекомендовал его в любом случае. – Fredrik

Смежные вопросы