Using File APIs

The Java Files API provides a set of classes and methods that allow Java programs to interact with the file system. It allows you to perform common file operations such as reading, writing, and deleting files.

java.io.File vs java.nio.file.Path

Java has two file APIs.
- The original java.io.File API, available since Java 1.0 (1996).
- The newer java.nio.file.Path API, available since Java 1.7 (2011).

File vs Path API

Nevertheless, java.nio.file.Path does everything java.io.File can, but generally in a better way and more. A few examples:
- File Features: The new classes support symlinks, proper file attributes and metadata support (think: PosixFileAttributes), ACLs and more.
- Better usage: E.g. when deleting a file, you get an exception with a meaningful error message (no such file, file locked, etc.), instead of a simple boolean saying false.
- Decoupling: Enabling support for in-memory file systems, which we’ll cover later.

Reading Files

To read the contents of a file in Java, you can use the java.nio.file.Files class, which provides a number of static methods for working with files. The most common method for reading a file is readAllLines, which reads all the lines in a file and returns them as a list of strings:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class ReadFileExample {
    public static void main(String[] args) throws Exception {
        List<String> lines = Files.readAllLines(Paths.get("folder\\file.txt"));
        for (String line : lines) {
            System.out.println(line);
        }
    }
}

Writing Files

To write to a file in Java, you can use the java.nio.file.Files class again, this time with the write method:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class WriteFileExample {
    public static void main(String[] args) throws Exception {
        String text = "Hello, world!";
        Files.write(Paths.get("folder\\file.txt"), text.getBytes(), StandardOpenOption.CREATE);
    }
}

Deleting Files and Directories

To delete a file in Java, you can use the java.nio.file.Files class with the delete method:

import java.nio.file.Files;
import java.nio.file.Paths;

public class DeleteFileExample {
    public static void main(String[] args) throws Exception {
        Files.delete(Paths.get("folder\\file.txt"));
    }
}

To delete a directory, you can use the java.nio.file.Files class again, this time with the delete method and a directory path:

import java.nio.file.Files;
import java.nio.file.Paths;

public class DeleteDirectoryExample {
    public static void main(String[] args) throws Exception {
        Files.delete(Paths.get("folder"));
    }
}

Manipulating Paths

When working with files and directories, you often need to manipulate paths. Java provides the java.nio.file.Path interface for working with paths. You can create a path using the Paths.get method:

import java.nio.file.Path;
import java.nio.file.Paths;

public class PathExample {
    public static void main(String[] args) throws Exception {
        Path path = Paths.get("directory", "file.txt");
        System.out.println(path.toString());
    }
}

Best Practices

When working with files in Java, it is important to properly handle exceptions and close files when you are done with them. It is also a good practice to use try-with-resources statements to automatically close files, and to use appropriate file permissions to ensure the security of your files.

Full Sample Code

The code bellow used try catch as best practices

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List; 

public class App {
    public static void main(String[] args) throws Exception {
        //Writing files 
		String text = "This is a test";
        try{
            Files.write(Paths.get("file.txt"), text.getBytes(), StandardOpenOption.CREATE);
            System.out.println("File wrote successfully");
        } catch (IOException exception){
            System.out.println("it wasn't possible to write the file");
        }
        
        //Reading files
        try{
            List<String> textRead = Files.readAllLines(Paths.get("file.txt"));
            for(String line: textRead)
                System.out.println(line);
		} catch (IOException exception){
            System.out.println("it wasn't possible to read the file");
        } 
        //Manipulating Paths
        Path path = Paths.get(".","file.txt");
        
        //Deleting
        try{
	        Files.delete(path);
        }catch (IOException exception){
            System.out.println("it wasn't possible to delete the file");
        }     
	}
}