首页 > 解决方案 > 该代码正在删除整个文件,而不是在 Java 中修改我想要的行

问题描述

我已经制作了座位预订系统,需要其中一个选项来取消座位。我写了这段代码,它与预订座位时的代码相似,但目前它正在删除整个文件,我不知道为什么。PS 我知道取消操作需要更多验证,当我弄清楚如何更改正确的内容时,我将输入这些验证。正确的验证将是和电子邮件地址。

private static void cancelSeat() throws IOException {

    int index = 0;
    System.out.println("-- Please Enter Your Seat Number To Cancel Your Reservation --");
    String userSeat = input.next().toUpperCase();

    for (int i = 0; i < index; ++i) {
        seatBookingSystem current = seats[i];
        if (current.getSeatNumber().equals(userSeat)){
            seats[i].cancel();
            System.out.println("-- Your Reservation Has Now Been Canceled, Goodbye --");    
        }
    }
    //write the new string with the replaced line OVER the same file

    BufferedWriter amendFile = new BufferedWriter(new FileWriter("C:\\Users\\sylve\\OneDrive\\Desktop\\seats2.txt"));
    for (int i = 0; i < index; ++i) {
        amendFile.write(seats[i].ammendFile());
    }
    amendFile.close();

    System.out.print("-- Your Has Seat Been Canceled, Thank You! --");
}

被调用的代码的另外两个部分是 cancel() 和 ammendFile()

public String cancel() {
    return this.email = "free";
}

public String ammendFile() {
    DecimalFormat dF = new DecimalFormat("#.00");
    String result = seatNumber + " " + seatClass +  " " + isWindow + " " + isAisle + " " + isTable + " " + dF.format(seatPrice) + " " + email + "\n";
    return result;
}

以及我要修改的文件,预订所在的位置。

1A STD true false false 23.50 free
1B STD false true false 23.50 free
1D STD true true false 27.50 free
2A STD true false true 24.50 free
2B STD false true true 24.50 free
2D STD true true true 28.50 BOB
3A STD true false true 24.50 free
3B STD false true true 24.50 free
3D STD true true true 28.50 free
4A STD true false false 23.50 free
4B STD false true false 23.50 free
4D STD true true false 27.50 free
5A 1ST true true true 48.50 free
5C 1ST false true true 44.50 free
5D 1ST true false true 44.50 free
6A 1ST true true true 48.50 free
6C 1ST false true true 44.50 free
6D 1ST true false true 44.50 free

标签: javaarraysfilewriterbufferedwriter

解决方案


您不是在打开附加模式的情况下创建 FileWriter。你需要改变这一行:

BufferedWriter amendFile = new BufferedWriter(new FileWriter("C:\\Users\\sylve\\OneDrive\\Desktop\\seats2.txt"));

对此:

FileWriter fw = new FileWriter("C:\\Users\\sylve\\OneDrive\\Desktop\\seats2.txt", true);
BufferedWriter amendFile = new BufferedWriter(fw);

推荐阅读