我正在尝试在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");
}
}
}
答案 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)
JTextArea
有append
方法,该方法会将内容附加到其现有内容的末尾。 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 Statement和How 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()