Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 缓冲读写器刷新文件_Java_File_Flush_Writer - Fatal编程技术网

Java 缓冲读写器刷新文件

Java 缓冲读写器刷新文件,java,file,flush,writer,Java,File,Flush,Writer,我试图创建一个方法,用给定的值替换文件中的每一行。相反,它只是使文件为空。想看看有什么事吗?谢谢 try { FileReader fr = new FileReader(chooser.getSelectedFile()); BufferedReader reader = new BufferedReader(fr); FileWriter fw = new FileWriter(chooser.getSelectedF

我试图创建一个方法,用给定的值替换文件中的每一行。相反,它只是使文件为空。想看看有什么事吗?谢谢

try {

            FileReader fr = new FileReader(chooser.getSelectedFile());
            BufferedReader reader = new BufferedReader(fr);
            FileWriter fw = new FileWriter(chooser.getSelectedFile());
            BufferedWriter bw = new BufferedWriter(fw);
            String line = reader.readLine();
            Scanner scan = null;
            int i=0;
            while (line != null) {
                scan = new Scanner(line);
                ln = scan.toString() + add;
                bw.write(ln);
                bw.newLine();
                i++;
                System.out.println(i + " pass");
                line = reader.readLine();
            }
            reader.close();
            bw.close();
        } catch (FileNotFoundException e) {
            System.out.println("Can't find the file");
        } catch (IOException e) {
            System.out.println("Dude, it's impossibru to read.");
        }

此方法中的
i
太难了,请查看程序在
while
循环中通过了多少次,在本例中为0,它根本不会启动while循环。

您在替换模式下打开文件,您的
FileWriter
将在写入第一行之前清空文件。如果要追加,请使用FileWriter(file,true)

第二个问题是你同时阅读和写作。尝试下一个序列:

  • 读取整个文件
  • 更换所有线路
  • 写入(替换旧文件)

  • 因此,您将最小化问题计数

    如果您想用新行覆盖同一文件,您应该首先进行所有读取,然后进行所有写入

    ArrayList<String> lines = new ArrayList<String>();
    
    //start reader, go over each line
    
    while (line != null) {
        String newLine = //make changes to line
        lines.add(newLine);
    }
    
    //close reader
    //start writer
    //write each line to file
    
    ArrayList line=new ArrayList();
    //启动读卡器,检查每一行
    while(行!=null){
    字符串换行=//对行进行更改
    行。添加(换行符);
    }
    //近距离阅读
    //起始编写器
    //将每一行写入文件
    
    可能无法回答您的确切问题,但为什么不只计算文件中的行数并用新行覆盖文件?您正在尝试
    读取
    写入
    e到同一文件。取而代之的是创建新的文件并编写替换的text.noMAD,在未来它将不断发展,所以我将以“艰难的方式”这样做。斯密特,这也许是一个很好的观点,但没有办法在一个文件中完成它吗?我被你使用的
    扫描仪所吸引。让
    扫描器
    读取源文件本身要简单得多,而不是每行创建一个新的源文件,但无论如何,对其调用
    toString()
    有什么意义呢?为什么要在文件中以未指定的格式存储?@VitalijKornijenko如果不需要实际文件,则可以删除该文件。如果您仍然想坚持将所有内容都放在一个文件中的想法,那么请读取所有内容并将其存储到某个位置,最好是将其存储到
    ArrayList
    ,然后替换内容并将其写入文件。