Java テキストファイルの読み書きのサンプル(Filesクラス)

Javaのテキストファイルの読み書きと、フォルダとファイルの存在チェックのサンプルです。

確認環境
・Java 8

目次

Filesクラス

Pathsクラス - getメソッド

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

テキストファイルに書き込む

テキストファイルに書き込むサンプルです。

package test1;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
 
public class Test1 {
    public static void main(String[] args) {
        String dir = "E:\\workspace123abc";
        String filename = "test1.txt";
        String charset = "MS932";
     
        List<String> listA = new ArrayList<>();
        listA.add("あ1");
        listA.add("い2");
        listA.add("う3");
     
        try {
        	// 新規で書き込み
            Files.write(Paths.get(dir, filename), listA,
            Charset.forName(charset), 
            StandardOpenOption.TRUNCATE_EXISTING);
     
            // 追記で書き込み
            Files.write(Paths.get(dir, filename), listA,
            Charset.forName(charset), StandardOpenOption.APPEND);
     
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

23~25行目は、新規でリストの値をファイルに書き込みしています。
引数にStandardOpenOption.TRUNCATE_EXISTINGを指定します。

27~28行目は、追記でリストの値をファイルに書き込みしています。
引数にStandardOpenOption.APPENDを指定します。

 

テキストファイルを読み込む

テキストファイルを読み込むサンプルです。

package test1;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
 
public class Test1 {
    public static void main(String[] args) {
        String dir = "E:\\workspace123abc";
        String filename = "test1.txt";
        String charset = "MS932";
     
        try {
            // ファイルの読み込み
            List<String> line = Files.readAllLines(
            		Paths.get(dir, filename),
                    Charset.forName(charset));

            // コンソールに出力
            for (String s : line) {
                System.out.println(s);
            }
     
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

16~18行目は、FilesクラスのreadAllLinesメソッドでファイルを読み込んでいます。

文字コードの指定の方法

CharsetクラスやStandardCharsetsクラスで指定します。

Charsetクラス

Charset.forNameで指定する主な文字コードと名称です。

文字コード 指定する文字コード名称
シフトJIS MS932
SJIS
Shift_JIS
UTF8 UTF-8

https://docs.oracle.com/javase/jp/8/docs/api/java/nio/charset/Charset.html

JavaにおけるMS932とSJISとShift_JISの違いについては以下が詳しいです。
https://qiita.com/yoshi389111/items/9060c8b62df7cac31de9

StandardCharsetsクラス

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

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

        Charset charset = StandardCharsets.UTF_8;
     
        try {
            // ファイルの読み込み
            List line = Files.readAllLines(
            		Paths.get(dir, filename),
            		charset);

https://docs.oracle.com/javase/jp/8/docs/api/java/nio/charset/StandardCharsets.html

フォルダ・ファイルの存在チェック

フォルダ・ファイルの存在チェックのサンプルです。

package test1;

import java.nio.file.Files;
import java.nio.file.Paths;
 
public class Test1 {
    public static void main(String[] args) {
        
        String dir = "D:\\workspace123abc";
        String filename = "test12.txt";

        // フォルダが存在するかのチェック
        if (Files.isDirectory(Paths.get(dir))) {
            System.out.println("存在します");
        }else {
            System.out.println("存在しません");
        }
 
        // ファイルが存在するかのチェック
        if (Files.exists(Paths.get(dir, filename))) {
            System.out.println("存在します");
        }else {
            System.out.println("存在しません");
        }
    }
}

13行目は、FilesクラスのisDirectoryメソッドでフォルダの存在チェックを指定います。
20行目は、Filesクラスのexistsメソッドでファイルの存在チェックを指定います。

関連の記事

Java フォルダ・ファイルの作成/削除/移動のサンプル(Filesクラス)

△上に戻る