在java中读取文件

时间:2015-07-03 06:32:38

标签: java swing jtextarea filereader

我正在尝试在java中读取文本文件并将其写入文本区域。它正在正确读取第一行,但一旦遇到"输入" 。它会覆盖上一行中下一行的内容。

这是我的代码。

public void actionPerformed(ActionEvent e) 
                {
                    int val = jfc.showOpenDialog(jf);
                    int x=0;
                    String s;
                    if(val == JFileChooser.APPROVE_OPTION)
                    {
                        File fs=jfc.getSelectedFile();
                        try
                        {
                            BufferedReader of=new BufferedReader(new FileReader(fs));
                            while((s=of.readLine())!=null)
                            {

                                ja.setText(s.toString());
                            }
                        }
                        catch(Exception e1)
                        {
                            JOptionPane.showMessageDialog(null,"Cannot open the file");
                        }
                    }
                }

7 个答案:

答案 0 :(得分:1)

使用<uses-permission android:name="android.permission.READ_LOGS" /> 将所有文件内容合并为一个字符串,然后执行BufferedReader of=new BufferedReader(new FileReader(fs));

不要在while循环中执行setText,它会覆盖。

答案 1 :(得分:1)

您需要明确添加新行(\n)。

BufferedReader of=new BufferedReader(new FileReader(fs));
StringBuffer str = new StringBuffer();
while((s=of.readLine())!=null){
      str.append(s+NEW_LINE);
}
ja.setText(str.toString());

新行常量

public static final String NEW_LINE = "\n"

答案 2 :(得分:1)

JTextArea有一个inbulit read()方法。使用它(也很容易)是明智的

try {
      FileReader reader = new FileReader(new File("Path of your file"));
      yourTextArea.read(reader,"text");
} catch (FileNotFoundException ex ) {
      Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
      Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}

注意: setText()方法用新文本替换当前文本。因此,无法在循环中调用它。并且在处理您的问题时,会自动将newline个字符添加到您的JTextArea

答案 3 :(得分:0)

JTextAreaappend方法,该方法会将内容附加到其现有内容的末尾。 setText将执行此操作,删除所有以前的文本并将其替换为新文本。

您还应该确保资源正确关闭

    File fs = jfc.getSelectedFile();
    try (BufferedReader of = new BufferedReader(new FileReader(fs))) {
        while ((s = of.readLine()) != null) {
            ja.append(s + "\n");
        }
    } catch (Exception e1) {
        JOptionPane.showMessageDialog(null, "Cannot open the file");
    }

有关详细信息,请查看The try-with-resources StatementHow to Use Text Areas

答案 4 :(得分:0)

简单的更改将使您的代码正常工作:

   try {
      BufferedReader of = new BufferedReader(new FileReader(fs));
      StringBuilder sb =  new StringBuilder();
      while ((s = of.readLine()) != null) {
          sb.append(s.toString()+"\n");      

      }
     ja.setText(sb.toString());
    } catch (Exception e1) {
      JOptionPane.showMessageDialog(null, "Cannot open the file");
    }finally {
      sb.close();
      fs.close();
      of.close();
    }

因为您逐行阅读并将值设置为文本框,所以它肯定会被您阅读的下一行覆盖。所以在while循环之后添加它。你会理解你的问题。

答案 5 :(得分:-1)

使用Apache commons FileUtils类。

以下链接将帮助您如何将文件内容读取为字符串。 http://www.kswaughs.com/2015/05/how-to-read-file-into-string-in-java.html

答案 6 :(得分:-1)

您遇到的问题是.controller('SettingsController1', function($http) { var _this = this; $http.get(imgFeedUrl) .success(function(data) { _this.myImg = validImg; }).error(function(){ _this.noImg = invalidImg; }); }) BufferedReader会杀死它找到的所有行分隔符;这不是你想要的。

使用更经典的读取方法。此外,这是2015年,所以请使用java.nio.file和try-with-resources:

.readLine()