Добавить данные в файл с помощью Apache Commons I / O - PullRequest
30 голосов
/ 03 июня 2010

Функция FileUtils.writeStringToFile(fileName, text) ввода / вывода Apache Commons перезаписывает предыдущий текст в файле. Я хотел бы добавить данные в мой файл. Можно ли как-нибудь использовать Commons I / O для того же? Я могу сделать это, используя обычный BufferedWriter из Java, но мне любопытно относительно того же, используя ввод / вывод Commons.

Ответы [ 7 ]

53 голосов
/ 28 ноября 2011

Это было реализовано в версии 2.1 Apache IO. Чтобы добавить строку в файл, просто передайте true в качестве дополнительного параметра в функции:

  • FileUtils.writeStringToFile
  • FileUtils.openOutputStream
  • FileUtils.write
  • FileUtils.writeByteArrayToFile
  • FileUtils.writeLines

например:

    FileUtils.writeStringToFile(file, "String to append", true);
5 голосов
/ 02 декабря 2011

Скачать последнюю версию Commons-io 2.1

FileUtils.writeStringToFile(File,Data,append)

установить добавление к истине ....

4 голосов
/ 12 марта 2011

Тщательное. Эта реализация, кажется, утечка дескриптор файла ...

public final class AppendUtils {

    public static void appendToFile(final InputStream in, final File f) throws IOException {
        OutputStream stream = null;
        try {
            stream = outStream(f);
            IOUtils.copy(in, stream);
        } finally {
            IOUtils.closeQuietly(stream);
        }
    }

    public static void appendToFile(final String in, final File f) throws IOException {
        InputStream stream = null;
        try {
            stream = IOUtils.toInputStream(in);
            appendToFile(stream, f);
        } finally {
            IOUtils.closeQuietly(stream);
        }
    }

    private static OutputStream outStream(final File f) throws IOException {
        return new BufferedOutputStream(new FileOutputStream(f, true));
    }

    private AppendUtils() {}

}
2 голосов
/ 20 июня 2015

На самом деле, версия 2.4 apache-commons-io FileUtils теперь также имеет режим добавления для коллекций.

Вот этот Javadoc

И зависимость maven:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
    <type>jar</type>
</dependency>
2 голосов
/ 04 июня 2010

эта маленькая штуковина должна сделать свое дело:

package com.yourpackage;

// you're gonna want to optimize these imports
import java.io.*;
import org.apache.commons.io.*;

public final class AppendUtils {

    public static void appendToFile(final InputStream in, final File f)
            throws IOException {
        IOUtils.copy(in, outStream(f));
    }

    public static void appendToFile(final String in, final File f)
            throws IOException {
        appendToFile(IOUtils.toInputStream(in), f);
    }

    private static OutputStream outStream(final File f) throws IOException {
        return new BufferedOutputStream(new FileOutputStream(f, true));
    }

    private AppendUtils() {
    }

}

edit: мое затмение было разбито, поэтому раньше оно не показывало ошибки. исправлены ошибки

1 голос
/ 23 июля 2017

в версии 2.5 вам нужно передать один дополнительный параметр, т. Е. Кодирование.

FileUtils.writeStringToFile(file, "line to append", "UTF-8", true);
0 голосов
/ 28 ноября 2011
public static void writeStringToFile(File file,
                                     String data,
                                     boolean append)
                              throws IOException


   Writes the toString() value of each item in a collection to the specified File line by line. The default VM encoding and the default line ending will be used.

Parameters:
    file - the file to write to
    lines - the lines to write, null entries produce blank lines
    append - if true, then the lines will be added to the end of the file rather than overwriting 
Throws:
    IOException - in case of an I/O error
Since:
    Commons IO 2.1
...