Java Basic Input and Output


In Java, input and output (I/O) operations are essential for interacting with the user and managing data flow. Whether it's reading user input, writing data to the console, or working with files, understanding how to handle basic I/O is crucial. In this guide, we will explore how to perform basic input and output operations in Java, including reading from the console and writing to the console.

Table of Contents

  1. Introduction to Java I/O
  2. Java Input: Using Scanner
  3. Java Output: Using System.out
  4. Java File I/O

Introduction to Java I/O

Input and Output (I/O) in Java refer to the process of receiving data (input) from users, files, or other systems, and displaying or storing data (output). The Java I/O API provides a set of classes and interfaces to facilitate these operations.

There are two primary types of I/O in Java:

  1. Byte Stream: Deals with raw binary data.
  2. Character Stream: Deals with data in character form (text).

In this guide, we will primarily focus on basic console-based I/O, which is ideal for getting started with Java I/O operations.


Java Input: Using Scanner

In Java, one of the most common ways to get input from the user is by using the Scanner class, which is part of the java.util package. It allows reading data from various sources, including the console.

Reading Data from the Console

To read user input from the console, we can create a Scanner object and use its various methods to capture different types of input.

Example: Reading String Input

import java.util.Scanner;

public class ConsoleInput {
    public static void main(String[] args) {
        // Create a Scanner object to read input
        Scanner scanner = new Scanner(System.in);

        // Prompt the user
        System.out.print("Enter your name: ");
        
        // Read a string input
        String name = scanner.nextLine();

        // Output the entered name
        System.out.println("Hello, " + name + "!");
        
        // Close the scanner to prevent resource leaks
        scanner.close();
    }
}

Reading Different Data Types

Scanner provides various methods to read different types of data from the user, such as integers, floating-point numbers, and boolean values.

Example: Reading Integer, Double, and Boolean Input

import java.util.Scanner;

public class DataInput {
    public static void main(String[] args) {
        // Create a Scanner object
        Scanner scanner = new Scanner(System.in);

        // Read an integer
        System.out.print("Enter an integer: ");
        int number = scanner.nextInt();

        // Read a floating-point number
        System.out.print("Enter a double value: ");
        double decimal = scanner.nextDouble();

        // Read a boolean value
        System.out.print("Enter a boolean (true/false): ");
        boolean isActive = scanner.nextBoolean();

        // Output the entered values
        System.out.println("Integer: " + number);
        System.out.println("Double: " + decimal);
        System.out.println("Boolean: " + isActive);

        // Close the scanner
        scanner.close();
    }
}

Java Output: Using System.out

In Java, output to the console is commonly done using the System.out object, which provides methods like print(), println(), and printf().

Printing Text to the Console

The println() method prints the given text followed by a newline, while print() just prints the text without moving to a new line.

Example: Using print() and println()

public class ConsoleOutput {
    public static void main(String[] args) {
        // Print text with a newline
        System.out.println("Welcome to Java programming!");

        // Print text without a newline
        System.out.print("Enter your age: ");
        // In the next line, the user would enter input, but no newline happens
    }
}

Using printf for Formatted Output

The printf() method allows you to format your output in a specific way, using placeholders for data types and additional formatting options.

Example: Using printf() for Formatted Output

public class FormattedOutput {
    public static void main(String[] args) {
        String name = "John";
        int age = 30;
        double salary = 50000.75;

        // Format the output using printf
        System.out.printf("Name: %s\n", name);
        System.out.printf("Age: %d\n", age);
        System.out.printf("Salary: %.2f\n", salary); // Limiting the decimal places to 2
    }
}

In the printf() method:

  • %s is used for strings.
  • %d is used for integers.
  • %.2f is used for floating-point numbers (with two decimal places).

Java File I/O

While console input and output are useful, sometimes you may need to read from or write to a file. Java provides classes in the java.io package, such as FileReader, FileWriter, BufferedReader, and BufferedWriter, to handle file-based I/O operations.

Reading from a File

To read text from a file, you can use a combination of FileReader and BufferedReader.

Example: Reading from a File

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReading {
    public static void main(String[] args) {
        // Specify the file path
        String filePath = "sample.txt";
        
        // Create a BufferedReader to read the file
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            
            // Read the file line by line
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("An error occurred while reading the file: " + e.getMessage());
        }
    }
}

In this example, we use BufferedReader to read the file efficiently line by line.

Writing to a File

To write text to a file, you can use FileWriter and BufferedWriter.

Example: Writing to a File

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriting {
    public static void main(String[] args) {
        // Specify the file path
        String filePath = "output.txt";

        // Create a BufferedWriter to write to the file
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write("This is a line of text.");
            writer.newLine();  // Add a new line
            writer.write("This is another line of text.");
        } catch (IOException e) {
            System.out.println("An error occurred while writing to the file: " + e.getMessage());
        }
    }
}

This example shows how to use BufferedWriter to write data to a file efficiently. The newLine() method is used to insert a line break in the file.