#初めて触ってみたFilesクラス
初めの一歩にすらなってないかもしれませんが、ちょっとずつやっていこうと思います。
2019/04/19 ちょっと更新。
#読込ファイル内容
input_01.csv
"ID","クラス","名前"
"0001","セイバー","アルトリア"
"0002","キャスター","メディア"
"0003","バーサーカー","ヘラクレス"
input_02.csv
"ID","艦種","名前"
"0001","戦艦","長門"
"0002","軽巡洋艦","阿武隈"
"0003","駆逐艦","陽炎"
#ソース
FileInOutFirst.java
package com.otamesi;
import java.io.BufferedReader;
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.ArrayList;
import java.util.List;
public class FileInOutFirst{
/**
* 初めてのFilesクラス。
*
*/
public static void main(String args[]) throws Exception{
FileInOutFirst fileInOutFirst = new FileInOutFirst();
fileInOutFirst.inOut01();
fileInOutFirst.inOut02();
fileInOutFirst.inOut03();
fileInOutFirst.inOut04();
fileInOutFirst.inOut05();
}
/**
* その1。<br>
* とりあえず標準出力に出してみる。
*
*/
private void inOut01() throws Exception {
//SJISのファイルを読み込み
List<String> input = Files.readAllLines(Paths.get("D:/", "input_01.csv"), Charset.forName("SJIS"));
System.out.println("その1");
input.forEach(line -> System.out.println(line));
}
/**
* その2。<br>
* とりあえず標準出力に出してみる(UTF-8)。
*
*/
private void inOut02() throws Exception {
//UTF-8のファイルを読み込み
List<String> input = Files.readAllLines(Paths.get("D:/", "input_02.csv"), StandardCharsets.UTF_8);
System.out.println("その2");
input.forEach(line -> System.out.println(line));
}
/**
* その3。<br>
* とりあえず標準出力に出してみる(UTF-8)。
*
*/
private void inOut03() throws Exception {
//UTF-8のファイルを読み込み
List<String> input = Files.readAllLines(Paths.get("D:/", "input_03.csv"), StandardCharsets.UTF_8);
System.out.println("その3");
input.forEach(System.out::println);
}
/**
* その4。<br>
* とりあえず標準出力に出してみる(UTF-8)。
*
*/
private void inOut04() throws Exception {
//UTF-8のファイルを読み込み
List<String> input = Files.readAllLines(Paths.get("D:/", "input_03.csv"), StandardCharsets.UTF_8);
List<String> input2 = new ArrayList<String>();
System.out.println("その4");
input.forEach(input2::add);
input2.forEach(System.out::println);
}
/**
* その5。<br>
* newBufferedReaderを利用(サイズが大きいファイル用)
*
*/
private void inOut05() throws Exception {
System.out.println("その5");
Path file = Paths.get("D:/", "input_03.csv");
try (BufferedReader br = Files.newBufferedReader(file, StandardCharsets.UTF_8)) {
String text;
while ((text = br.readLine()) != null) {
System.out.println(text);
}
}
}
}
#出力結果
その1
"ID","クラス","名前"
"0001","セイバー","アルトリア"
"0002","キャスター","メディア"
"0003","バーサーカー","ヘラクレス"
その2
"ID","艦種","名前"
"0001","戦艦","長門"
"0002","軽巡洋艦","阿武隈"
"0003","駆逐艦","陽炎"
#とりあえずやってみて
forEachメソッドも初なのですがすごいスッキリとループが書けるんですね!
あとエンコードも定数が用意されていて便利(残念ながらSJISは無いみたいですが)。
なお、ファイルの文字コードと別の文字コードをパラメーターに指定すると
下記の例外が発生。遭遇する機会があるかもしれないので覚えとこう・・・。
Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at java.nio.file.Files.readAllLines(Files.java:3205)