Запись буферизованного вывода в файл неверна
Я не могу понять это. Я пытаюсь выписать текст из моей программы. Предположим, к программе подсчета слов. Покажите мне количество строк, символов, количество слов. Затем я показываю результаты вместе со словом, которое ищет пользователь, и этой строкой.
(то есть поиск в Java)
строка 5: остров Ява содержит Java
строка 9: я люблю пить ява
Это не отображение текста. Его отображение, как иероглифы.
Строка 2: DN{c< \ $ H Uz X h4 [ bA. D Ja 8 ^) | k ˠ < ΤQJP˒nI "(vcBi" и / | qIW6 {PA0 [[М; ФУ! }4 x { - (V k@ We֭Tʺ Строка 3: N U Ӣ ͇? Строка 4: Ӻ鬵 P D< } L> o V Ex Q|) ' g I B 3b ("3 T 7 = s g F;KN r _ ʺ: B ۢ s sP [6; PK! N _rels/.rels (
public void readFromFile(String filename)
{
LineNumberReader lineNumberReader = null;
try {
lineNumberReader = new LineNumberReader(new FileReader(filename));
String line = null;
BufferedWriter output = new BufferedWriter(new FileWriter("output.txt"));
String ask = "Enter Word";
String find = JOptionPane.showInputDialog(ask);
Scanner scan = new Scanner(new File("test.txt"));
while ((line = lineNumberReader.readLine()) != null)
{
line = scan.nextLine();
if(line.indexOf(find) >= -1)
{
output.write("Line " + lineNumberReader.getLineNumber() +
": " + line);
output.newLine();
}
}// end of while
output.close();
} // end of try
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
finally {
try {
if (lineNumberReader != null)
{
lineNumberReader.close();
}
} // end of try
catch (IOException ex)
{
ex.printStackTrace();
}
}// end of finally
} // end of function
2 ответа
Я не понимаю, почему вы делаете это:
while ((line = lineNumberReader.readLine()) != null)
{
line = scan.nextLine();
if(line.indexOf(find) >= -1)
{
output.write("Line " + lineNumberReader.getLineNumber() +
": " + line);
output.newLine();
}
}// end of while
вместо этого:
while ((line = lineNumberReader.readLine()) != null)
{
if(line.indexOf(find) >= -1)
{
output.write("Line " + lineNumberReader.getLineNumber() +
": " + line);
output.newLine();
}
}// end of while
Вам не нужно 2 читателя для этого. И я не понимаю, почему один из читателей читает в окончательном файле, а другой читает из файла, имя которого происходит от arg
Кодировка ОС по умолчанию используется как установлено в System.getProperty("file.encoding")
, Вы можете явно выбрать один.
final String encoding = "UTF-16LE"; // Or "Cp1252" or "UTF-8"
lineNumberReader = new LineNumberReader(new InputStreamReader(new FileInputStream(filename), encoding));
...
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), encoding));
...
Scanner scan = new Scanner(new File("test.txt", encoding));