OutputStream
is an abstract class for writing raw bytes to a destination (like a file, memory buffer, socket, etc.). Subclasses handle actual implementations, such as FileOutputStream
, BufferedOutputStream
, etc.
Commonly Used Methods

Simple Program – Write Data to File
LotusJavaPrince wants to write the string “Hello, Mahesh!” to a file using FileOutputStream.
import java.io.FileOutputStream; import java.io.IOException; public class SimpleOutputStreamExample { public static void main(String[] args) { String message = "Hello, Mahesh!"; try (FileOutputStream fos = new FileOutputStream("greeting.txt")) { fos.write(message.getBytes()); // Convert string to bytes and write System.out.println("Message written to file."); } catch (IOException e) { System.err.println("Error writing to file: " + e.getMessage()); } } }
Output:
A file named greeting.txt will contain:
Hello, Mahesh!
Problem Statement:
LotusJavaPrince is building a logging system. Every log message (INFO, WARNING, ERROR) must be written to a file using OutputStream
. The log should append messages for every run.
import java.io.FileOutputStream; import java.io.IOException; import java.time.LocalDateTime; public class Logger { private static final String LOG_FILE = "system.log"; public static void log(String level, String message) { String timestamp = LocalDateTime.now().toString(); String logEntry = timestamp + " [" + level.toUpperCase() + "] " + message + "\n"; try (FileOutputStream fos = new FileOutputStream(LOG_FILE, true)) { fos.write(logEntry.getBytes()); fos.flush(); } catch (IOException e) { System.err.println("Logging failed: " + e.getMessage()); } } public static void main(String[] args) { log("INFO", "System started by LotusJavaPrince"); log("WARNING", "Mahesh noticed high CPU usage"); log("ERROR", "Database connection lost"); } }
Output in system.log:
2025-05-30T12:45:32.789 [INFO] System started by LotusJavaPrince
2025-05-30T12:45:32.790 [WARNING] Mahesh noticed high CPU usage
2025-05-30T12:45:32.791 [ERROR] Database connection lost
Code language: CSS (css)
In the above output each execution appends new logs.
OutputStream
is the superclass for writing byte-based output.
- It cannot be instantiated directly – use subclasses like
FileOutputStream
. - Useful for writing to files, sockets, buffers, etc.
- Works at low-level byte granularity, suitable for binary data.