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

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

目次

サンプル ファイルを読み込む(readAllLines)
  ファイルに書き込む(write)
NIO.2のFilesクラスのメソッドを使用
  Path.getとは
  文字コード指定のCharsetとStandardCharsets違い

ファイルを読み込む(readAllLines)

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

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

1つめの引数はpathで2つめの引数は文字コードです。

サンプルコード

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"); //文字コード(shift_jis)

        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行目は、文字コードを指定しています。MS932≒shift_jisです。
17~19行目は、for文で1行ごとに表示します。

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

1.テキストファイル

2.コンソール

 

ファイルに書き込む(write)

public static Path write(パス,文字コード,オプション) throws IOException

writeメソッドは、ファイルに書き込みます。
1つめの引数はpathで2つめの引数は文字コードで3つめの引数はオプションです。
対象のファイルがない場合はエラーになります。

オプション

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

サンプルコード

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行目は、文字コードを指定しています。MS932≒shift_jisです。
17行目は、リストでファイルに書き込む内容です。

実行するとコードのリストの値をテキストファイルに書き込みます。

1.コード

2.テキストファイル

 

NIO.2のFilesクラスのメソッドを使用

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

 

Path.getとは

1 public static Path get(URI uri)
2 public static Path get(String first,String... more)

Path.getは引数にパスまたはパスとファイル名を指定してPathオブジェクトを生成します。
Filesクラスのメソッドの引数になります。

 

文字コード指定のCharsetとStandardCharsets違い

Charset

public abstract class Charset extends Object implements Comparable<Charset>

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

上記の2つのFiles.readAllLinesとFiles.writeのサンプルコードは、Charsetを使用しています。

以下は、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)

△上に戻る