缓冲输出写入文件错误

时间:2012-06-11 13:05:01

标签: java file file-io buffered

我无法理解。我正在尝试从我的程序中写出文本。这是一个字数统计程序。显示行数,字符数,字数。然后我显示结果以及用户正在搜索的单词和该行。

(即搜索java)

第5行:java岛包含Java

第9行:我喜欢喝java

它没有显示文字。它显示像heiroglyphics。

第2行:DN {c < \ $H Uz X h4[ bA. D Ja 8^] | k ˠ <ΤQJP˒nI “(VCBI” &安培; / | qIW6 {PA0 [[ !米; FU的} {4倍 - (VK @我们֭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 个答案:

答案 0 :(得分:1)

我不明白你为什么要这样做:

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的文件

答案 1 :(得分:0)

默认操作系统编码在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));