【问题标题】:How to append existing line in text file如何在文本文件中追加现有行
【发布时间】:2013-11-21 19:54:13
【问题描述】:

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

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

我的代码:

    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();
                    //}
                }                   
            }
        }       

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

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

    【讨论】:

    • +1 "完成后删除旧文件并将临时文件重命名为与旧文件相同的名称" :)
    【解决方案2】:

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

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

    写作示例:

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

    【讨论】:

    • readline() 是故意让我到达所需的行。至于实现,我如何重写文本文件并编写其余部分?请问有什么例子吗?或者这适用吗? - raghuwansh.com/2013/07/10/write-text-file-in-java
    • 你可以使用 BufferedWriter
    • 现在尝试,问题是,根据我的问题,我希望用一些目标值覆盖第 5 行?另外,现在我有以下错误-线程“main”java.lang.Error中的异常:未解决的编译问题:无法解决编写器
    • omg,即使我去掉了可选的 finally 块,现在我的整个文本都被删除了 :( 请查看我的编辑。
    • 您的意思是您的文件中没有写入任何内容?也许在你打开作者之前先关闭阅读器?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 2011-06-26
        • 2011-02-19
        • 2011-08-02
        相关资源
        最近更新 更多