Fileのメタデータ、データをnioで取得する

nioでメタデータとデータを取得する方法が意外だったので書く

ファイルの構造

dir, dir\file1.txt, dir\file2.txt, dir\nestDir, dir\nestDir\nestFile.txt

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;

public class Main {
	public static void main(String[] args) throws IOException {
		Path dirPath = Paths.get("dir");
		System.out.println("list");
		Files.list(dirPath).forEach(path -> {
			try {
				readMetaDataAndData(path);
			} catch (IOException e) {
				e.printStackTrace();
			}
		});
		System.out.println("walk");
		Files.walk(dirPath).forEach(path -> {
			try {
				readMetaDataAndData(path);
			} catch (IOException e) {
				e.printStackTrace();
			}
		});
	}

	private static void readMetaData(Path path) throws IOException {
		Map<String, Object> map = Files.readAttributes(path, "*");
		map.forEach((key, value) -> System.out.println(key + ":" + value));
	}

	private static void readData(Path path) throws IOException {
		try (BufferedReader reader = Files.newBufferedReader(path)) {
			reader.lines()
					.forEach(System.out::println);
		}
	}

	private static void readMetaDataAndData(Path path) throws IOException {
		System.out.println(path);
		System.out.println();
		System.out.println("meta data");
		readMetaData(path);
		if (!Files.isDirectory(path)) {
			System.out.println();
			System.out.println("data");
			readData(path);
		}
		System.out.println();
		System.out.println();
	}
}

出力

list
dir\file1.txt

meta data
lastAccessTime:2018-12-31T15:18:53.115459Z
lastModifiedTime:2018-12-31T15:18:53.115459Z
size:12
creationTime:2018-12-31T15:04:14.196592Z
isSymbolicLink:false
isRegularFile:true
fileKey:null
isOther:false
isDirectory:false

data
file1 sample


dir\file2.txt

meta data
lastAccessTime:2018-12-31T15:19:01.498545Z
lastModifiedTime:2018-12-31T15:19:01.499543Z
size:10
creationTime:2018-12-31T15:04:23.007369Z
isSymbolicLink:false
isRegularFile:true
fileKey:null
isOther:false
isDirectory:false

data
file2 data


dir\nestDir

meta data
lastAccessTime:2018-12-31T15:23:56.735169Z
lastModifiedTime:2018-12-31T15:23:56.735169Z
size:0
creationTime:2018-12-31T15:23:34.69674Z
isSymbolicLink:false
isRegularFile:false
fileKey:null
isOther:false
isDirectory:true


walk
dir

meta data
lastAccessTime:2018-12-31T15:23:34.69674Z
lastModifiedTime:2018-12-31T15:23:34.69674Z
size:0
creationTime:2018-12-31T15:04:07.017102Z
isSymbolicLink:false
isRegularFile:false
fileKey:null
isOther:false
isDirectory:true


dir\file1.txt

meta data
lastAccessTime:2018-12-31T15:18:53.115459Z
lastModifiedTime:2018-12-31T15:18:53.115459Z
size:12
creationTime:2018-12-31T15:04:14.196592Z
isSymbolicLink:false
isRegularFile:true
fileKey:null
isOther:false
isDirectory:false

data
file1 sample


dir\file2.txt

meta data
lastAccessTime:2018-12-31T15:19:01.498545Z
lastModifiedTime:2018-12-31T15:19:01.499543Z
size:10
creationTime:2018-12-31T15:04:23.007369Z
isSymbolicLink:false
isRegularFile:true
fileKey:null
isOther:false
isDirectory:false

data
file2 data


dir\nestDir

meta data
lastAccessTime:2018-12-31T15:23:56.735169Z
lastModifiedTime:2018-12-31T15:23:56.735169Z
size:0
creationTime:2018-12-31T15:23:34.69674Z
isSymbolicLink:false
isRegularFile:false
fileKey:null
isOther:false
isDirectory:true


dir\nestDir\nestFile.txt

meta data
lastAccessTime:2018-12-31T15:23:56.735169Z
lastModifiedTime:2018-12-31T15:23:56.735169Z
size:20
creationTime:2018-12-31T15:23:43.522588Z
isSymbolicLink:false
isRegularFile:true
fileKey:null
isOther:false
isDirectory:false

data
data in nestFile.txt

Files#listだと直下のファイル・ディレクトリのみだけどFiles#walkだとその下まで見てくれるので便利

メタデータで別れているので取得しやすい

FileのオブジェクトではなくFiles,Pathsという操作用のメソッドを用意されていて最初は戸惑うけど使っていくとパッケージにまとまっているし使いやすく感じた

スポンサーリンク

シェアする

フォローする

スポンサーリンク