Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the spectra-pro domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home4/mahidhar/public_html/wp-includes/functions.php on line 6114
Java Basic IO | tutorialQ

Java Basic IO

Basic I/O in Java

Input and Output (I/O) in Java is a fundamental concept for reading from and writing to different data sources such as the console, files, and network connections. Java provides a rich set of classes and methods in the java.io package for handling I/O operations.

Reading and Writing to the Console

Reading from the Console

Java provides the Scanner class for reading input from the console. The Scanner class is part of the java.util package.

  • Example:
Java
  import java.util.Scanner;

  public class ConsoleInput {
      public static void main(String[] args) {
          Scanner scanner = new Scanner(System.in);
          System.out.print("Enter your name: ");
          String name = scanner.nextLine();
          System.out.println("Hello, " + name + "!");
      }
  }

Writing to the Console

The System.out object is used for writing output to the console. It provides methods such as print(), println(), and printf() for different output formats.

  • Example:
Java
  public class ConsoleOutput {
      public static void main(String[] args) {
          System.out.println("Hello, World!");
          System.out.print("This is printed on the same line. ");
          System.out.println("This is printed on a new line.");
          System.out.printf("Formatted output: %d %s%n", 2024, "Year");
      }
  }

Working with Files

Java provides several classes in the java.io and java.nio packages for reading from and writing to files.

Reading from a File

  • Using BufferedReader:
Java
  import java.io.BufferedReader;
  import java.io.FileReader;
  import java.io.IOException;

  public class FileReadExample {
      public static void main(String[] args) {
          try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
              String line;
              while ((line = br.readLine()) != null) {
                  System.out.println(line);
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  • Using Files Class (Java NIO):
Java
  import java.nio.file.Files;
  import java.nio.file.Paths;
  import java.io.IOException;
  import java.util.List;

  public class NIOFileReadExample {
      public static void main(String[] args) {
          try {
              List<String> lines = Files.readAllLines(Paths.get("example.txt"));
              for (String line : lines) {
                  System.out.println(line);
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }

Writing to a File

  • Using BufferedWriter:
Java
  import java.io.BufferedWriter;
  import java.io.FileWriter;
  import java.io.IOException;

  public class FileWriteExample {
      public static void main(String[] args) {
          try (BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"))) {
              bw.write("Hello, World!");
              bw.newLine();
              bw.write("Java I/O is powerful.");
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  • Using Files Class (Java NIO):
Java
  import java.nio.file.Files;
  import java.nio.file.Paths;
  import java.io.IOException;
  import java.util.Arrays;
  import java.util.List;

  public class NIOFileWriteExample {
      public static void main(String[] args) {
          List<String> lines = Arrays.asList("Hello, World!", "Java NIO is powerful.");
          try {
              Files.write(Paths.get("example.txt"), lines);
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }

Best Practices for File I/O

  • Use try-with-resources: Ensure that resources like files and streams are closed properly by using the try-with-resources statement.
  • Buffering: Use buffered I/O classes (BufferedReader, BufferedWriter) to improve performance by reducing the number of I/O operations.
  • Exception Handling: Handle exceptions appropriately to avoid resource leaks and ensure that your program can recover from errors.
  • Use NIO for Large Files: For large files, prefer the java.nio package as it provides more efficient and scalable file operations.

Most Performant Ways to Read and Write Large Files

When dealing with large files, performance is crucial. Here are some techniques to efficiently read and write large files in Java:

Using NIO Channels and Buffers

NIO (New I/O) provides the FileChannel class for high-performance I/O operations.

  • Reading Large Files:
Java
  import java.io.RandomAccessFile;
  import java.nio.ByteBuffer;
  import java.nio.channels.FileChannel;
  import java.io.IOException;

  public class NIOFileChannelReadExample {
      public static void main(String[] args) {
          try (RandomAccessFile file = new RandomAccessFile("largefile.txt", "r");
               FileChannel channel = file.getChannel()) {

              ByteBuffer buffer = ByteBuffer.allocate(1024);
              while (channel.read(buffer) > 0) {
                  buffer.flip();
                  while (buffer.hasRemaining()) {
                      System.out.print((char) buffer.get());
                  }
                  buffer.clear();
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  • Writing Large Files:
Java
  import java.io.RandomAccessFile;
  import java.nio.ByteBuffer;
  import java.nio.channels.FileChannel;
  import java.io.IOException;

  public class NIOFileChannelWriteExample {
      public static void main(String[] args) {
          try (RandomAccessFile file = new RandomAccessFile("largefile.txt", "rw");
               FileChannel channel = file.getChannel()) {

              String data = "This is a large file writing example.";
              ByteBuffer buffer = ByteBuffer.allocate(1024);
              buffer.put(data.getBytes());
              buffer.flip();
              channel.write(buffer);
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }

Using Memory-Mapped Files

Memory-mapped files can significantly improve performance when reading from or writing to large files. This technique maps a region of the file directly into memory, allowing for fast access.

  • Example:
Java
  import java.io.IOException;
  import java.io.RandomAccessFile;
  import java.nio.MappedByteBuffer;
  import java.nio.channels.FileChannel;

  public class MemoryMappedFileExample {
      public static void main(String[] args) {
          try (RandomAccessFile file = new RandomAccessFile("largefile.txt", "rw");
               FileChannel channel = file.getChannel()) {

              MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, channel.size());
              for (int i = 0; i < buffer.limit(); i++) {
                  buffer.put(i, (byte) (buffer.get(i) + 1)); // Simple operation on each byte
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }

Summary

Java provides robust and efficient ways to perform I/O operations. For console I/O, use Scanner for reading and System.out for writing. For file I/O, BufferedReader and BufferedWriter offer simple and efficient methods, while java.nio package classes like FileChannel and Files provide more performant solutions for large files. Always follow best practices like using try-with-resources for proper resource management and handling exceptions appropriately.

Scroll to Top