Java ファイル操作
ファイル操作について調べてみた
・インスタンスの生成
Path path = Paths.get("C:\\test.txt"); System.out.println(path); File file = new File("C:\\test.txt"); Path path = file.toPath(); System.out.println(path);
・パス指定
// 絶対パス Path path = Paths.get("C:\\test.txt"); System.out.println(path); System.out.println(path.isAbsolute()); // true // 相対パス String dir = System.getProperty("user.dir"); System.out.println(dir); Path path = Paths.get("test.txt"); System.out.println(path.toAbsolutePath()); // dir/path System.out.println(path.isAbsolute()); // false // 正規化 Path path = Paths.get("C:\\dir1", "..\\dir2", "test.txt"); System.out.println(path); // C:\dir1\..\dir2\test.txt System.out.println(path.normalize()); // C:\dir2\test.txt
・存在チェック file directory共通
Path path = Paths.get("C:\\dir"); System.out.println(Files.exists(path)); System.out.println(Files.notExists(path));
・更新日時/ファイルサイズの取得
Path path = Paths.get("C:\\test.txt"); System.out.println(Files.getLastModifiedTime(path)); System.out.println(Files.size(path)); // 対象が存在しない場合 NoSuchFileException
・ディレクトリ判定
Path path = Paths.get("C:\\dir"); System.out.println(Files.isDirectory(path)); // ディレクトリであればtrue // 対象が存在しない場合 false
・ディレクトリの作成
Path path = Paths.get("C:\\dir1\\dir2"); Files.createDirectory(path); // 親ディレクトリがない場合 NoSuchFileException Files.createDirectories(path); // 親ディレクトリがない場合 作成 // ディレクトリが既に存在しても例外は起きない
・ファイルの作成
Path path = Paths.get("C:\\dir\\test.txt"); System.out.println(Files.createFile(path)); // 親ディレクトリがない場合 NoSuchFileException // ファイルが既に存在する場合 FileAlreadyExistsException
・ファイルの読み込み
Path path = Paths.get("C:\\dir\\test.txt"); // バイト byte[] bytes = Files.readAllBytes(path); // 文字列 Files.readAllLines(path).stream().forEach(System.out::println); // バッファリング BufferedReader reader = Files.newBufferedReader(path); reader.lines().forEach(System.out::println); // 対象が存在しない場合いずれも NoSuchFileException
・ファイルの書き込み
Path path = Paths.get("C:\\dir\\test.txt"); String line = "line"; Files.write(path, line.getBytes()); // バッファリング BufferedWriter writer = Files.newBufferedWriter(path); writer.write(line, 0, line.length()); writer.newLine(); writer.flush(); // ディレクトリが存在しない場合 NoSuchFileException // ファイルが存在しない場合 ファイルが作成される
・ファイルのコピー
Path src = Paths.get("C:\\dir\\test1.txt"); Path dest = Paths.get("C:\\dir\\test2.txt"); Files.copy(src, dest); // コピー先が存在する場合 FileAlreadyExistsException Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING); // コピー先が存在する場合上書き // コピー元が存在しない場合 NoSuchFileException
・ファイルの移動
Path src = Paths.get("C:\\dir\\test1.txt"); Path dest = Paths.get("C:\\dir\\test2.txt"); Files.move(src, dest); // 移動先が存在する場合 FileAlreadyExistsException Files.move(src, dest, StandardCopyOption.REPLACE_EXISTING); // 移動先が存在する場合上書き // 移動元が存在しない場合 NoSuchFileException
・ファイルの削除
Path path = Paths.get("C:\\dir1\\test1.txt"); Files.delete(path); // 削除対象が存在しない場合 NoSuchFileException Files.deleteIfExists(path); // 削除に成功した場合にtrue返却 削除対象がなくても例外は発生しない
・ファイル検索
Path path = Paths.get("C:\\dir"); // 所定ディレクトリ内の検索 Files.list(path).forEach(System.out::println); // パスがディレクトリでない場合 NotDirectoryException // 再帰検索 Files.walk(path).forEach(System.out::println); // パスがファイルでも動作 // 条件付き検索 Files.find(path, Integer.MAX_VALUE, (i, j) -> i.toString().contains("txt")).forEach(System.out::println); // パスがファイルでも動作 // ディレクトリが存在しない場合 NoSuchFileException
・テンポラリ作成
Path path = Paths.get("C:\\dir"); // 一時ディレクトリ Files.createTempDirectory(path, "tmp_"); // ex tmp_9194118049955059353 // 一時ファイル Files.createTempFile(path, "tmp_", ".csv"); // ex tmp_2871683714486788849.csv // ディレクトリが存在しないやファイルを指定した場合 NoSuchFileException