我正在使用一种常见的方法来读取java中的文本文件:
public String readIndex() throws IOException{
if(!fileExisits)
return "";
String indexInFile = "";
while((indexInFile = reader.readLine())!=null){
indexInFile += reader.readLine();
System.out.println("indexxxxxxxx: " + indexInFile);
}
System.out.println("reader get: " + indexInFile);
return indexInFile;
}
,输出为: 是file :: true
indexxxxxxxx: 1fefefe\fefeef
indexxxxxxxx: effe
indexxxxxxxx: effe
indexxxxxxxx: null
reader get: null
null
正如您在最后一行中看到的那样,输出字符串indexInFile
被设置为null
。
我的读者是:
reader = new BufferedReader(new FileReader(fileName));
任何建议为什么会发生?希望我写下所有相关的代码。
答案 0 :(得分:2)
遇到最后一行时,以下reader.readLine()
将返回零。然后是while循环的条件,将调用赋值indexInFile=null
。 while循环将退出,因为(indexInFile=null)==null)
。
此外,您可以在for循环中使用null
,因为您在那里调用了reader.readLine()
。我想以下代码将解决您的问题:
public String readIndex() throws IOException{
if(!fileExisits)
return "";
String line;
String indexInFile = "";
while((line = reader.readLine())!=null){
indexInFile += line;
System.out.println("indexxxxxxxx: " + line);
}
System.out.println("reader get: " + indexInFile);
return indexInFile;
}
答案 1 :(得分:1)
摆脱第二个readLine()
:
public String readIndex() throws IOException{
if(!fileExisits)
return "";
String indexInFile = "";
while((indexInFile = reader.readLine())!=null){
System.out.println("indexxxxxxxx: " + indexInFile);
}
System.out.println("reader get: " + indexInFile);
return indexInFile;
}
您已阅读while
条件中的行。因此,当您到达最后一行文本时,您将立即再次阅读nextLine
,然后才会突破loop
,这将返回null
,因为没有更多行。这就是为什么要打印null
。
答案 2 :(得分:0)
每个循环步骤调用readLine两次。 readLine也会删除尾随的换行符。
StringBuilder totalText = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
totalText.append(line).append("\r\n");
System.out.println("Line: " + line);
}
System.out.println("All: " + totalText.toString());
使用StringBuilder将大大提高速度。
答案 3 :(得分:0)
使用reader.ready()
方法检查(所以你也将摆脱加倍的readLine())
public String readIndex() throws IOException{
if(!fileExisits)
return "";
String indexInFile = "";
while(reader.ready()){
indexInFile += reader.readLine();
System.out.println("indexxxxxxxx: " + indexInFile);
}
System.out.println("reader get: " + indexInFile);
return indexInFile;
}