我想在java中打开一个文本文件并编辑一行
这是我写的代码,而不是编辑一行新名称在最后出现。。。 请帮帮我我想在java中打开一个文本文件并编辑一行,java,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 =
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();
}
除非不更改行的(字节)长度,否则需要重写整个文件,并在适当的位置添加更改的行。这实际上只是对当前代码的一个简单更改。首先,初始化
FileWriter
,而不使用append
(因为不想只追加到文件的末尾,这就是您现在要做的)
然后,要么将整个文件读入内存(如果文件足够小),要么一边写一个临时文件,完成后再复制。第二种方法更健壮,需要更少的代码更改;只需修改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
完成后不要忘记关闭所有文件句柄 你能告诉我请求是什么吗?
FileWriter(“d:\\book.txt”,true)
将追加!!!!Java7更新-您可以让Java通过try-with-resources块来处理关闭资源的问题。Oracle教程可在@Henry中找到,如果不更改文件的字节长度,是否有更快的方法来执行此操作,例如:更改行的内容是相同的字节长度?@OfekGila如果您知道不更改字节长度,您可以使用RandomAccessFile
查找并简单地覆盖所需文件的任何部分。但以我的经验来看,这往往会在今后造成麻烦。
// 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