Фредрик прав насчет BufferedReader
, но я не согласен о PrintWriter
- моя проблема с PrintWriter
является то, что она проглатывает исключения.
Стоит понять, почему FileInputStream
и FileOutputStream
не имеют методов, относящихся к строкам: классы *Stream
- это потоки двоичных данных. В терминах двоичных данных нет такой вещи, как «строка». Занятия *Reader
и *Writer
составляют около текст, где понятие линии имеет гораздо больший смысл ... хотя в целом Reader
не хватает smarts для чтения строки (всего лишь блока символов), так что вот где BufferedReader
входит в состав.
InputStreamReader
и OutputStreamWriter
- это классы адаптеров, применяющие кодировку символов к потоку байтов для преобразования их в символы или поток символов, чтобы превратить их в байты.
Таким образом, вы, вероятно, хотите BufferedReader
обертывания InputStreamReader
упаковки в FileInputStream
для чтения - тогда звоните readLine()
. Для записи используйте упаковку BufferedWriter
OutputStreamWriter
обертывание FileOutputStream
- затем позвоните write(String)
и newLine()
. (Это даст вам разделитель платформы строки по умолчанию - если вы хотите конкретный один, просто напишите его в виде строки.)
Там также FileReader
класс, сорт сочетает в себе FileInputStream
и InputStreamReader
(и FileWriter
делает эквивалент), но они всегда используют стандартную кодировку платформы, которая почти никогда не, что вы хотите. Это делает их всех, кроме бесполезной ИМО.
"lines" означает текстовые данные. «Выходной поток» подразумевает двоичные данные. Что это? –