Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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_Bufferedwriter - Fatal编程技术网

用Java写文件

用Java写文件,java,bufferedwriter,Java,Bufferedwriter,首先,我是Java的新手。我给自己定了一个小计划,现在我陷入了困境。我试图写入一个已经存在的文件,但它只是覆盖了它。我正在尝试替换包含“maxBooks”的行 以下是我使用的代码: FileWriter writeFile = new FileWriter(fileLocation); BufferedReader readLines = new BufferedReader(new FileReader(fileLocation)); Buffe

首先,我是Java的新手。我给自己定了一个小计划,现在我陷入了困境。我试图写入一个已经存在的文件,但它只是覆盖了它。我正在尝试替换包含“maxBooks”的行

以下是我使用的代码:

FileWriter writeFile = new FileWriter(fileLocation);
            BufferedReader readLines = new BufferedReader(new FileReader(fileLocation));
            BufferedWriter writeLines = new BufferedWriter(writeFile);

            System.out.println("\n-----File Begin-----");

            while((finalLines = readLines.readLine()) != null){

                if(finalLines.contains("maxBooks")){
                    writeLines.newLine();
                    writeLines.write(finalLines);

                    System.out.println("This is the if statement");
                    System.out.println(finalLines);
                } else {
                    fileLines.add(new String(finalLines));
                    System.out.println("This is the else statement");
                    System.out.println(finalLines);
                }
            }

            System.out.println("------File End------");
请记住,我遗漏了“试一试”。请告诉我如何编辑文本文件。如果你需要更多信息,请告诉我

谢谢:)

编辑

对不起,我应该澄清一下。我只是试图编辑测试文件中的一行,而不是整个文本文件

最终代码:

FileWriter writeFile = new FileWriter(fileLocation + ".tmp", true);
            BufferedWriter writeLines = new BufferedWriter(writeFile);

            BufferedReader readLines = new BufferedReader(new FileReader(fileLocation));


            System.out.println("\n-----File Begin-----");

            while((finalLines = readLines.readLine()) != null){

                if(finalLines.contains("maxBooks")){
                    writeLines.write("maxBooks = " + maxBooks);
                    writeLines.newLine();

                    System.out.println("This is the if statement");
                    System.out.println(finalLines);
                } else {
                    fileLines.add(new String(finalLines));
                    System.out.println("This is the else statement");
                    writeLines.write(finalLines);
                    writeLines.newLine();
                }
            }

            System.out.println("------File End------");

            file2.renameTo(file);

            writeLines.close();

您覆盖了您试图读取的文件,这是一种不好的做法。写入一个新文件,然后重命名为原始文件。

您在同一个
文件位置上读写。
您应该给出两个不同的位置

是这样的

//define newLocation as string that contain path for new file to be written    
FileWriter writeFile = new FileWriter(newLocation);
                BufferedReader readLines = new BufferedReader(new FileReader(fileLocation));
                BufferedWriter writeLines = new BufferedWriter(writeFile);

您使用的是哪个版本的Java?如果您使用的是7,您可以使用Java.NIO来实现其中的一些功能。我试图写入一个已经存在的文件,但它只是覆盖了它,不清楚这是什么意思(代码就是这样做的)。也许可以给出一个输入的简短示例,说明您的期望和得到的结果;Petermm,我只需要编辑文本文件中的一行。假设原始文本文件包含两行:maxBooks=2,totalBooks=5。我只想编辑第一行(maxBooks=2),谢谢@fge,它像做梦一样工作,我的更新代码在我的问题中。再次感谢:)