2010-06-03 12 views
28

Funkcja I/O Apache Commons I/O zastępuje poprzedni tekst w pliku. Chciałbym dołączyć dane do mojego pliku. Czy jest jakiś sposób, abym mógł używać Commons I/O do tego samego? Mogę to zrobić za pomocą zwykłego BufferedWriter z Javy, ale jestem ciekawy co do tego samego wykorzystania Commons I/O.Dołączanie danych do pliku za pomocą Apache Commons I/O

+1

Nie sądzę, że istnieje metoda gotowa do tego. Możesz oczywiście zrobić readLines (...). Append (myLines), ale przypuszczam, że mówisz o potencjalnie bardzo dużym pliku. – extraneon

+1

Tak! Mam 27k plików z około 900,00 wpisów w nim. Szukasz więcej innowacji tutaj! – Dexter

+1

Istnieje otwarte żądanie funkcji (https://issues.apache.org/jira/browse/IO-182). Niestety, jest otwarty od września 2008 r. I nie wykazuje żadnych oznak, że ktokolwiek w rzeczywistości wyciąga palec i robi to. – skaffman

Odpowiedz

47

Został zaimplementowany w wersji 2.1 Apache IO. Aby dołączyć ciąg do pliku po prostu przekazać prawdziwą jako dodatkowy parametr w funkcji:

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

np .:

FileUtils.writeStringToFile(file, "String to append", true); 
+0

Dzięki za odpowiedź. +1 – Diganta

+1

Powinien być inny argument do 'writeStringToFile()' na trzeciej pozycji: 'Zestaw znaków' do użycia. Obecne wersje Apache IO zgłaszają wyżej wspomnianą metodę jako nieaktualną. – vektor

2

ten mały thingy powinno załatwić sprawę:

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: mój zaćmienie był zepsuty, więc nie pokazać mi błędy wcześniej. naprawiono błędy

+0

Seanizer, dzięki kolego! – Dexter

4

Ostrożnie. Ta implementacja wydaje się przeciekać uchwyt pliku ...

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() {} 

} 
+0

+1. A teraz potrzebujemy tylko narzędzia w stylu Java 7 z nowym stylem zarządzania zasobami: http://www.oracle.com/technetwork/articles/java/trywithresources-401775.html ... a także - jak do diabła nie jest " t te rzeczy zawarte w Apache Commons lub innej bibliotece? – ripper234

+0

Ach, nieważne, FileUtils w rzeczywistości zawierają FileUtils.writeStringToFile(); Głosuj na http://stackoverflow.com/a/8294642/11236 – ripper234

0
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 
+0

Jak zamknąć strumień wyjściowy w tym przypadku? – Rishi

4

Pobierz najnowszą wersję Commons-io 2,1

FileUtils.writeStringToFile(File,Data,append) 

zestaw dołączyć true ....

+1

Duplikat http://stackoverflow.com/a/8294642/11236 – ripper234

2

Właściwie, wersja 2.4 z Apache commons-io fileutils ma teraz tryb dołączania również do kolekcji.

Here's the Javadoc

A zależność Maven:

<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>2.4</version> 
    <type>jar</type> 
</dependency> 
0

w wersji 2.5 trzeba przekazać jeden dodatkowy parametr tj, kodowanie.

FileUtils.writeStringToFile(file, "line to append", "UTF-8", true); 
+0

Użyj 'StandardCharsets.UTF_8' w JDK8 zamiast stałej łańcuchowej" UTF-8 ". –

Powiązane problemy