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

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

目次

サンプル ファイルを読み込む(readAllLines)
  ファイルに書き込む(write)
  文字コードの指定でStandardCharsetsを使う場合

ファイルを読み込む(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"); //パス
    	Path path1 = Paths.get("D:\\Test3\\\\test1.txt"); //パス
    	
    	//Charset charset = Charset.forName("MS932"); //文字コード
    	Charset charset = Charset.forName("UTF-8"); //文字コード

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

12,13行目は、getメソッドで読み込むファイルを指定しPathオブジェクトを取得しています。
12行目は引数が2つで13行目は引数が1つです。どちらでも可能です。

public static Path get(String first, String... more)

15,16行目は、forNameメソッドで文字コードを指定しています。MS932≒shift_jisです。

public static Charset forName(String charsetName)

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

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

19行目は、readAllLinesメソッドでファイルを読み込みStringのリストを返します。

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

実行結果

実行するとテキストファイルを読み込みEclipseのコンソールに1行ずつ表示します。

テキストファイル

コンソール

 

ファイルに書き込む(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"); //パス
    	Path path1 = Paths.get("D:\\Test3\\\\test1.txt"); //パス
    	
    	//Charset charset = Charset.forName("MS932"); //文字コード
    	Charset charset = Charset.forName("UTF-8"); //文字コード
    	
        List<String> list = new ArrayList<>(Arrays.asList("赤","黄","青"));
     
        try {
            Files.write(path1,list,charset, 
            		StandardOpenOption.TRUNCATE_EXISTING); //新規書き込み
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

15,16行目は、getメソッドで書き込むファイルを指定しPathオブジェクトを取得しています。
15行目は引数が2つで16行目は引数が1つです。どちらでも可能です。

public static Path get(String first, String... more)

18,19行目は、forNameメソッドで文字コードを指定しています。MS932≒shift_jisです。

public static Charset forName(String charsetName)

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

UTF-8の指定はBOMなしになります。

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

24,25行目は、ファイルに新規で書き込んでいます。対象のファイルがない場合はエラーになります。

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

Files.writeは、Java7で導入されたjava.nio.file.FilesクラスのメソッドでNIO.2とも呼ばれます。
似た名前でFileクラス(java.io.File)がありますがそれとは別です。

4つめの引数はオプションで新規書込みまたは追記書込みを指定します。

StandardOpenOption.TRUNCATE_EXISTING・・・新規書き込みになります。
StandardOpenOption.APPEND・・・追記書き込みになります。

実行結果

要素ごと改行されます。

 

文字コードの指定で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)

△上に戻る