Java Append to File
We can append to file in Java using following classes.
- FileWriter
- Java append content to existing file using BufferedWriter
- Append text to file in Java using PrintWriter
- Append to file in Java using FileOutputStream
If you are working on text data and the number of write operations is less, use FileWriter and use its constructor with append flag value as true. If the number of write operations is huge, you should use the BufferedWriter. To append binary or raw stream data to an existing file, you should use FileOutputStream.
FileWriter
Here is the short program using FileWriter. We will look into a complete example program later on.
File file = new File("append.txt");
FileWriter fr = new FileWriter(file, true);
fr.write("data");
fr.close();
Java Append Content to Existing File Using BufferedWriter
File file = new File("append.txt");
FileWriter fr = new FileWriter(file, true);
BufferedWriter br = new BufferedWriter(fr);
br.write("data");
br.close();
fr.close();
Java append to file using PrintWriter
We can also use PrintWriter to append to file in Java.
File file = new File("append.txt");
FileWriter fr = new FileWriter(file, true);
BufferedWriter br = new BufferedWriter(fr);
PrintWriter pr = new PrintWriter(br);
pr.println("data");
pr.close();
br.close();
fr.close();
FileOutputStream
You should use FileOutputStream to append data to file when it’s raw data, binary data, images, videos etc.
OutputStream os = new FileOutputStream(new File("append.txt"), true);
os.write("data".getBytes(), 0, "data".length());
os.close();
Example
Here is the final program showing all the different options we discussed above.
package com.journaldev.files;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
public class JavaAppendToFile {
/**
* Java append to file example
*
* @param args
*/
public static void main(String[] args) {
String filePath = "/Users/pankaj/Downloads/append.txt";
String appendText = "This String will be appended to the file, Byte=0x0A 0xFF";
appendUsingFileWriter(filePath, appendText);
appendUsingBufferedWriter(filePath, appendText, 2);
appendUsingPrintWriter(filePath, appendText);
appendUsingFileOutputStream(filePath, appendText);
}
private static void appendUsingPrintWriter(String filePath, String text) {
File file = new File(filePath);
FileWriter fr = null;
BufferedWriter br = null;
PrintWriter pr = null;
try {
// to append to file, you need to initialize FileWriter using below constructor
fr = new FileWriter(file, true);
br = new BufferedWriter(fr);
pr = new PrintWriter(br);
pr.println(text);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
pr.close();
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* Use Stream for java append to file when you are dealing with raw data, binary
* data
*
* @param data
*/
private static void appendUsingFileOutputStream(String fileName, String data) {
OutputStream os = null;
try {
// below true flag tells OutputStream to append
os = new FileOutputStream(new File(fileName), true);
os.write(data.getBytes(), 0, data.length());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* Use BufferedWriter when number of write operations are more
*
* @param filePath
* @param text
* @param noOfLines
*/
private static void appendUsingBufferedWriter(String filePath, String text, int noOfLines) {
File file = new File(filePath);
FileWriter fr = null;
BufferedWriter br = null;
try {
// to append to file, you need to initialize FileWriter using below constructor
fr = new FileWriter(file, true);
br = new BufferedWriter(fr);
for (int i = 0; i < noOfLines; i++) {
br.newLine();
// you can use write or append method
br.write(text);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* Use FileWriter when number of write operations are less
*
* @param filePath
* @param text
* @param noOfLines
*/
private static void appendUsingFileWriter(String filePath, String text) {
File file = new File(filePath);
FileWriter fr = null;
try {
// Below constructor argument decides whether to append or override
fr = new FileWriter(file, true);
fr.write(text);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
That’s all!.