Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 第一次运行后不会出现';t加入“;“什么?”;到EOF。。。怎么会?_Java - Fatal编程技术网

Java 第一次运行后不会出现';t加入“;“什么?”;到EOF。。。怎么会?

Java 第一次运行后不会出现';t加入“;“什么?”;到EOF。。。怎么会?,java,Java,第二次应该将单词“something”添加到文件中并打印“atext has added”,但它将其视为空文件 任何事 公共类读取文件{ 公共读取文件(){ } 公共布尔读取文件(){ 布尔成功=假; 字符串文件_name=“source/text.txt”; 试一试{ FileReader文件=新的FileReader(文件名); BufferedReader read=新的BufferedReader(文件); BufferedWriter bf=新的BufferedWriter(新的Fil

第二次应该将单词“something”添加到文件中并打印“atext has added”,但它将其视为空文件

任何事

公共类读取文件{
公共读取文件(){
}
公共布尔读取文件(){
布尔成功=假;
字符串文件_name=“source/text.txt”;
试一试{
FileReader文件=新的FileReader(文件名);
BufferedReader read=新的BufferedReader(文件);
BufferedWriter bf=新的BufferedWriter(新的FileWriter(文件名));
if(read.readLine()!=null){
附加(“某物”);
System.out.println(“已添加文本!!”;
}否则{
追加(文件名);
System.out.println(“文件更新”);
}
read.close();
bf.close();
成功=真实;
}捕获(IOE异常){
e、 getMessage();
}
回归成功;
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
ReadFile rf=新的ReadFile();
rf.readFile();
}
}

当文件不为空时,应将“某物”添加到EOF

您需要以追加模式打开文件,否则当FileWriter打开文件时,它将被清空:

BufferedWriter bf = new 
                BufferedWriter(new FileWriter (file_name, true));

显然,您正在向试图读取的同一文件写入数据。在没有附加选项的情况下写入文件会将文件内容截断为零长度。
尝试写入其他文件。

此处需要进行一些更改

  • 您需要以追加模式打开文件进行写入
  • 在将数据附加到文件后,需要调用flush()才能读取该文件
  • 你需要一个循环,至少如果你希望所有事情都在同一次运行中发生的话
注意,我在这里使用了一个无限循环,这是危险的,因此还有改进的余地。捕获异常时,我还添加了println



在第一次运行后,您是否打开并查看了文件,以查看“某物”是否已写入其中?实际上,我有点惊讶您可以同时打开文件进行读写。“尝试写入其他文件”为什么?在这种情况下,写入同一个文件似乎是一项要求。对我来说,同时读取和写入同一个文件似乎不是一个好主意。我永远不会在我的代码中这样做。在java和操作系统内部,读/写可能会根据操作顺序和缓冲区状态而变得随机。如果我想从同一个文件读写,我宁愿使用RandomAccessFile,并明确我想做什么这是一个改进,但输入时间更短,信息量更大的是
e.printStackTrace()
,它将自动打印到
系统。err
流。噢,还有OP。如果它有助于解决问题,请联系我们。
try {
    FileReader file = new FileReader(file_name);
    BufferedReader read = new BufferedReader(file); 
    BufferedWriter bf = new BufferedWriter(new FileWriter (file_name, true));

    while(true) {
        if(read.readLine() != null) {
            bf.append("something");
            System.out.println("a text has been added!!");
            break;
        } else {
            bf.append(file_name);
            bf.flush();            
            System.out.println("File updated");
        }
     }
     read.close();
     bf.close();
     success = true;

} catch(IOException e) {
    System.out.println(e.getMessage());
}