簡體   English   中英

我想打開一個文本文件並在java中編輯一個特定的行

[英]I want to open a text file and edit a specific line in 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();

}

除非您不更改行的(字節)長度,否則需要重寫整個文件,並在適當的位置添加更改的行。 這實際上只是對當前代碼的一個簡單更改。 首先,初始化FileWriter沒有append (因為你不想只是附加到文件,這是你現在正在做什么的結束)。

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

完成后,別忘了關閉所有文件句柄!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM