How to Use I/O Streams in Java
No matter which programming language one chooses, performing input and output operations are the core knowledge that one definitely needs to posses. From disk files, devices, other programs to memory arrays, a stream can represent a...
Using Byte and Character Streams
Byte streams handle input and output of raw binary data, byte by byte. Raw binary data is the type of data that hasn't been processed yet, bunch of ones and zeroes.
Character streams handle and translate input and output of character data, character by character. Translation, in this case, means that character streams automatically transform character format from and to the local character set.
- Create a text file. Give it an arbitrary name and write something in it, such as I love wikiHow!. In this article, we will name it file.txt.
- Create a main method. You can add throws IOException declaration to the method signature to avoid adding the catch block to the try-with-resources block.
public static void main(String[] args) { }
- Create a try-with-resources block. Try-with-resources block will automatically close streams for us.
public static void main(String[] args) { try () { } }
- Create
FileInputStream
orFileReader
in the block statement. In the constructor of the created input stream, specify the name of the text file previously created. In this article, we called it file.txt.public static void main(String[] args) { try (FileInputStream in = new FileInputStream("file.txt")) { } }
- The former is a byte stream, the latter is a character stream.
- Create
FileOutputStream
orFileWriter
in the block statement. In the constructor of the created output stream, specify another arbitrary text file name. In this article, we will name it file-copy.txt.public static void main(String[] args) { try ( FileInputStream in = new FileInputStream("file.txt"); FileOutputStream out = new FileOutputStream("file-copy.txt") ) { } }
- If you created
FileInputStream
, you need to createFileOutputStream
. The same goes for theFileReader
andFileWriter
.
- If you created
- Create
int
variable. This variable will be used for temporary storage of read byte or character.public static void main(String[] args) { try ( FileInputStream in = new FileInputStream("file.txt"); FileOutputStream out = new FileOutputStream("file-copy.txt") ) { int data; } }
- Read data from input stream. Create a while loop in which the data is read into the previously created
int
variable until it reads the number-1
. In other words, it reads data from the file until it reaches the end of the file.public static void main(String[] args) { try ( FileInputStream in = new FileInputStream("file.txt"); FileOutputStream out = new FileOutputStream("file-copy.txt") ) { int data; while ((data = in.read()) != -1) { } } }
- Write data to the output stream. In the body of the while loop, write the read data to the output stream.
public static void main(String[] args) { try ( FileInputStream in = new FileInputStream("file.txt"); FileOutputStream out = new FileOutputStream("file-copy.txt") ) { int data; while ((data = in.read()) != -1) { out.write(data); } } }
- Catch and handle IOException. Add a catch block to the try-with-resources block, catch
IOException
and, in case of an error, print the stack trace to the console.public static void main(String[] args) { try ( FileInputStream in = new FileInputStream("file.txt"); FileOutputStream out = new FileOutputStream("file-copy.txt") ) { int data; while ((data = in.read()) != -1) { out.write(data); } } catch (IOException e) { e.printStackTrace(); } }
- Run the program. Contents of the
file.txt
are copied to thefile-copy.txt
which, if it doesn't exist yet, is created.
Using Buffered Streams
Buffered streams optimize input and output data. Buffer streams are more efficient than byte and character streams as they read and write from a buffer that is handled by Java platform rather than the underlying operating system. Most common usage of buffered streams is reading a textual file, line by line.
- Create a text file. Give it an arbitrary name and write something in it, such as I love wikiHow!. In this article, we will name it file.txt.
- Create a main method. You can add throws IOException declaration to the method signature to avoid adding the catch block to the try-with-resources block.
public static void main(String[] args) { }
- Create a try-with-resources block. Try-with-resources block will automatically close streams for us.
public static void main(String[] args) { try () { } }
- Create
BufferedReader
in the block statement. In the constructor of the created input stream, create aFileReader
and specify the name of the text file previously created inside its constructor. In this article, we called it file.txt.public static void main(String[] args) { try (BufferedReader in = new BufferedReader(new FileReader("file.txt"))) { } }
- Create
BufferedWriter
in the block statement. In the constructor of the created output stream, create aFileWriter
and specify another arbitrary text file name in its constructor. In this article, we will name it file-copy.txt.public static void main(String[] args) { try ( BufferedReader in = new BufferedReader(new FileReader("file.txt")); BufferedWriter out = new BufferedWriter(new FileWriter("file-copy.txt")) ) { } }
- Create
String
variable. This variable will be used for temporary storage of read lines.public static void main(String[] args) { try ( BufferedReader in = new BufferedReader(new FileReader("file.txt")); BufferedWriter out = new BufferedWriter(new FileWriter("file-copy.txt")) ) { String line; } }
- Read lines from input stream. Create a while loop in which the lines are read into the previously created
String
variable until it readsnull
. In other words, it reads data from the file until it reaches the end of the file.public static void main(String[] args) { try ( BufferedReader in = new BufferedReader(new FileReader("file.txt")); BufferedWriter out = new BufferedWriter(new FileWriter("file-copy.txt")) ) { String line; while ((line = in.readLine()) != null) { } } }
- Write lines to the output stream with line separator. In the body of the while loop, write the read lines to the output stream and append the line separator at the end of each line.
BufferedReader
reads lines, but omits the line separator.public static void main(String[] args) { try ( BufferedReader in = new BufferedReader(new FileReader("file.txt")); BufferedWriter out = new BufferedWriter(new FileWriter("file-copy.txt")) ) { String line; while ((line = in.readLine()) != null) { out.write(line + System.lineSeparator()); } } }
- Catch and handle IOException. Add a catch block to the try-with-resources block, catch
IOException
and, in case of an error, print the stack trace to the console.public static void main(String[] args) { try ( BufferedReader in = new BufferedReader(new FileReader("file.txt")); BufferedWriter out = new BufferedWriter(new FileWriter("file-copy.txt")) ) { String line; while ((line = in.readLine()) != null) { out.write(line + System.lineSeparator()); } } catch (IOException e) { e.printStackTrace(); } }
- Run the program. Contents of the
file.txt
are copied to thefile-copy.txt
which, if it doesn't exist yet, is created.
Using Data Streams
Data streams handle binary input and output of primitive data types and Strings. Data streams make it very easy to read and write boolean
, char
, byte
, short
, int
, long
, float
, double
and String
values. Most common usage of data streams is in network applications (e.g. instant messengers).
- Create a main method. You can add throws IOException declaration to the method signature to avoid adding the catch block to the try-with-resources block.
public static void main(String[] args) { }
- Create a try-with-resources block. Try-with-resources block will automatically close streams for us.
public static void main(String[] args) { try () { } }
- Create
DataOutputStream
in the block statement. In the constructor of the created input stream, createFileOutputStream
and specify an arbitrary file name inside its constructor. In this article, we will name it file.txt.public static void main(String[] args) { try (DataOutputStream out = new DataOutputStream(new FileOutputStream("file.txt"))) { } }
- Create
DataInputStream
in the block statement. In the constructor of the created input stream, create aFileInputStream
and specify file name from the previous step inside its constructor. In this article, we named it file.txt.public static void main(String[] args) { try ( DataOutputStream out = new DataOutputStream(new FileOutputStream("file.txt")); DataInputStream in = new DataInputStream(new FileInputStream("file.txt")) ) { } }
- Write some data to the output stream. In the body of the try-with-resources block, write String,
boolean
,int
and other primitive data to the output stream.public static void main(String[] args) { try ( DataOutputStream out = new DataOutputStream(new FileOutputStream("file.txt")); DataInputStream in = new DataInputStream(new FileInputStream("file.txt")) ) { out.writeUTF("wikiHow is a great place to learn"); out.writeBoolean(true); out.writeInt(10430); out.writeDouble(20.9d); out.writeFloat(23.10f); } }
- Read data from the input stream and print it. Read the data in the same order as it has been written and print it to the console.
public static void main(String[] args) { try ( DataOutputStream out = new DataOutputStream(new FileOutputStream("file.txt")); DataInputStream in = new DataInputStream(new FileInputStream("file.txt")) ) { out.writeUTF("wikiHow is a great place to learn"); out.writeBoolean(true); out.writeInt(10430); out.writeDouble(20.9d); out.writeFloat(23.10f); System.out.println(in.readUTF()); System.out.println(in.readBoolean()); System.out.println(in.readInt()); System.out.println(in.readDouble()); System.out.println(in.readFloat()); } }
- Catch and handle IOException. Add a catch block to the try-with-resources block, catch
IOException
and, in case of an error, print the stack trace to the console.public static void main(String[] args) { try ( DataOutputStream out = new DataOutputStream(new FileOutputStream("file.txt")); DataInputStream in = new DataInputStream(new FileInputStream("file.txt")) ) { out.writeUTF("wikiHow is a great place to learn"); out.writeBoolean(true); out.writeInt(10430); out.writeDouble(20.9d); out.writeFloat(23.10f); System.out.println(in.readUTF()); System.out.println(in.readBoolean()); System.out.println(in.readInt()); System.out.println(in.readDouble()); System.out.println(in.readFloat()); } catch (IOException e) { e.printStackTrace(); } }
- Run the program. Data is written to the
file.txt
and then read and printed to the console.wikiHow is a great place to learn true 10430 20.9 23.1
Using Object Streams
Object streams handle binary input and output of Java objects. Like data streams, object streams make it very easy to read and write primitive data types and Strings, but also any object that implements Serializable
interface. Most common usage of object streams is in network applications where both server and client are written in Java.
- Create a serializable class. Create a class that implements
Serializable
interface. Name the class however you'd like, but in this article we will name it WikiHowian.public class WikiHowian implements Serializable { }
- Create a few private (serializable) variables. Since
WikiHowian
class represents a person, we will create two String variables for first and last name and anint
variable for age.public class WikiHowian implements Serializable { private String firstName, lastName; private int age; }
- Create a constructor. The constructor will contain
firstName
,secondName
andage
parameters, corresponding to theprivate
variable types.public class WikiHowian implements Serializable { private String firstName, lastName; private int age; public WikiHowian(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } }
- Override
toString
method. OverridingtoString
will, later on, allow us to print the object to the console easily.public class WikiHowian implements Serializable { private String firstName, lastName; private int age; public WikiHowian(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } @Override public String toString() { return firstName + " " + lastName + ", " + age; } }
- Create a main method. You can add throws IOException, ClassNotFoundException declaration to the method signature to avoid adding the catch block to the try-with-resources block.
public class WikiHowian implements Serializable { private String firstName, lastName; private int age; public WikiHowian(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } @Override public String toString() { return firstName + " " + lastName + ", " + age; } public static void main(String[] args) { } }
- Create a try-with-resources block. Try-with-resources block will automatically close streams for us.
public class WikiHowian implements Serializable { private String firstName, lastName; private int age; public WikiHowian(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } @Override public String toString() { return firstName + " " + lastName + ", " + age; } public static void main(String[] args) { try () { } } }
- Create
ObjectOutputStream
in the block statement. In the constructor of the created input stream, createFileOutputStream
and specify an arbitrary file name inside its constructor. In this article, we will name it file.txt.public class WikiHowian implements Serializable { private String firstName, lastName; private int age; public WikiHowian(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } @Override public String toString() { return firstName + " " + lastName + ", " + age; } public static void main(String[] args) { try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file.txt"))) { } } }
- Create
ObjectInputStream
in the block statement. In the constructor of the created input stream, create aFileInputStream
and specify file name from the previous step inside its constructor. In this article, we named it file.txt.public class WikiHowian implements Serializable {
Update 05 March 2020You should read it
- string.h in C
- String (String) in C #
- String (String) in PHP
- String (String) in C / C ++
- String object in JavaScript
- Some ways to tie the pole or everyone should know
- Make changes in Git
- String in C
- How to split strings in Excel
- MID and MIDB functions to cut strings in Excel
- The function takes a string in Excel
- The computer now finalizes the string, solving it in a flash
Maybe you are interested
The 'Windows 11 style' Microsoft Edge interface is available, activate and experience immediately Google Chrome can be tweaked to match the style of Windows 11 What designers can learn from the amazing UX design of the Candy Crush game Microsoft has revealed the new Windows 10 interface, inviting you to view and comment Firefox 5 - Chrome 'Imitator'? Google Drive refines the user interface, making viewing folders easier
CategorySystem
Mac OS X
Hardware
Game
Tech info
Technology
Science
Life
Application
-
Web Email -
Website - Blog -
Web browser -
Support Download - Upload -
Software conversion -
Simulator software -
Online payment -
Office information -
Music Software -
Map and Positioning -
Installation - Uninstall -
Graphic design -
Free - Discount -
Email reader -
Edit video -
Edit photo -
Compress and Decompress -
Chat, Text, Call -
Archive - Share
Electric
Program
Mobile