如何将文本追加到Java中的现有文件

我需要将文本反复附加到Java中的现有文件。 我怎么做?


你是否为了记录的目的而这样做? 如果是这样的话,有几个库。 其中两种最受欢迎​​的是Log4j和Logback。

Java 7+

如果你只需要这样做一次,Files类可以简化这个过程:

try {
    Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND);
}catch (IOException e) {
    //exception handling left as an exercise for the reader
}

小心 :如果文件不存在,上述方法将抛出NoSuchFileException 。 它也不会自动附加一个换行符(当您追加到文本文件时,您通常会想要换行符)。 史蒂夫钱伯斯的答案涵盖了如何使用Files类来完成此任务。

但是,如果您要多次写入同一个文件,上面必须多次打开和关闭磁盘上的文件,这是一个缓慢的操作。 在这种情况下,缓冲作者比较好:

try(FileWriter fw = new FileWriter("myfile.txt", true);
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter out = new PrintWriter(bw))
{
    out.println("the text");
    //more code
    out.println("more text");
    //more code
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

笔记:

  • FileWriter构造函数的第二个参数将告诉它附加到文件,而不是写入新文件。 (如果文件不存在,它将被创建。)
  • 对于昂贵的作家(如FileWriter ),建议使用BufferedWriter
  • 使用PrintWriter可以访问您可能从System.out使用的println语法。
  • 但是BufferedWriterPrintWriter包装并不是绝对必要的。

  • 老Java

    try {
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true)));
        out.println("the text");
        out.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    

    异常处理

    如果您需要针对较旧Java的强大异常处理,它会变得非常冗长:

    FileWriter fw = null;
    BufferedWriter bw = null;
    PrintWriter out = null;
    try {
        fw = new FileWriter("myfile.txt", true);
        bw = new BufferedWriter(fw);
        out = new PrintWriter(bw);
        out.println("the text");
        out.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    finally {
        try {
            if(out != null)
                out.close();
        } catch (IOException e) {
            //exception handling left as an exercise for the reader
        }
        try {
            if(bw != null)
                bw.close();
        } catch (IOException e) {
            //exception handling left as an exercise for the reader
        }
        try {
            if(fw != null)
                fw.close();
        } catch (IOException e) {
            //exception handling left as an exercise for the reader
        }
    }
    

    您可以使用fileWriter将标志设置为true来进行追加。

    try
    {
        String filename= "MyFile.txt";
        FileWriter fw = new FileWriter(filename,true); //the true will append the new data
        fw.write("add a linen");//appends the string to the file
        fw.close();
    }
    catch(IOException ioe)
    {
        System.err.println("IOException: " + ioe.getMessage());
    }
    

    不应该所有的try / catch块的答案都包含在finally块中的.close()块?

    标记答案示例:

    PrintWriter out = null;
    try {
        out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)));
        out.println("the text");
    }catch (IOException e) {
        System.err.println(e);
    }finally{
        if(out != null){
            out.close();
        }
    } 
    

    另外,从Java 7开始,您可以使用try-with-resources语句。 关闭声明的资源不需要finally块,因为它是自动处理的,并且也不那么冗长:

    try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
        out.println("the text");
    }catch (IOException e) {
        System.err.println(e);
    }
    
    链接地址: http://www.djcxy.com/p/44051.html

    上一篇: How to append text to an existing file in Java

    下一篇: Architecting RESTful app ... out of ... Java Web app