Javaの(jdk1.8以降)のファイル入出力のサンプルプログラムのメモです。
1. バイナリファイルの読み込み
1.1. 一括読み込み
C:/dk/input.xlsx
を一括で読み込み、16進数で標準出力に出力するサンプルプログラムです。
一括で読み込む場合、Outofmemoryにならないようサイズに注意する必要があります。
package test.nio;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* バイナリーファイルを読み込む
*/
public class BinaryFileInputNio {
/**
* @param args
*/
public static void main(String[] args) {
// 読み込みファイルの名前
Path path = Paths.get("C:/dk", "input.xlsx");
try {
// バイナリファイル一括読み込み
byte[] data = Files.readAllBytes(path);
// 読み込んだバイナリデータを16進数で標準出力に出力
for (int i = 0; i < data.length; i++) {
System.out.printf("%02x ", data[i]);
}
System.out.println();
} catch (IOException e) {
e.printStackTrace();
}
}
}
1.2. 分割読み込み
C:/dk/input.xlsx
を1024バイト単位で読み込み、16進数で標準出力に出力するサンプルプログラムです。
package test.nio;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* バイナリーファイルを読み込む
*/
public class BinaryFileInputNioPart {
/**
* @param args
*/
public static void main(String[] args) {
// 読み込みファイルの名前
Path path = Paths.get("C:/dk", "input.xlsx");
// 入力ストリームの生成
try (InputStream inst = Files.newInputStream(path)) {
// 読み込み用バイト配列
byte[] buf = new byte[1024];
int len = 0;
// 入力ストリームからの読み込み(ファイルの読み込み)
while ((len = inst.read(buf)) != -1) {
// 読み込んだバイナリデータを16進数で標準出力に出力
for (int i = 0; i < len; i++) {
System.out.printf("%02x ", buf[i]);
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. バイナリファイルの書き込み
2.1. 一括書き込み
バイナリデータをC:/dk/output.dat
に一括で書き込むサンプルプログラムです。
package test.nio;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* バイナリーファイルを書き込む
*/
public class BinaryFileOutputNio {
/**
* @param args
*/
public static void main(String[] args) {
// 書き込みファイルの名前
Path path = Paths.get("C:/dk", "output.dat");
// バイナリデータ
byte[] data = { (byte)0xe3, (byte)0x83, (byte)0x86, (byte)0xe3, (byte)0x82, (byte)0xad, (byte)0xe3, (byte)0x82, (byte)0xb9, (byte)0xe3, (byte)0x83, (byte)0x88, (byte)0xe3, (byte)0x83, (byte)0x95, (byte)0xe3, (byte)0x82, (byte)0xa1, (byte)0xe3, (byte)0x82, (byte)0xa4, (byte)0xe3, (byte)0x83, (byte)0xab, (byte)0xe5, (byte)0x87, (byte)0xba, (byte)0xe5, (byte)0x8a, (byte)0x9b, (byte)0x30, (byte)0x31, (byte)0x0d, (byte)0x0a, (byte)0xe3, (byte)0x83, (byte)0x86, (byte)0xe3, (byte)0x82, (byte)0xad, (byte)0xe3, (byte)0x82, (byte)0xb9, (byte)0xe3, (byte)0x83, (byte)0x88, (byte)0xe3, (byte)0x83, (byte)0x95, (byte)0xe3, (byte)0x82, (byte)0xa1, (byte)0xe3, (byte)0x82, (byte)0xa4, (byte)0xe3, (byte)0x83, (byte)0xab, (byte)0xe5, (byte)0x87, (byte)0xba, (byte)0xe5, (byte)0x8a, (byte)0x9b, (byte)0x30, (byte)0x32, (byte)0x0d, (byte)0x0a};
try {
// バイナリデータ一括書き込み
Files.write(path, data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.2. 分割書き込み
バイナリデータをC:/dk/output.dat
に分割で書き込むサンプルプログラムです。
package test.nio;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* バイナリーファイルを書き込む
*/
public class BinaryFileOutputNioPart {
/**
* @param args
*/
public static void main(String[] args) {
// 書き込みファイルの名前
Path path = Paths.get("C:/dk", "output.dat");
// バイナリデータ
byte[] data1 = { (byte)0xe3, (byte)0x83, (byte)0x86, (byte)0xe3, (byte)0x82, (byte)0xad, (byte)0xe3, (byte)0x82, (byte)0xb9, (byte)0xe3, (byte)0x83, (byte)0x88, (byte)0xe3, (byte)0x83, (byte)0x95, (byte)0xe3, (byte)0x82, (byte)0xa1, (byte)0xe3, (byte)0x82, (byte)0xa4, (byte)0xe3, (byte)0x83, (byte)0xab, (byte)0xe5, (byte)0x87, (byte)0xba, (byte)0xe5, (byte)0x8a, (byte)0x9b, (byte)0x30, (byte)0x31, (byte)0x0d, (byte)0x0a};
byte[] data2 = { (byte)0xe3, (byte)0x83, (byte)0x86, (byte)0xe3, (byte)0x82, (byte)0xad, (byte)0xe3, (byte)0x82, (byte)0xb9, (byte)0xe3, (byte)0x83, (byte)0x88, (byte)0xe3, (byte)0x83, (byte)0x95, (byte)0xe3, (byte)0x82, (byte)0xa1, (byte)0xe3, (byte)0x82, (byte)0xa4, (byte)0xe3, (byte)0x83, (byte)0xab, (byte)0xe5, (byte)0x87, (byte)0xba, (byte)0xe5, (byte)0x8a, (byte)0x9b, (byte)0x30, (byte)0x32, (byte)0x0d, (byte)0x0a};
// バイナリデータ書き込み
try (OutputStream os = Files.newOutputStream(path)) {
os.write(data1);
os.write(data2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. テキストファイルの読み込み
3.1. 一括読み込み
C:/dk/input.txt
を一括で読み込み、標準出力に出力するサンプルプログラムです。
一括で読み込む場合、Outofmemoryにならないようサイズに注意する必要があります。
package test.nio;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
/**
* テキストファイルの読み込み
*/
public class TextFileInputNio {
/**
* @param args
*/
public static void main(String[] args) {
// 読み込みファイルの名前
Path path = Paths.get("C:/dk", "input.txt");
try {
// テキストファイルを一括読み込み
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
// 読み込んだテキストファイルを標準出力に出力
lines.forEach(line -> System.out.println(line));
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.2. 分割読み込み(BufferedReaderを使用)
C:/dk/input.txt
をBufferedReaderで読み込み、標準出力に出力するサンプルプログラムです。
package test.nio;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* テキストファイルの読み込み
*/
public class TextFileInputNioPart1 {
/**
* @param args
*/
public static void main(String[] args) {
// 読み込みファイルの名前
Path path = Paths.get("C:/dk", "input.txt");
// BufferedReaderの生成
try (BufferedReader br = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
String msg;
// テキストファイルからの読み込み
while ((msg = br.readLine()) != null) {
// 標準出力に出力
System.out.println(msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.3. 分割読み込み(Streamを使用)
C:/dk/input.txt
をStreamで読み込み、標準出力に出力するサンプルプログラムです。
package test.nio;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
/**
* テキストファイルの読み込み
*/
public class TextFileInputNioPart2 {
/**
* @param args
*/
public static void main(String[] args) {
// 読み込みファイルの名前
Path path = Paths.get("C:/dk", "input.txt");
// Streamの生成
try (Stream<String> lines = Files.lines(path, StandardCharsets.UTF_8)) {
// 標準出力に出力
lines.forEach(line -> System.out.println(line));
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. テキストファイルの書き込み
4.1. 書き込み(BufferedWriterを使用)
BufferedWriterを使用して、テキストデータをC:/dk/output.txt
に書き込むサンプルプログラムです。
package test.nio;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* テキストファイルへの書き込み
*/
public class TextFileOutputNio1 {
/**
* @param args
*/
public static void main(String[] args) {
// 書き込みファイルの名前
Path path = Paths.get("C:/dk", "output.txt");
// BufferedWriterの生成
try (BufferedWriter bw = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
// ファイルへの書き込み
for (int i= 1; i <= 2; i++) {
bw.write("テキストファイル出力" + String.format("%02d", i));
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.2. 書き込み(PrintWriterを使用)
PrintWriterを使用して、テキストデータをC:/dk/output.txt
に書き込むサンプルプログラムです。
package test.nio;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* テキストファイルへの書き込み
*/
public class TextFileOutputNio2 {
/**
* @param args
*/
public static void main(String[] args) {
// 書き込みファイルの名前
Path path = Paths.get("C:/dk", "output.txt");
try (
// PrintWriterの生成
BufferedWriter bw = Files.newBufferedWriter(path, StandardCharsets.UTF_8);
PrintWriter pw = new PrintWriter(bw);
) {
// ファイルへの書き込み
for (int i= 1; i <= 2; i++) {
pw.println("テキストファイル出力" + String.format("%02d", i));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上