2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Filesクラス(というかJava8)に初めて触る

Last updated at Posted at 2018-04-20

#初めて触ってみた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)
2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?