我想打开一个文本文件并在java中编辑一个特定的行

这是代码我写的而不是编辑特定的行新名称在最后被提到…请帮帮我….

PrintWriter writer = new PrintWriter(new BufferedWriter( new FileWriter("d:\\book.txt", true))); BufferedReader br = null; FileReader reader = null; try { reader = new FileReader("d:\\book.txt"); br = new BufferedReader(reader); String line; System.out.println((";;;;;;;;;;;;;;;;" + request .getParameter("hname"))); System.out.println(request.getParameter("book")); while ((line = br.readLine()) != null) { if (request.getParameter("hname").equals(line)) { line = line.replace(request.getParameter("hname"), request.getParameter("book")); writer.println(line); writer.close(); } } } catch (FileNotFoundException e) { e.printStackTrace(); }finally{ reader.close(); } 

除非您不更改行的(字节)长度,否则需要重写整个文件,并在适当的位置添加更改的行。 这实际上只是对当前代码的一个简单更改。 首先,在没有append情况下初始化你的FileWriter (因为你不想只追加到文件的末尾,这就是你现在正在做的事情)。

 PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter("d:\\book.txt"))); 

然后,要么将整个文件读入内存(如果文件足够小),要么随时写入临时文件,然后在完成后将其复制。 第二种方式更强大,并且需要更少的代码更改; 只需修改你的while循环来编写每一行,修改与否。

 // Open a temporary file to write to. PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter("d:\\book.temp"))); // ... then inside your loop ... while ((line = br.readLine()) != null) { if (request.getParameter("hname").equals(line)) { line = line.replace(request.getParameter("hname"), request.getParameter("book")); } // Always write the line, whether you changed it or not. writer.println(line); } // ... and finally ... File realName = new File("d:\\book.txt"); realName.delete(); // remove the old file new File("d:\\book.temp").renameTo(realName); // Rename temp file 

完成后别忘了关闭所有文件句柄!