有没有办法检查文件是否正确写入,我的意思是最后是否有 EOF?我问这个是因为我有一个程序需要一些文件,将它们合并到一个非常大的文件中,然后使用它从中获取统计信息。关键是第二部分永远不会结束,因为它不识别文件的结尾。
代码的相关部分如下:(请不要要求整个代码,因为我因重要原因无法发布)
FileWriter file=null;
PrintWriter pw = null;
String pathToRead=null;
InputStreamReader isr = null;
BufferedReader br = null ;
FileInputStream fis = null ;
TestJFileChooser d=new TestJFileChooser();
int c=1;
String line=null;
....
//here i select the files
selectedFile=new File(pathToRead);
//here I get one buffer reader for each file got with listFiles()
for(File file_sel:app){
if (file_sel.getName().startsWith("gtou")){
System.out.println(file_sel.getName());
fis = null;
try {
fis = new FileInputStream(file_sel);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
isr=new InputStreamReader(fis);
br=new BufferedReader(isr);
map.put(i, br);
num_file++;
i++;
}
}
//then I select the output file and open a print writer for it
fileToWrite=new File(pathToRead);
try {
file = new FileWriter(fileToWrite);
pw= new PrintWriter(file);
} catch (IOException e1) {
e1.printStackTrace();
}
//merging part
....
line=br.readLine();
while(line!=null){
System.out.println("line is:"+line);
....
line=br.readLine();
}
//end of merging ....
pw.flush();
pw.close();
try {
if (file!=null) file.close();
fis.close();
isr.close();
br.close();
for(int fi=0;fi<num_file;fi++){
br2=map.get(fi);
br2.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
so.kill();
Runtime r=Runtime.getRuntime();
r.gc();
//this is a popup that comes out
GlitchSquad gli=new GlitchSquad("Completed");
问题是作为输出我得到:
line is: null ;
line is: null ;
line is: null ;
等等并且永远不会到达“完成”弹出窗口=(
我无法理解那个 null 到底是什么,因为控制线!= null 不起作用。我也尝试将该空值用作字符串..但什么都没有..我认为这是我如何关闭流的问题,但现在代码对我来说似乎是正确的..但仍然无法阻止它..
建议?提前致谢!
ps它是一个总结版本,以便专注于流..正确声明变量,导入等也是如此
编辑:代码更新