La fonction FileUtils.writeStringToFile(fileName, text)
d'Apache Commons I/O écrase le texte précédent dans un fichier. Je voudrais ajouter des données à mon fichier. Existe-t-il un moyen d'utiliser les E/S Commons pour la même chose? Je peux le faire en utilisant BufferedWriter
normal de Java mais je suis curieux de voir la même chose en utilisant les E/S communes.
Il a été implémenté dans la version 2.1 d'Apache IO. Pour ajouter une chaîne au fichier, passez simplement true comme paramètre supplémentaire dans les fonctions:
ex:
FileUtils.writeStringToFile(file, "String to append", true);
Téléchargez la dernière version de Commons-io 2.1
FileUtils.writeStringToFile(File,Data,append)
définissez append sur true ....
Prudent. Cette implémentation semble fuir un descripteur de fichier ...
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() {}
}
En fait, la version 2.4 d'Apache-commons-io FileUtils a désormais également un mode d'ajout pour les collections.
Et la dépendance maven:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
<type>jar</type>
</dependency>
ce petit truc devrait faire l'affaire:
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: mon Eclipse était cassé, donc il ne m'a pas montré les erreurs plus tôt. erreurs corrigées
dans la version 2.5, vous devez passer un paramètre supplémentaire, à savoir l'encodage.
FileUtils.writeStringToFile(file, "line to append", "UTF-8", true);
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