Javaバージョン毎のファイル読み込み方法

Java 6時代まではBufferedReaderとFileReaderクラスを使用してゴリゴリ書いてcloseの例外も考慮して。。と、かなり面倒だったものですが、Java 7以降の環境であればPathとFilesクラスを使用してかなり楽にコーディング出来るようになってるので整理用にメモ。

Java 6まで

うん。再度見直して見ても正直メンテするのもしんどそうです。。

		// 【Java 6まで】BufferedReaderとFileReaderを使用してゴリゴリ取得する方法
		File file = new File("./SampleXml.xml");
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(file));
			String text;
			System.out.println("【Java 6まで】------------------");
			// 読み込んだファイルの内容を1行ずつコンソールへ表示
			while ((text = br.readLine()) != null) {
				System.out.println(text);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

Java 7以降

Java 7からはFiles.readAllLinesで一度にリスト形式にファイル内容を取得出来るようになったので記述が格段に楽になりました。

		// 【Java 7以降】ファイルの内容を一度に全て読み込んで文字列のリスト形式として取得する方法
		Path path = Paths.get("", "SampleXml.xml"); // カレントディレクトリから相対パスを取得
		try {
			List<String> texts = Files.readAllLines(path);

			// 読み込んだファイルの内容を1行ずつコンソールへ表示
			System.out.println("【Java 7以降】------------------");
			for(String text : texts) {
				System.out.println(text);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

Java 8以降

Java 8からはFiles.linesが使用可能になり、Streamとして取得してラムダ式で読み込むのが一般的でしょうか。

		// 【Java 8以降】ファイルの内容を1行ずつ文字列としてStreamとして取得する方法
		Path path = Paths.get("", "SampleXml.xml"); // カレントディレクトリから相対パスを取得
		try(Stream<String> lines = Files.lines(path, StandardCharsets.UTF_8)) {
			// 読み込んだファイルの内容を1行ずつコンソールへ表示
			System.out.println("【Java 8以降】------------------");
			lines.forEach(text -> {
				System.out.println(text);
			});
		} catch (IOException e) {
			e.printStackTrace();
		}

Java 11以降

Java 11からはFiles.readStringでファイル内容が文字列でまとめて取得可能になってます。。

		// 【Java 11以降】ファイルの内容を一度に全て読み込んで文字列として取得する方法
		Path path = Paths.get("", "SampleXml.xml"); // カレントディレクトリから相対パスを取得
		try {
			String text = Files.readString(path, StandardCharsets.UTF_8);

			// 読み込んだファイルの内容をコンソールへ表示
			System.out.println("【Java 11以降】------------------");
			System.out.println(text);
		} catch (IOException e1) {
			e1.printStackTrace();
		}

コンソール

どれを実行しても結果は同じとなります。

 

コメント

コメントする