2012-06-27 4 views
0

Мне нужно прочитать текстовый файл и на основе некоторой логики внести некоторые изменения в файл. Так что я читаю файл построчно с помощьюНевозможно записать в файл java * правильно *

while ((temp_string = inputstream.readLine()) != null) 
{ 
    /*after employing some other logic*/ 
    outputstream.write(temp_string); 
    outputstream.flush(); 
} 

Где temp_string является строка, а декларация InputStream является:

BufferedReader inputstream = new BufferedReader(new FileReader(pathtosilentfile)); 

и декларация outputstream является:

BufferedWriter outputstream = new BufferedWriter(new FileWriter(pathtooutputfile)); 

Но когда я пишу в текстовый файл (новый), есть много мусора, который отображается на блокноте ++ как NULL. Кроме того, письменные данные выглядят нормально в блокноте или в текстовом поле. Так это какая-то ошибка кодирования? Я не понимаю! Что происходит?

+0

Если вы могли бы предоставить короткую, но * полную * программу, демонстрирующую проблему, это действительно помогло бы. Пожалуйста, прочитайте http://tinyurl.com/so-hints –

+0

@ JonSkeet Фактически я только что вернулся с работы, поэтому больше не могу этого делать. Тем не менее, я заверяю вас, что я делаю не что иное, как я выразил здесь в этом фрагменте. – Chani

+0

На самом деле я хотел вставить данные из блокнота ++, но у тех парней на работе есть firewalled imgur – Chani

ответ

2

Было бы очень помогли, если бы вы сказали нам, что output_stream есть - но это должно быть Writer некоторые описания - вероятно OutputStreamWriter обернута вокруг FileStream, указав соответствующую кодировку (который до вас, Я полагаю).

Если это выглядит нормально в Блокноте/Wordpad, но сломанный в Notepad ++, то, вероятно, - проблема с кодировкой, но вы должны решить, какую кодировку использовать. UTF-8 часто является хорошим выбором (компактный для ASCII, охватывает весь Unicode, широко поддерживается), но зависит от того, что нужно прочитать в файле.

+0

Прошу прощения, я не упоминал объявление выходного потока, но да, это действительно BufferedWriter, обернутый вокруг FileWriter. До сих пор я не задумывался о кодировании, но я буду подробно изучать соответствующий Java-API завтра и посмотреть, что произойдет. Благодарю. – Chani

3

Во-первых, вы читаете строки и не пишете новые строки. temp_string не содержит новых строк/строк. Хотя это, похоже, не единственная проблема, с которой вы сталкиваетесь.

+0

На самом деле я пропустил установку 'outputstream.newLine()' здесь в фрагменте, но его там в моей программе. – Chani

1

Нагрузки NULL в начале означает, что вы начали писать в середине файла вместо начала. Блокнот/Wordpad упрощенно игнорируют это, но ваши файлы будут намного больше, чем вы хотите, и могут вызвать проблемы при чтении в другие файлы.

Однако, поскольку мы не знаем, что такое outputstream, или что с ним сделано до начала написания, мы не можем вам помочь.

+0

Да, сэр, вы правы, я действительно пытаюсь писать до конца файла каждый раз. Каков правильный способ сделать это, потому что это то, что мне нужно делать. Мне нужно прочитать каждую строку, посмотреть, соответствует ли она некоторым свойствам, если да, а затем изменить строку и записать ее, и нет, а затем просто добавить строку, как и к новой копии файла. – Chani

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