用Java读取和写入同一个文件

我想从criteria.txt文件中读取,以标记化并在同一文件的末尾附加标记。 该程序抛出exception: No file found! 我不知道我的错误在哪里。 任何建议都会对我有所帮助。 先感谢您!

这是我的代码:

 import java.io.*; import java.util.StringTokenizer; public class Test { private FileReader fr; private BufferedReader br; private FileWriter fw; private BufferedWriter bw; private StringTokenizer strtok; private String s; //constructor public Test() { try { fw=new FileWriter("criteria.txt", true); bw=new BufferedWriter(fw); try { fr=new FileReader("criteria.txt"); br=new BufferedReader(fr); while((s=br.readLine())!=null) { strtok=new StringTokenizer(s," "); while(strtok.hasMoreTokens()) { bw.write("\n"+strtok.nextToken()); } br.close(); } } catch(FileNotFoundException e) { System.out.println("File was not found!"); } catch(IOException e) { System.out.println("No file found!"); } bw.close(); } catch(FileNotFoundException e) { System.out.println("Error1!"); } catch(IOException e) { System.out.println("Error2!"); } } public static void main(String[] args) { Test t=new Test(); } } 

完成读取文件后,即在while循环后,您需要关闭阅读器。 目前,您在读取第一行后关闭它,这会在尝试读取第二行时导致“ IOException: Stream closed ”。

改成:

 while((s=br.readLine())!=null) { strtok=new StringTokenizer(s," "); while(strtok.hasMoreTokens()) { bw.write("\n"+strtok.nextToken()); } //br.close(); <----- move this to outside the while loop } br.close(); 

你最大的撤销是放置br.close();while()循环内部:每次写入文件时都要告诉计算机立即关闭它,因此文件保持关闭状态,计算机在循环的下一次迭代/执行期间永远不会找到它。 但是,我已经编辑了初始程序:

 import java.io.*; import java.util.StringTokenizer; public class Test { private FileReader fr; private BufferedReader br; private FileWriter fw; private BufferedWriter bw; private StringTokenizer strtok; private String s; //constructor public Test() { try { fw=new FileWriter("criteria.txt", true); bw=new BufferedWriter(fw); try { fr=new FileReader("criteria.txt"); br=new BufferedReader(fr); **while((s=br.readLine())!=null) { strtok=new StringTokenizer(s," "); while(strtok.hasMoreTokens()) { bw.write("\n"+strtok.nextToken()); } } br.close(); }** catch(FileNotFoundException e) { System.out.println("File was not found!"); } catch(IOException e) { System.out.println("No file found!"); } bw.close(); } catch(FileNotFoundException e) { System.out.println("Error1!"); } catch(IOException e) { System.out.println("Error2!"); } } public static void main(String[] args) { Test t=new Test(); } } 

在这种情况下,文件所在的文件夹或目录无关紧要,因为程序将在与java程序相同的文件夹中创建一个名为“criteria.txt”的新文件。 但是,您必须使用文本编辑器打开文件以添加/附加一些数据,因为文件最初将为空白。 程序的后续运行现在将已插入的内容作为新行上的串联字符串附加。 每次运行程序时都会生成一个新行。 希望这可以帮助。

在我看来,你不能这样做。 您无法同时打开同一个文件进行读写。 您必须在数据结构中打开并保存文件信息,然后将其关闭。 然后,您必须使用内存中的数据结构并打开文件以写入结果。 当你完成写作时,你应该关闭它。