LoginSignup
4
4

More than 3 years have passed since last update.

Java(jdk1.8以降)のファイル入出力のサンプルプログラム

Last updated at Posted at 2020-03-23

Javaの(jdk1.8以降)のファイル入出力のサンプルプログラムのメモです。

1. バイナリファイルの読み込み

1.1. 一括読み込み

C:/dk/input.xlsxを一括で読み込み、16進数で標準出力に出力するサンプルプログラムです。
一括で読み込む場合、Outofmemoryにならないようサイズに注意する必要があります。

BinaryFileInputNio.java
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進数で標準出力に出力するサンプルプログラムです。

BinaryFileInputNioPart.java
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に一括で書き込むサンプルプログラムです。

BinaryFileOutputNio.java
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に分割で書き込むサンプルプログラムです。

BinaryFileOutputNioPart.java
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にならないようサイズに注意する必要があります。

TextFileInputNio.java
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で読み込み、標準出力に出力するサンプルプログラムです。

TextFileInputNioPart1.java
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で読み込み、標準出力に出力するサンプルプログラムです。

TextFileInputNioPart2.java
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に書き込むサンプルプログラムです。

TextFileOutputNio1.java
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に書き込むサンプルプログラムです。

TextFileOutputNio2.java
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();
        }
    }

}

以上

4
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4