見出し画像

【Javaお勉強日記】テキストファイルを読み込む

ローカルファイルを開いて、テキストを一行ずつ読み込む処理。

package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class ReadFile {
   public static void main(String[] args){
       // パスオブジェクトでファイルパスを取り扱う
       Path path = Paths.get("test.txt");
       
       // リソース付きtry文+Files.newBufferedReaderで安全にファイルを開く
       // Charsetオブジェクトで文字コードを指定する
       try(BufferedReader in = Files.newBufferedReader(path, Charset.forName("UTF-8"))){
           String line;
           // ファイル内容を一行ずつ処理する
           while((line = in.readLine()) != null){
               System.out.println(line);
           }
           
       // 例外処理をする
       }catch(IOException e){
           System.out.println("ファイルが開けませんでした");
       }
   }
}

ファイルパスの指定にはPathオブジェクトを使う

Windowsだとパスの区切り記号が「\」だけど、Linuxだと「/」、みたいな問題に左右されずパスを取り扱える。 java.nio.file.Path をインポートして使う。

Path path = Paths.get("ファイルパス(絶対パスでも相対パスでも)")

という形式でPathオブジェクトが取れる。インスタンスを作る時に使うのはPathsクラスのget()メソッドなことに注意。(new Path じゃない)

テキストファイルを読み込むには、BufferedReaderクラス+Files.newBufferedReaderが便利

BufferdReaderクラスはnewで作るとちょっとめんどっちぃので、ラッパーであるFiles.newBufferdReader()メソッドを使うと楽。

BufferedReader in = Files.newBufferedReader(path, Charset.forName("UTF-8"))

で、ファイル内容にアクセスできるBufferdReaderオブジェクトが作れる。

java.nio.file.Filesをインポートして使おう。

文字コードの指定はCharset.forName()

文字コードを表すCharsetクラスのインスタンスで指定する。Charsetクラスのインスタンスは、

Charset.forName("文字コード名")

で作ることができるので、それをそのままnewBufferedReader()の引数に入れている。

リソース付きtry文でファイルを簡潔かつ安全に開く

pythonでファイル開くときにwith文使うのと同じ。

ファイルが上手く開けなかった時に、自動的に閉じるところまでやってくれるtry文。

try(BufferedReader in = Files.newBufferedReader(path, Charset.forName("UTF-8")))

で開いて、エラーは

catch(IOException e)

でキャッチする。ファイルの入出力に関するエラーはIOExceptionクラスで、サブクラスも色々あるので、必要に応じて分岐を作る。

っていうか、リソース付きtry文使わないとSonerLintに怒られる(´・ω・`)

とりあえず、これでざっくりファイルを開ける。

csvを列ごとに分割して読み込みたい時はScanner

CSVをカンマ区切りテキストのままぺろーんと読み込むならBufferedReaderでいけるけど、一列目はIDナンバーだからint、二列目は名前だからString...みたいに読み込みたい時はScannerを使うといい。

詳しい使い方は、必要になったらまた調べる。

この記事が気に入ったらサポートをしてみませんか?