Title here
Summary here
Here’s the translation of the Go code example for reading files into Java, formatted in Markdown suitable for Hugo:
Our first example shows various ways to read files in Java. Reading files is a common task in many Java programs.
import java.io.*;
import java.nio.file.*;
public class ReadingFiles {
// This helper method will streamline our error checks
private static void check(Exception e) {
if (e != null) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
try {
// Perhaps the most basic file reading task is
// slurping a file's entire contents into memory.
String content = new String(Files.readAllBytes(Paths.get("/tmp/dat")));
System.out.print(content);
// You'll often want more control over how and what
// parts of a file are read. For these tasks, start
// by creating a FileInputStream.
FileInputStream fis = new FileInputStream("/tmp/dat");
// Read some bytes from the beginning of the file.
// Allow up to 5 to be read but also note how many
// actually were read.
byte[] b1 = new byte[5];
int n1 = fis.read(b1);
System.out.printf("%d bytes: %s\n", n1, new String(b1, 0, n1));
// You can also seek to a known position in the file
// and read from there.
fis.getChannel().position(6);
byte[] b2 = new byte[2];
int n2 = fis.read(b2);
System.out.printf("%d bytes @ %d: ", n2, 6);
System.out.printf("%s\n", new String(b2, 0, n2));
// Seeking relative to the current position and end of file
// can be done using FileChannel
FileChannel channel = fis.getChannel();
channel.position(channel.position() + 4);
channel.position(channel.size() - 10);
// The java.io package provides some classes that may
// be helpful for file reading. For example, reads
// like the ones above can be more robustly
// implemented with BufferedInputStream.
channel.position(6);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] b3 = new byte[2];
int n3 = bis.read(b3);
System.out.printf("%d bytes @ %d: %s\n", n3, 6, new String(b3));
// There is no built-in rewind, but
// seeking to the start accomplishes this.
channel.position(0);
// The BufferedReader class implements a buffered
// reader that may be useful both for its efficiency
// with many small reads and because of the additional
// reading methods it provides.
BufferedReader reader = new BufferedReader(new FileReader("/tmp/dat"));
char[] b4 = new char[5];
reader.mark(5);
reader.read(b4, 0, 5);
System.out.printf("5 bytes: %s\n", new String(b4));
// Close the file when you're done (usually this would
// be scheduled immediately after opening with
// try-with-resources).
fis.close();
reader.close();
} catch (IOException e) {
check(e);
}
}
}
To run this program, first create a file with some content:
$ echo "hello" > /tmp/dat
$ echo "java" >> /tmp/dat
$ javac ReadingFiles.java
$ java ReadingFiles
hello
java
5 bytes: hello
2 bytes @ 6: ja
2 bytes @ 6: ja
5 bytes: hello
This example demonstrates various methods of reading files in Java, including reading entire files, reading specific byte ranges, seeking to different positions in a file, and using buffered readers for efficiency. The Java I/O API provides a rich set of classes and methods for file operations, allowing for fine-grained control over file reading processes.