如何在文本文件中追加现有行

时间:2013-11-09 19:38:45

标签: java

如何在文本文件中附加现有行?如果要编辑的行位于文件中间怎么办?如果给出以下代码,请提供建议。

经历过&尝试了以下内容:

我的代码:

    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 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

写作的例子:

BufferedWriter writer = new BufferedWriter(new FileWriter(new File(path)));
writer.write(someStuff);
writer.write("\n");
writer.close();

答案 2 :(得分:1)

您可能应该遵循您发布的第二个链接的答案中的建议。你可以使用random access file访问文件的中间位置,但如果你开始在文件中间的任意位置附加,而不记录你开始写的那些内容,如this answer所述,您将覆盖其当前内容。除非有问题的文件大得多,否则最好的办法是使用现有文件和新数据组装新文件,正如其他人之前建议的那样。

答案 3 :(得分:0)

AFAIK你做不到。我的意思是,附加一条线是可能的,但不能插入中间。这与java或其他语言无关...文件是一个写入字节的序列...如果你在一个任意点插入一些序列不再有效并需要重写的东西。

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