2

如何在文本文件中追加现有行?如果要编辑的行在文件中间怎么办?请根据以下代码提供建议。

已经通过并尝试了以下方法:

我的代码:

    filePath = new File("").getAbsolutePath();
    BufferedReader reader = new BufferedReader(new FileReader(filePath + "/src/DBTextFiles/Customer.txt"));
    try
    {                           
        String line = null;         
        while ((line = reader.readLine()) != null)
        {
            if (!(line.startsWith("*")))
            {
                //System.out.println(line);

                //check if target customer exists, via 2 fields - customer name, contact number
                if ((line.equals(customername)) && (reader.readLine().equals(String.valueOf(customermobilenumber))))
                {
                    System.out.println ("\nWelcome (Existing User) " + line + "!");

                    //w target customer, alter total number of bookings @ 5th line of 'Customer.txt', by reading lines sequentially
                    reader.readLine();
                    reader.readLine();
                    int total_no_of_bookings = Integer.valueOf(reader.readLine());

                    System.out.println (total_no_of_bookings);
                    reader.close();
                    valid = true;


                    //append total number of bookings (5th line) of target customer @ 'Customer.txt'
                    try {
                        BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath + "/src/DBTextFiles/Customer.txt")));
                        writer.write(total_no_of_bookings + 1);
                        //writer.write("\n");
                        writer.close();
                    }
                    catch (IOException ex) 
                    {
                        ex.printStackTrace();
                    } 
                    //finally 
                   // {
                        //writer.close();
                    //}
                }                   
            }
        }       
4

4 回答 4

2

为了能够将内容附加到现有文件,您需要以附加模式打开它。例如使用FileWriter(String fileName, boolean append)true并作为第二个参数传递。

如果该行在中间,那么您需要将整个文件读入内存,然后在完成所有编辑后将其写回。

这可能适用于小文件,但如果您的文件太大,那么我建议将实际内容和编辑后的内容写入临时文件,完成后删除旧文件并将临时文件重命名为与旧的。

于 2013-11-09T19:45:59.410 回答
1

reader.readLine() 方法每次调用时都会增加一行。我不确定这是否适用于您的程序,但您可能希望将 reader.readline() 存储为字符串,因此它只被调用一次。

要在文本文件的中间追加一行,我相信您必须将文本文件重写到您希望追加该行的位置,然后继续写入文件的其余部分。这可以通过将整个文件存储在一个字符串数组中来实现,然后写入到某个点。

写作示例:

BufferedWriter writer = new BufferedWriter(new FileWriter(new File(path)));
writer.write(someStuff);
writer.write("\n");
writer.close();
于 2013-11-09T19:47:19.280 回答
1

您可能应该遵循您发布的第二个链接的答案中的建议。您可以使用随机访问文件访问文件的中间,但是如果您开始在文件中间的任意位置追加内容而不记录开始写入时的内容,您将覆盖其当前内容,如这个答案。除非有问题的文件非常大,否则最好的选择是使用现有文件和新数据组装一个新文件,正如其他人之前建议的那样。

于 2013-11-09T19:57:49.323 回答
0

AFAIK 你不能那样做。我的意思是,可以附加一行,但不能在中间插入。这与 java 或其他语言无关...文件是写入字节的序列...如果您在任意点插入某些内容,则该序列不再有效,需要重写。

所以基本上你必须创建一个函数来执行 read-insert-slice-rewrite

于 2013-11-09T19:46:37.490 回答