Codectionary / Developer documentation / Java

Java File Handling

Use Path to identify a file and Files to read or write it. These examples require Java 11 or later. Save each as Main.java, then run javac Main.java and java Main. I/O operations can throw IOException.

Syntax

Path path = Path.of("notes.txt");
String text = Files.readString(path, StandardCharsets.UTF_8);
Files.writeString(path, "Updated notes", StandardCharsets.UTF_8);

Examples

Write, append and read text

Prints HTML and CSS on separate lines. Uses a temporary file and deletes it afterward.

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;

public class Main {
  public static void main(String[] args) throws IOException {
    Path file = Files.createTempFile("codectionary-", ".txt");
    try {
      Files.writeString(file, "HTML\n", StandardCharsets.UTF_8);
      Files.writeString(file, "CSS\n", StandardCharsets.UTF_8, StandardOpenOption.APPEND);
      System.out.print(Files.readString(file, StandardCharsets.UTF_8));
    } finally {
      Files.deleteIfExists(file);
    }
  }
}

Read one line at a time

The reader closes before cleanup, including when reading fails.

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
  public static void main(String[] args) throws IOException {
    Path file = Files.createTempFile("topics-", ".txt");
    try {
      Files.writeString(file, "Arrays\nMethods\n", StandardCharsets.UTF_8);
      try (BufferedReader reader = Files.newBufferedReader(file, StandardCharsets.UTF_8)) {
        String line;
        while ((line = reader.readLine()) != null) {
          System.out.println(line);
        }
      }
    } finally {
      Files.deleteIfExists(file);
    }
  }
}

Best practices

  • Use UTF-8 explicitly for text. Binary files require byte-oriented methods.
  • writeString replaces existing contents by default. Use APPEND when you intend to add text.
  • Use buffered reading for large files and try-with-resources to close readers. Path itself does not need closing.
  • These examples declare throws IOException to keep failures visible. Handle failures where an application can recover or explain the problem.
  • Relative paths use the current working directory. Temporary practice files are not persistent storage.

At a glance

Purpose
General-purpose application development
File extension
.java
Runs in
Java Virtual Machine
Usually used with
JDK and Java libraries

Specifications & further reading

Related Java documentation

Variables & Primitive Data Types
Java is a statically-typed language, meaning every variable must be declared with an explicit type before use, and that type cannot change afterward. Java has eight primitive types - byte, short, int, long, float, double, char, and boolean - which store simple values directly rather than references, making them fast and memory-efficient. Anything beyond primitives (String, arrays, custom classes) is a reference type instead.
System.out.println / print / printf
System.out is Java's standard output stream, and it exposes three main methods for writing text to the console. println() prints its argument followed by a newline, print() prints without adding a newline, and printf() gives C-style formatted output using format specifiers like %d, %s, and %.2f for precise control over how values are displayed.
Comments & Javadoc
Java supports single-line comments with //, multi-line comments with /* */, and a special documentation format called Javadoc, written as /** */. Javadoc comments support tags like @param, @return, and @throws, and can be processed by the javadoc tool to automatically generate HTML API documentation - the same format used for Java's own official standard library docs.
Arithmetic & Assignment Operators
Java provides the standard arithmetic operators for numeric computation: +, -, *, / for division, and % for the remainder (modulus). It also has compound assignment operators (+=, -=, etc.) that combine an operation with assignment, along with increment (++) and decrement (--) operators in both prefix and postfix forms, which subtly differ in when the value is updated relative to being used.