Запись буферизованного вывода в файл неверна

Я не могу понять это. Я пытаюсь выписать текст из моей программы. Предположим, к программе подсчета слов. Покажите мне количество строк, символов, количество слов. Затем я показываю результаты вместе со словом, которое ищет пользователь, и этой строкой.

(то есть поиск в 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));
Другие вопросы по тегам