← Back to Core Java Course | Chapter 12: File I/O | Lesson 7 of 9

Java FileInputStream & FileOutputStream

Writing Bytes with FileOutputStream

FileOutputStream writes raw bytes to a file rather than characters, making it the right choice for binary data like images or serialized objects where no text encoding applies.

Example: Writing Bytes with FileOutputStream

java
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
	public static void main(String[] args) throws IOException {
		FileOutputStream out = new FileOutputStream("data.bin");
		out.write(65); // raw byte, not text
		out.close();
		System.out.println("Written");
	}
}

Reading Bytes with FileInputStream

FileInputStream reads raw bytes back from a file the same way, pairing with FileOutputStream for binary round-tripping — reading into a byte[] buffer rather than a String.

Example: Reading Bytes with FileInputStream

java
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class Main {
	public static void main(String[] args) throws IOException {
		FileOutputStream out = new FileOutputStream("data.bin");
		out.write(65);
		out.close();
		FileInputStream in = new FileInputStream("data.bin");
		System.out.println(in.read());
		in.close();
	}
}

Copying Binary Files

Copying a binary file means reading bytes from a FileInputStream in chunks and writing each chunk straight to a FileOutputStream, without ever interpreting the bytes as text.

Example: Copying Binary Files

java
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class Main {
	public static void main(String[] args) throws IOException {
		FileOutputStream out = new FileOutputStream("source.bin");
		out.write(new byte[]{1, 2, 3});
		out.close();
		FileInputStream in = new FileInputStream("source.bin");
		FileOutputStream copy = new FileOutputStream("copy.bin");
		byte[] buffer = new byte[1024];
		int len;
		while ((len = in.read(buffer)) != -1) {
			copy.write(buffer, 0, len);
		}
		in.close();
		copy.close();
		System.out.println("Copied");
	}
}

Auto-Close Try-With-Resources

Try-with-resources works the same way for byte streams as for character streams, automatically closing both the input and output streams once the copy operation completes or throws.

Example: Auto-Close Try-With-Resources

java
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
	public static void main(String[] args) throws IOException {
		try (FileOutputStream out = new FileOutputStream("data.bin")) { // auto-closed
			out.write(65);
		}
		System.out.println("Closed automatically");
	}
}

String to Bytes conversion

String.getBytes() converts text into raw bytes (using a specified or default charset) when you need to write string data out through a byte-oriented stream instead of a character-oriented one.

Example: String to Bytes conversion

java
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
	public static void main(String[] args) throws IOException {
		byte[] bytes = "Hello".getBytes();
		try (FileOutputStream out = new FileOutputStream("text.bin")) {
			out.write(bytes);
		}
		System.out.println("Written as bytes");
	}
}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.