Java テキストファイルの読み書き(NIO.2のFiles)

JavaのNIO.2のFilesクラスのメソッドでテキストファイルを読み書きするサンプルです。

確認環境
・Java 8

目次

サンプル 読み込む(readAllLines)
  書き込む(write)
参考 NIO.2のFilesクラス
  メソッドの引数に指定するPathオブジェクト
  文字コードの指定で使用するCharsetクラス
  文字コードの指定で使用するStandardCharsetsクラス

読み込む(readAllLines)

public static List<String> readAllLines(Path path,Charset cs) throws IOException

テキストファイルを読み込み1行ずつ表示するサンプルです。
java.nio.file.Filesクラス(NIO.2)のreadAllLinesメソッドです。

package test1;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
 
public class Test1 {
    public static void main(String[] args) {
    	
        Path path1 = Paths.get("D:\\Test3","test1.txt");
        Charset charset = Charset.forName("MS932");

        try {
        	List<String> line = Files.readAllLines(path1,charset);
            for (String s : line) {
                System.out.println(s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

12行目は、Filesクラスで使用するPathオブジェクトを生成しています。
13行目は、文字コードを指定しています。
16行目は、FilesクラスのreadAllLinesメソッドでファイルを読み込んでいます。
引数には、パスと文字コードを指定しています。
17~19行目は、for文で1行ごとに表示します。

書き込む(write)

public static Path write(Path path,Iterable<? extends CharSequence> lines,Charset cs,OpenOption... options) throws IOException

テキストファイルに書き込むサンプルです。
java.nio.file.Filesクラス(NIO.2)のwriteメソッドです。

package test1;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class Test1 {
    public static void main(String[] args) {
    	
    	Path path1 = Paths.get("D:\\Test3","test1.txt");
    	Charset charset = Charset.forName("MS932");
        List<String> list = new ArrayList<>(Arrays.asList("赤","黄","青"));
     
        try {
            Files.write(path1,list,charset, 
            		StandardOpenOption.TRUNCATE_EXISTING);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

15行目は、Filesクラスで使用するPathオブジェクトを生成しています。
16行目は、文字コードを指定しています。
17行目は、リストです。ファイルに書き込む内容です。
20行目は、writeメソッドです。文字コードは、MS932を指定しています。
21行目は、StandardOpenOption.TRUNCATE_EXISTINGで新規書き込みを指定しています。
StandardOpenOption.APPENDにすると追記書き込みになります。

NIO.2のFilesクラス

public final class Files extends Object
  • ファイルを操作するクラスです。
  • Java7で導入された、java.nio.file.Filesクラスです。NIO.2の機能のひとつです。
  • 似た名前でFileクラス(java.io.File)がありますがそれとは別です。
  • 以下はJava8 API仕様のFilesクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Files.html

メソッドの引数に指定するPathオブジェクト

1 public static Path get(URI uri)
2 public static Path get(String first,String... more)
  • PathオブジェクトはFilesクラスのメソッドの引数に指定します。
  • PathオブジェクトはPathクラスのgetメソッドで取得します。
  • 1は、引数にパスをセットします。
  • 2は、引数にパスとファイル名をセットします。
  • 以下はJava8 API仕様のPathsクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Paths.html

文字コードの指定で使用するCharsetクラス

public abstract class Charset extends Object implements Comparable<Charset>

CharsetクラスのforNameメソッドで指定できる主な文字コードとして以下があります。
MS932、SJIS、Shift_JIS、UTF-8

以下は、OracleのCharsetクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/nio/charset/Charset.html

文字コードの指定で使用するStandardCharsetsクラス

public final class StandardCharsets extends Object

StandardCharsetsクラスも文字コードを指定できます。
ただしSJISの指定はできません

StandardCharsetsクラスを使用したサンプルです。

package test1;
import java.io.IOException;
import java.nio.charset.Charset;
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 Test1 {
    public static void main(String[] args) {
    	
        Path path1 = Paths.get("D:\\Test3","test2.txt");
        Charset charset = StandardCharsets.UTF_8;
     
        try {
            List<String> line = Files.readAllLines(path1,charset);
            for (String s : line) {
                System.out.println(s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

14行目は、StandardCharsetsでUTF-8を指定しています。

以下は、OracleのStandardCharsetsクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/nio/charset/StandardCharsets.html

関連の記事

Java ファイルの存在/移動/コピー/削除(NIO.2のFiles)

△上に戻る