Je voudrais ajouter une nouvelle ligne à un fichier existant sans effacer les informations actuelles de ce fichier. En bref, voici la méthodologie que j'utilise l'heure actuelle:
import Java.io.BufferedWriter;
import Java.io.FileWriter;
import Java.io.Writer;
Writer output;
output = new BufferedWriter(new FileWriter(my_file_name)); //clears file every time
output.append("New Line!");
output.close();
Le problème avec les lignes ci-dessus est simplement qu'ils effacent tout le contenu de mon fichier existant puis ajoutent le texte de la nouvelle ligne.
Je veux ajouter du texte à la fin du contenu d'un fichier sans rien effacer ni remplacer.
vous devez ouvrir le fichier en mode annexe, ce qui peut être obtenu à l'aide du constructeur FileWriter(String fileName, boolean append)
.
output = new BufferedWriter(new FileWriter(my_file_name, true));
devrait faire l'affaire
La solution avec FileWriter
fonctionne, cependant vous n’avez pas la possibilité de spécifier le codage de sortie, auquel cas le codage par défaut pour la machine sera utilisé, et il ne s’agit généralement pas d’UFF-8!
Donc, au mieux, utilisez FileOutputStream
:
Writer writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file, true), "UTF-8"));
Essayez: "\ r\n"
exemple de Java 7:
// append = true
try(PrintWriter output = new PrintWriter(new FileWriter("log.txt",true)))
{
output.printf("%s\r\n", "NEWLINE");
}
catch (Exception e) {}
À partir de Java 7 :
Définissez un chemin et la chaîne contenant le séparateur de ligne au début:
_Path p = Paths.get("C:\\Users\\first.last\\test.txt");
String s = System.lineSeparator() + "New Line!";
_
et vous pouvez ensuite utiliser l'une des approches suivantes:
Utilisation de Files.write
(petits fichiers):
_try {
Files.write(p, s.getBytes(), StandardOpenOption.APPEND);
} catch (IOException e) {
System.err.println(e);
}
_
Utilisation de Files.newBufferedWriter
(fichiers texte):
_try (BufferedWriter writer = Files.newBufferedWriter(p, StandardOpenOption.APPEND)) {
writer.write(s);
} catch (IOException ioe) {
System.err.format("IOException: %s%n", ioe);
}
_
Utilisation de Files.newOutputStream
(interopérable avec _Java.io
_ API):
_try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(p, StandardOpenOption.APPEND))) {
out.write(s.getBytes());
} catch (IOException e) {
System.err.println(e);
}
_
Utilisation de Files.newByteChannel
(fichiers à accès aléatoire):
_try (SeekableByteChannel sbc = Files.newByteChannel(p, StandardOpenOption.APPEND)) {
sbc.write(ByteBuffer.wrap(s.getBytes()));
} catch (IOException e) {
System.err.println(e);
}
_
Utilisation de FileChannel.open
(fichiers à accès aléatoire):
_try (FileChannel sbc = FileChannel.open(p, StandardOpenOption.APPEND)) {
sbc.write(ByteBuffer.wrap(s.getBytes()));
} catch (IOException e) {
System.err.println(e);
}
_
Des détails sur ces méthodes sont disponibles dans le tutoriel d'Oracle .
Si vous recherchez une méthode de copier/coller permettant de créer et d'écrire dans un fichier, en voici une que j'ai écrite et qui nécessite simplement une entrée String. Supprimez 'true' de PrintWriter si vous souhaitez écraser le fichier à chaque fois.
private static final String newLine = System.getProperty("line.separator");
private synchronized void writeToFile(String msg) {
String fileName = "c:\\TEMP\\runOutput.txt";
PrintWriter printWriter = null;
File file = new File(fileName);
try {
if (!file.exists()) file.createNewFile();
printWriter = new PrintWriter(new FileOutputStream(fileName, true));
printWriter.write(newLine + msg);
} catch (IOException ioex) {
ioex.printStackTrace();
} finally {
if (printWriter != null) {
printWriter.flush();
printWriter.close();
}
}
}
Sur la ligne 2, changez new FileWriter(my_file_name)
en new FileWriter(my_file_name, true)
pour que vous ajoutiez au fichier plutôt que de l'écraser.
File f = new File("/path/of/the/file");
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
bw.append(line);
bw.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
Vous pouvez utiliser le constructeur FileWriter(String fileName, boolean append)
si vous souhaitez ajouter des données au fichier.
Changez votre code pour ceci:
output = new BufferedWriter(new FileWriter(my_file_name, true));
De FileWriter javadoc:
Construit un objet FileWriter à partir d'un nom de fichier. Si le deuxième argument est true, les octets seront alors écrits à la fin du fichier plutôt qu'au début.