Java : Files con ejemplos
Files (Java SE 22 & JDK 22) en Java con ejemplos.
Encontrará ejemplos de código en la mayoría de los métodos de Files.
Nota :
- Este artículo puede utilizar software de traducción para su comodidad. Consulte también la versión original en inglés.
Summary
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
Files.writeString(path, "abcd");
System.out.println(Files.exists(path)); // true
System.out.println(Files.readString(path)); // abcd
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode LastWriteTime Length Name
//---- ------------- ------ ----
//-a--- 2024/10/19 15:48 4 aaa.txt
Files.delete(path);
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
Annotation :
- Most of the code examples in this article are run on Windows.
- Some of the code examples are run on Linux for POSIX.
Methods
static long copy (InputStream in, Path target, CopyOption... options)
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
Files.writeString(source, "abcd");
System.out.println(Files.exists(source)); // true
System.out.println(Files.exists(target)); // false
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
try (final var in = Files.newInputStream(source)) {
final var ret = Files.copy(in, target);
System.out.println(ret); // 4
}
final var str = Files.readString(target);
System.out.println(str); // abcd
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
//target.txt
final var url = URI.create("https://example.com").toURL();
System.out.println(url); // https://example.com
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
System.out.println(Files.notExists(target)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
try (final var in = url.openStream()) {
final var ret = Files.copy(in, target);
System.out.println(ret); // 1256
}
final var str = Files.readString(target);
System.out.println(str);
// Result
// ↓
//<!doctype html>
//<html>
//<head>
// <title>Example Domain</title>
//...
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
Files.createFile(target);
System.out.println(Files.exists(target)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//target.txt
final byte[] buf = {10, 20, 30};
try (final var in = new ByteArrayInputStream(buf)) {
Files.copy(in, target);
} catch (FileAlreadyExistsException e) {
System.out.println("FileAlreadyExistsException!");
}
// Result
// ↓
//FileAlreadyExistsException!
try (final var in = new ByteArrayInputStream(buf)) {
Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING);
System.out.println(Arrays.toString(Files.readAllBytes(target)));
}
// Result
// ↓
//[10, 20, 30]
static long copy (Path source, OutputStream out)
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
Files.writeString(source, "abcd");
System.out.println(Files.exists(source)); // true
System.out.println(Files.exists(target)); // false
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
try (final var out = Files.newOutputStream(target)) {
final var ret = Files.copy(source, out);
System.out.println(ret); // 4
}
final var str = Files.readString(target);
System.out.println(str); // abcd
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
//target.txt
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
Files.write(source, new byte[]{10, 20, 30});
System.out.println(Files.exists(source)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
try (final var out = new ByteArrayOutputStream()) {
final var ret = Files.copy(source, out);
System.out.println(ret); // 3
System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]
}
final var source = Path.of("D:", "java-work", "xxx");
System.out.println(source); // D:\java-work\xxx
System.out.println(Files.notExists(source)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
try (final var out = new ByteArrayOutputStream()) {
Files.copy(source, out);
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static Path copy (Path source, Path target, CopyOption... options)
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
Files.writeString(source, "abcd");
System.out.println(Files.exists(source)); // true
System.out.println(Files.exists(target)); // false
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
final var ret = Files.copy(source, target);
System.out.println(ret); // D:\java-work\target.txt
final var str = Files.readString(target);
System.out.println(str); // abcd
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
//target.txt
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
Files.writeString(source, "abcd");
Files.writeString(target, "XYZ");
System.out.println(Files.readString(source)); // abcd
System.out.println(Files.readString(target)); // XYZ
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
//target.txt
try {
Files.copy(source, target);
} catch (FileAlreadyExistsException e) {
System.out.println("FileAlreadyExistsException!");
}
// Result
// ↓
//FileAlreadyExistsException!
final var ret = Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
System.out.println(ret); // D:\java-work\target.txt
System.out.println(Files.readString(source)); // abcd
System.out.println(Files.readString(target)); // abcd
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
//target.txt
final var source = Path.of("D:", "java-work", "xxx");
System.out.println(source); // D:\java-work\xxx
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
System.out.println(Files.notExists(source)); // true
System.out.println(Files.notExists(target)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
try {
Files.copy(source, target);
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static Path createDirectories (Path dir, FileAttribute<?>... attrs)
Please see also createFile(Path path, FileAttribute<?>... attrs) for FileAttribute.
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
final var dir = Path.of("D:", "java-work", "dir1");
System.out.println(dir); // D:\java-work\dir1
System.out.println(Files.notExists(dir)); // true
final var ret = Files.createDirectories(dir);
System.out.println(ret); // D:\java-work\dir1
System.out.println(Files.isDirectory(dir)); // true
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
//└─dir1
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
final var dir = Path.of("D:", "java-work", "dir1", "dir2", "dir3");
System.out.println(dir); // D:\java-work\dir1\dir2\dir3
System.out.println(Files.notExists(dir.getParent().getParent())); // true
final var ret = Files.createDirectories(dir);
System.out.println(ret); // D:\java-work\dir1\dir2\dir3
System.out.println(Files.isDirectory(dir)); // true
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
//└─dir1
// └─dir2
// └─dir3
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
System.out.println(Files.notExists(dir)); // true
System.out.println(Files.createDirectories(dir)); // D:\java-work\dir
System.out.println(Files.isDirectory(dir)); // true
System.out.println(Files.createDirectories(dir)); // D:\java-work\dir
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
//└─dir
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
System.out.println(Files.isDirectory(path)); // false
System.out.println(Files.isRegularFile(path)); // true
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
// aaa.txt
try {
Files.createDirectories(path);
} catch (FileAlreadyExistsException e) {
System.out.println("FileAlreadyExistsException!");
}
// Result
// ↓
//FileAlreadyExistsException!
static Path createDirectory (Path dir, FileAttribute<?>... attrs)
Please see also createFile(Path path, FileAttribute<?>... attrs) for FileAttribute.
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
System.out.println(Files.notExists(dir)); // true
final var ret = Files.createDirectory(dir);
System.out.println(ret); // // D:\java-work\dir
System.out.println(Files.isDirectory(dir)); // true
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
//└─dir
try {
Files.createDirectory(dir);
} catch (FileAlreadyExistsException e) {
System.out.println("FileAlreadyExistsException!");
}
// Result
// ↓
//FileAlreadyExistsException!
// --- PowerShell ---
//PS D:\java-work> tree /F
//
//D:.
final var dir = Path.of("D:", "java-work", "dir1", "dir2", "dir3");
System.out.println(dir); // D:\java-work\dir1\dir2\dir3
System.out.println(Files.notExists(dir.getParent())); // true
try {
Files.createDirectory(dir);
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static Path createFile (Path path, FileAttribute<?>... attrs)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final var ret = Files.createFile(path);
System.out.println(ret); // D:\java-work\aaa.txt
System.out.println(Files.size(path)); // 0
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
try {
Files.createFile(path);
} catch (FileAlreadyExistsException e) {
System.out.println("FileAlreadyExistsException!");
}
// Result
// ↓
//FileAlreadyExistsException!
final var path = Path.of("D:", "java-work", "dir", "aaa.txt");
System.out.println(path); // D:\java-work\dir\aaa.txt
System.out.println(Files.notExists(path)); // true
final var parent = path.getParent();
System.out.println(parent); // D:\java-work\dir
System.out.println(Files.notExists(parent)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
try {
Files.createFile(path);
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
The following code runs on Linux.
System.out.println(System.getProperty("os.name")); // Linux
final var ret1 = Files.createFile(Path.of("sample1.txt"));
System.out.println(ret1); // sample1.txt
// --- Linux Terminal ---
//$ ls -l sample1.txt
//-rw-rw-r-- 1 xxxx xxxx 0 ... sample1.txt
final var permissions = PosixFilePermissions.fromString("rw-r-----");
System.out.println(permissions); // [OWNER_READ, OWNER_WRITE, GROUP_READ]
final var ret2 = Files.createFile(
Path.of("sample2.txt"),
PosixFilePermissions.asFileAttribute(permissions));
System.out.println(ret2); // sample2.txt
// --- Linux Terminal ---
//$ ls -l sample2.txt
//-rw-r----- 1 xxxx xxxx 0 ... sample2.txt
static Path createLink (Path link, Path existing)
final var existing = Path.of("D:", "java-work", "existing.txt");
System.out.println(existing); // D:\java-work\existing.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.writeString(existing, "abcd");
System.out.println(Files.exists(existing)); // true
System.out.println(Files.exists(link)); // false
// --- PowerShell ---
//PS D:\java-work> ls -Name
//existing.txt
final var ret = Files.createLink(link, existing);
System.out.println(ret); // D:\java-work\link.txt
System.out.println(Files.readString(existing)); // abcd
System.out.println(Files.readString(link)); // abcd
// --- PowerShell ---
//PS D:\java-work> ls -Name
//existing.txt
//link.txt
//
//PS D:\java-work> ls .\link.txt | Format-List
//...
//Mode : la---
//LinkType : HardLink
//Target :
//VersionInfo : File: D:\java-work\link.txt
//...
Files.writeString(existing, "XYZ");
System.out.println(Files.readString(existing)); // XYZ
System.out.println(Files.readString(link)); // XYZ
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final var existing = Path.of("D:", "java-work", "existing.txt");
System.out.println(existing); // D:\java-work\existing.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
System.out.println(Files.notExists(existing)); // true
System.out.println(Files.notExists(link)); // true
try {
Files.createLink(link, existing); // NoSuchFileException
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
final var existing = Path.of("D:", "java-work", "existing.txt");
System.out.println(existing); // D:\java-work\existing.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.createFile(existing);
Files.createFile(link);
System.out.println(Files.exists(existing)); // true
System.out.println(Files.exists(link)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//existing.txt
//link.txt
try {
Files.createLink(link, existing);
} catch (FileAlreadyExistsException e) {
System.out.println("FileAlreadyExistsException!");
}
// Result
// ↓
//FileAlreadyExistsException!
static Path createSymbolicLink (Path link, Path target, FileAttribute<?>... attrs)
Creating a symbolic link may require administrator privileges.
Please see also createFile(Path path, FileAttribute<?>... attrs) for FileAttribute.
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.writeString(target, "abcd");
System.out.println(Files.exists(target)); // true
System.out.println(Files.exists(link)); // false
// --- PowerShell ---
//PS D:\java-work> ls -Name
//target.txt
final var ret = Files.createSymbolicLink(link, target);
System.out.println(ret); // D:\java-work\link.txt
System.out.println(Files.readString(target)); // abcd
System.out.println(Files.readString(link)); // abcd
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//la--- ... 0 link.txt -> D:\java-work\target.txt
//-a--- ... 4 target.txt
//
//PS D:\java-work> ls .\link.txt | Format-List
//...
//Mode : la---
//LinkType : SymbolicLink
//Target : D:\java-work\target.txt
//VersionInfo : File: D:\java-work\link.txt
//...
Files.writeString(target, "XYZ");
System.out.println(Files.readString(target)); // XYZ
System.out.println(Files.readString(link)); // XYZ
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
System.out.println(Files.notExists(target)); // true
System.out.println(Files.notExists(link)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
// You can also create empty links.
final var ret = Files.createSymbolicLink(link, target);
System.out.println(ret); // D:\java-work\link.txt
System.out.println(Files.notExists(target)); // true
System.out.println(Files.notExists(link)); // true
System.out.println(Files.isSymbolicLink(link)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//la--- ... 0 link.txt -> D:\java-work\target.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.createFile(target);
Files.createFile(link);
System.out.println(Files.exists(target)); // true
System.out.println(Files.exists(link)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//link.txt
//target.txt
try {
Files.createSymbolicLink(link, target);
} catch (FileAlreadyExistsException e) {
System.out.println("FileAlreadyExistsException!");
}
// Result
// ↓
//FileAlreadyExistsException!
static Path createTempDirectory (String prefix, FileAttribute<?>... attrs)
Please see also createFile(Path path, FileAttribute<?>... attrs) for FileAttribute.
final var ret1 = Files.createTempDirectory("prefix");
System.out.println(ret1); // C:\Users\xxx\AppData\Local\Temp\prefix6089636834939322082
final var ret2 = Files.createTempDirectory("abcd-");
System.out.println(ret2); // C:\Users\xxx\AppData\Local\Temp\abcd-6998169258402534775
final var ret3 = Files.createTempDirectory(null);
System.out.println(ret3); // C:\Users\xxx\AppData\Local\Temp\7916867536894745055
static Path createTempDirectory (Path dir, String prefix, FileAttribute<?>... attrs)
Please see also createFile(Path path, FileAttribute<?>... attrs) for FileAttribute.
final var dir = Path.of("D:", "java-work");
System.out.println(dir); // D:\java-work
final var ret1 = Files.createTempDirectory(dir, "prefix");
System.out.println(ret1); // D:\java-work\prefix18208067467997933175
final var ret2 = Files.createTempDirectory(dir, "abcd-");
System.out.println(ret2); // D:\java-work\abcd-521471602431667304
final var ret3 = Files.createTempDirectory(dir, null);
System.out.println(ret3); // D:\java-work\2640746303774778924
static Path createTempFile (String prefix, String suffix, FileAttribute<?>... attrs)
Please see also createFile(Path path, FileAttribute<?>... attrs) for FileAttribute.
final var ret1 = Files.createTempFile("prefix-", "-suffix");
System.out.println(ret1); // C:\Users\xxx\AppData\Local\Temp\prefix-9091722447586283597-suffix
final var ret2 = Files.createTempFile("abcd-", ".txt");
System.out.println(ret2); // C:\Users\xxx\AppData\Local\Temp\abcd-13867786695402679957.txt
final var ret3 = Files.createTempFile("prefix-", null);
System.out.println(ret3); // C:\Users\xxx\AppData\Local\Temp\prefix-17221573028074243598.tmp
final var ret4 = Files.createTempFile(null, "-suffix");
System.out.println(ret4); // C:\Users\xxx\AppData\Local\Temp\11809310207624726987-suffix
final var ret5 = Files.createTempFile(null, null);
System.out.println(ret5); // C:\Users\xxx\AppData\Local\Temp\13779039011143750638.tmp
static Path createTempFile (Path dir, String prefix, String suffix, FileAttribute<?>... attrs)
Please see also createFile(Path path, FileAttribute<?>... attrs) for FileAttribute.
final var dir = Path.of("D:", "java-work");
System.out.println(dir); // D:\java-work
final var ret1 = Files.createTempFile(dir, "prefix-", "-suffix");
System.out.println(ret1); // D:\java-work\prefix-10113412430119575991-suffix
final var ret2 = Files.createTempFile(dir, "abcd-", ".txt");
System.out.println(ret2); // D:\java-work\abcd-169546499978120138.txt
final var ret3 = Files.createTempFile(dir, "prefix-", null);
System.out.println(ret3); // D:\java-work\prefix-9437871265568200345.tmp
final var ret4 = Files.createTempFile(dir, null, "-suffix");
System.out.println(ret4); // D:\java-work\9337658086830323119-suffix
final var ret5 = Files.createTempFile(dir, null, null);
System.out.println(ret5); // D:\java-work\13108613127478405635.tmp
static void delete (Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
Files.createFile(path);
Files.createDirectory(dir);
System.out.println(Files.isRegularFile(path)); // true
System.out.println(Files.isDirectory(dir)); // true
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
//-a--- aaa.txt
Files.delete(path);
System.out.println(Files.notExists(path)); // true
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
Files.delete(dir);
System.out.println(Files.notExists(dir)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(Files.notExists(path)); // true
try {
Files.delete(path);
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//└─dir
// aaa.txt
// bbb.txt
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
System.out.println(Files.isDirectory(dir)); // true
try {
Files.delete(dir);
} catch (DirectoryNotEmptyException e) {
System.out.println("DirectoryNotEmptyException!");
}
// Result
// ↓
//DirectoryNotEmptyException!
static boolean deleteIfExists (Path path)
Please see also : delete(Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
System.out.println(Files.exists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
System.out.println(Files.deleteIfExists(path)); // true
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//<No files / directories>
System.out.println(Files.deleteIfExists(path)); // false
static boolean exists (Path path, LinkOption... options)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createDirectory(dir);
Files.createFile(file);
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
//-a--- aaa.txt
System.out.println(Files.isDirectory(dir)); // true
System.out.println(Files.exists(dir)); // true
System.out.println(Files.isRegularFile(file)); // true
System.out.println(Files.exists(file)); // true
System.out.println(Files.exists(nonExistentPath)); // false
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
// Intentionally creates an empty link.
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//la--- ... 0 link.txt -> D:\java-work\target.txt
System.out.println(Files.exists(target)); // false
System.out.println(Files.isSymbolicLink(link)); // true
System.out.println(Files.exists(link)); // false
System.out.println(Files.exists(link, LinkOption.NOFOLLOW_LINKS)); // true
static Stream<Path> find (Path start, int maxDepth, BiPredicate<Path,BasicFileAttributes> matcher, FileVisitOption... options)
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa.txt
//│ bbb.txt
//│
//├─dir1
//│ │ ccc.txt
//│ │ ddd.txt
//│ │
//│ └─dir1-2
//│ eee.txt
//│ fff.txt
//│
//└─dir2
// ggg.txt
// hhh.txt
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
System.out.println("maxDepth : 3");
try (final var stream = Files.find(start, 3, (_, _) -> true)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//maxDepth : 3
//D:\java-work
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir1
//D:\java-work\dir1\ccc.txt
//D:\java-work\dir1\ddd.txt
//D:\java-work\dir1\dir1-2
//D:\java-work\dir1\dir1-2\eee.txt
//D:\java-work\dir1\dir1-2\fff.txt
//D:\java-work\dir2
//D:\java-work\dir2\ggg.txt
//D:\java-work\dir2\hhh.txt
System.out.println("maxDepth : 2");
try (final var stream = Files.find(start, 2, (_, _) -> true)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//maxDepth : 2
//D:\java-work
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir1
//D:\java-work\dir1\ccc.txt
//D:\java-work\dir1\ddd.txt
//D:\java-work\dir1\dir1-2
//D:\java-work\dir2
//D:\java-work\dir2\ggg.txt
//D:\java-work\dir2\hhh.txt
System.out.println("maxDepth : 1");
try (final var stream = Files.find(start, 1, (_, _) -> true)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//maxDepth : 1
//D:\java-work
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir1
//D:\java-work\dir2
System.out.println("maxDepth : 0");
try (final var stream = Files.find(start, 0, (_, _) -> true)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//maxDepth : 0
//D:\java-work
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa.txt
//│ bbb.txt
//│
//├─dir1
//│ │ ccc.txt
//│ │ ddd.txt
//│ │
//│ └─dir1-2
//│ eee.txt
//│ fff.txt
//│
//└─dir2
// ggg.txt
// hhh.txt
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
System.out.println("matcher : isDirectory");
try (final var stream = Files.find(start, Integer.MAX_VALUE,
(_, basicFileAttributes) -> basicFileAttributes.isDirectory())) {
stream.forEach(System.out::println);
}
// Result
// ↓
//matcher : isDirectory
//D:\java-work
//D:\java-work\dir1
//D:\java-work\dir1\dir1-2
//D:\java-work\dir2
System.out.println("matcher : isRegularFile");
try (final var stream = Files.find(start, Integer.MAX_VALUE,
(_, basicFileAttributes) -> basicFileAttributes.isRegularFile())) {
stream.forEach(System.out::println);
}
// Result
// ↓
//matcher : isRegularFile
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir1\ccc.txt
//D:\java-work\dir1\ddd.txt
//D:\java-work\dir1\dir1-2\eee.txt
//D:\java-work\dir1\dir1-2\fff.txt
//D:\java-work\dir2\ggg.txt
//D:\java-work\dir2\hhh.txt
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//├─dir
//│ aaa.txt
//│ bbb.txt
//│
//└─link-dir
// aaa.txt
// bbb.txt
//
//PS D:\java-work> ls
//
// Directory: D:\java-work
//
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//l---- ... link-dir -> D:\java-work\dir
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
try (final var stream = Files.find(start, Integer.MAX_VALUE,
(_, _) -> true)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//D:\java-work
//D:\java-work\dir
//D:\java-work\dir\aaa.txt
//D:\java-work\dir\bbb.txt
//D:\java-work\link-dir
System.out.println("FileVisitOption : FOLLOW_LINKS");
try (final var stream = Files.find(start, Integer.MAX_VALUE,
(_, _) -> true, FileVisitOption.FOLLOW_LINKS)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//FileVisitOption : FOLLOW_LINKS
//D:\java-work
//D:\java-work\dir
//D:\java-work\dir\aaa.txt
//D:\java-work\dir\bbb.txt
//D:\java-work\link-dir
//D:\java-work\link-dir\aaa.txt
//D:\java-work\link-dir\bbb.txt
final var start = Path.of("D:", "java-work", "xxx");
System.out.println(start); // D:\java-work\xxx
System.out.println(Files.notExists(start)); // true
try (var _ = Files.find(start, Integer.MAX_VALUE, (_, _) -> true)) {
System.out.println("No errors");
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static Object getAttribute (Path path, String attribute, LinkOption... options)
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var hidden = Path.of("D:", "java-work", "hidden.txt");
System.out.println(hidden); // D:\java-work\hidden.txt
Files.writeString(file, "abcd");
Files.writeString(hidden, "1234567890");
Files.setAttribute(hidden, "dos:hidden", true);
// --- PowerShell ---
//PS D:\java-work> ls -Force | Format-Table -Property Mode, Length, Name
//
//Mode Length Name
//---- ------ ----
//-a--- 4 aaa.txt
//-a-h- 10 hidden.txt
System.out.println(Files.getAttribute(file, "size")); // 4
System.out.println(Files.getAttribute(hidden, "size")); // 10
System.out.println(Files.getAttribute(file, "dos:hidden")); // false
System.out.println(Files.getAttribute(hidden, "dos:hidden")); // true
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.writeString(target, "abcd");
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//-a--- ... 4 aaa.txt
//la--- ... 0 link.txt -> D:\java-work\aaa.txt
System.out.println(Files.getAttribute(link, "size")); // 4
System.out.println(Files.getAttribute(link, "size", LinkOption.NOFOLLOW_LINKS)); // 0
static <V extends FileAttributeView> V getFileAttributeView (Path path, Class<V> type, LinkOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.writeString(path, "abcd");
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Length, Name
//
//Mode Length Name
//---- ------ ----
//-a--- 4 aaa.txt
final var basicView = Files.getFileAttributeView(path, BasicFileAttributeView.class);
if (basicView != null) {
final var attrs = basicView.readAttributes();
System.out.println(attrs.size()); // 4
System.out.println(attrs.isRegularFile()); // true
System.out.println(attrs.isDirectory()); // false
}
final var hidden = Path.of("D:", "java-work", "hidden.txt");
System.out.println(hidden); // D:\java-work\hidden.txt
Files.writeString(hidden, "abcd");
Files.setAttribute(hidden, "dos:hidden", true);
// --- PowerShell ---
//PS D:\java-work> ls -Force | Format-Table -Property Mode, Length, Name
//
//Mode Length Name
//---- ------ ----
//-a-h- 4 hidden.txt
final var dosView = Files.getFileAttributeView(hidden, DosFileAttributeView.class);
if (dosView != null) {
final var attrs = dosView.readAttributes();
System.out.println(attrs.size()); // 4
System.out.println(attrs.isHidden()); // true
System.out.println(attrs.isReadOnly()); // false
dosView.setReadOnly(true);
// --- PowerShell ---
//PS D:\java-work> ls -Force | Format-Table -Property Mode, Length, Name
//
//Mode Length Name
//---- ------ ----
//-arh- 4 hidden.txt
}
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.writeString(target, "abcd");
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//-a--- ... 4 aaa.txt
//la--- ... 0 link.txt -> D:\java-work\aaa.txt
final var basicView = Files.getFileAttributeView(
link, BasicFileAttributeView.class);
if (basicView != null) {
final var attrs = basicView.readAttributes();
System.out.println(attrs.size()); // 4
System.out.println(attrs.isRegularFile()); // true
System.out.println(attrs.isSymbolicLink()); // false
}
final var basicView2 = Files.getFileAttributeView(
link, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS);
if (basicView2 != null) {
final var attrs = basicView2.readAttributes();
System.out.println(attrs.size()); // 0
System.out.println(attrs.isRegularFile()); // false
System.out.println(attrs.isSymbolicLink()); // true
}
static FileStore getFileStore (Path path)
final var path = Path.of("D:", "java-work");
System.out.println(path); // D:\java-work
final var store = Files.getFileStore(path);
System.out.println(store.type()); // NTFS
System.out.println(store.getBlockSize()); // 512
static FileTime getLastModifiedTime (Path path, LinkOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
final var zoneId = ZoneId.systemDefault();
System.out.println(zoneId); // Asia/Tokyo
final var ret = Files.setLastModifiedTime(path, FileTime.from(
ZonedDateTime.of(2100, 1, 1, 0, 0, 0, 0, zoneId).toInstant()));
System.out.println(ret); // D:\java-work\aaa.txt
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property LastWriteTime, Name
//
//LastWriteTime Name
//------------- ----
//2100/01/01 0:00:00 aaa.txt
// FileTime is UTC.
final var fileTime = Files.getLastModifiedTime(path);
System.out.println(fileTime); // 2099-12-31T15:00:00Z
final var zonedDateTime = ZonedDateTime.ofInstant(fileTime.toInstant(), zoneId);
System.out.println(zonedDateTime); // 2100-01-01T00:00+09:00[Asia/Tokyo]
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
final var zoneId = ZoneId.systemDefault();
System.out.println(zoneId); // Asia/Tokyo
final var zonedDateTime = ZonedDateTime.of(2100, 1, 1, 0, 0, 0, 0, zoneId);
System.out.println(zonedDateTime); // 2100-01-01T00:00+09:00[Asia/Tokyo]
Files.createFile(target);
Files.setLastModifiedTime(target, FileTime.from(zonedDateTime.toInstant()));
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode LastWriteTime Length Name
//---- ------------- ------ ----
//-a--- 2100/01/01 0:00 0 aaa.txt
//la--- 2024/10/19 16:31 0 link.txt -> D:\java-work\aaa.txt
final var ret1 = Files.getLastModifiedTime(link);
System.out.println(ret1); // 2099-12-31T15:00:00Z
final var ret2 = Files.getLastModifiedTime(link, LinkOption.NOFOLLOW_LINKS);
System.out.println(ret2); // 2024-10-19T07:31:55.9393338Z
static UserPrincipal getOwner (Path path, LinkOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
final var service = path.getFileSystem().getUserPrincipalLookupService();
final var newOwner = service.lookupPrincipalByName("test-user");
final var ret1 = Files.setOwner(path, newOwner);
System.out.println(ret1); // D:\java-work\aaa.txt
// --- PowerShell ---
//PS D:\java-work> Get-Acl .\aaa.txt
//...
//Path Owner Access
//---- ----- ------
//aaa.txt MY-PC\test-user BUILTIN\Administrators Allow FullControl…
final var ret2 = Files.getOwner(path);
System.out.println(ret2); // MY-PC\test-user (User)
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls | Get-Acl
//..
//Path Owner Access
//---- ----- ------
//aaa.txt MY-PC\test-user BUILTIN\Administrators Allow FullControl…
//link.txt BUILTIN\Administrators BUILTIN\Administrators Allow FullControl…
final var ret1 = Files.getOwner(link);
System.out.println(ret1); // MY-PC\test-user (User)
final var ret2 = Files.getOwner(link, LinkOption.NOFOLLOW_LINKS);
System.out.println(ret2); // BUILTIN\Administrators (Alias)
static Set<PosixFilePermission> getPosixFilePermissions (Path path, LinkOption... options)
The following code runs on Linux.
System.out.println(System.getProperty("os.name")); // Linux
// --- Linux Terminal ---
//$ ls -l sample.txt
//-rw-rw-r-- 1 xxxx xxxx 0 ... sample.txt
final var path = Path.of("sample.txt");
final var permissions = Files.getPosixFilePermissions(path);
System.out.println(PosixFilePermissions.toString(permissions)); // rw-rw-r--
System.out.println(System.getProperty("os.name")); // Linux
// --- Linux Terminal ---
//$ ls -l
//lrwxrwxrwx 1 xxxx xxxx 10 ... link.txt -> sample.txt
//-rw-rw-r-- 1 xxxx xxxx 0 ... sample.txt
final var path = Path.of("link.txt");
final var permissions1 = Files.getPosixFilePermissions(path);
System.out.println(PosixFilePermissions.toString(permissions1)); // rw-rw-r--
final var permissions2 = Files.getPosixFilePermissions(path, LinkOption.NOFOLLOW_LINKS);
System.out.println(PosixFilePermissions.toString(permissions2)); // rwxrwxrwx
static boolean isDirectory (Path path, LinkOption... options)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link-dir");
System.out.println(link); // D:\java-work\link-dir
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createDirectory(dir);
Files.createFile(file);
Files.createSymbolicLink(link, dir);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//l---- ... link-dir -> D:\java-work\dir
//-a--- ... 0 aaa.txt
System.out.println(Files.isDirectory(dir)); // true
System.out.println(Files.isDirectory(file)); // false
System.out.println(Files.isDirectory(link)); // true
System.out.println(Files.isDirectory(link, LinkOption.NOFOLLOW_LINKS)); // false
System.out.println(Files.isDirectory(nonExistentPath)); // false
static boolean isExecutable (Path path)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var exe = Path.of("D:", "java-work", "java.exe");
System.out.println(exe); // D:\java-work\java.exe
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createDirectory(dir);
Files.createFile(file);
Files.copy(Path.of(System.getProperty("java.home"), "bin", "java.exe"), exe);
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
//-a--- aaa.txt
//-a--- java.exe
// On Windows.
System.out.println(Files.isExecutable(dir)); // true
System.out.println(Files.isExecutable(file)); // true
System.out.println(Files.isExecutable(exe)); // true
System.out.println(Files.isExecutable(nonExistentPath)); // false
The following code runs on Linux.
System.out.println(System.getProperty("os.name")); // Linux
final var shFile = Path.of("sample.sh");
final var txtFile = Path.of("sample.txt");
// --- Linux Terminal ---
//$ ls -l
//-rwxrwxr-x 1 xxxx xxxx 0 ... sample.sh
//-rw-rw-r-- 1 xxxx xxxx 0 ... sample.txt
System.out.println(Files.isExecutable(shFile)); // true
System.out.println(Files.isExecutable(txtFile)); // false
static boolean isHidden (Path path)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var hidden = Path.of("D:", "java-work", "hidden.txt");
System.out.println(hidden); // D:\java-work\hidden.txt
Files.createDirectory(dir);
Files.createFile(file);
Files.createFile(hidden);
Files.setAttribute(hidden, "dos:hidden", true);
// --- PowerShell ---
//PS D:\java-work> ls -Force | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
//-a--- aaa.txt
//-a-h- hidden.txt
System.out.println(Files.isHidden(dir)); // false
System.out.println(Files.isHidden(file)); // false
System.out.println(Files.isHidden(hidden)); // true
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
System.out.println(Files.notExists(nonExistentPath)); // true
try {
Files.isHidden(nonExistentPath);
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static boolean isReadable (Path path)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createDirectory(dir);
Files.createFile(file);
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
//-a--- aaa.txt
System.out.println(Files.isReadable(dir)); // true
System.out.println(Files.isReadable(file)); // true
System.out.println(Files.isReadable(nonExistentPath)); // false
// The non-readable.txt has read permission denied.
final var nonReadableFile = Path.of("D:", "java-work", "non-readable.txt");
System.out.println(nonReadableFile); // D:\java-work\non-readable.txt
// --- PowerShell ---
//PS D:\java-work> Get-Acl .\non-readable.txt
//...
//Path Owner Access
//---- ----- ------
//non-readable.txt MY-PC\test-user BUILTIN\Administrators Deny ReadData…
System.out.println(Files.isReadable(nonReadableFile)); // false
static boolean isRegularFile (Path path, LinkOption... options)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createDirectory(dir);
Files.createFile(file);
Files.createSymbolicLink(link, file);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//-a--- ... 0 aaa.txt
//la--- ... 0 link.txt -> D:\java-work\aaa.txt
System.out.println(Files.isDirectory(dir)); // true
System.out.println(Files.isRegularFile(dir)); // false
System.out.println(Files.exists(file)); // true
System.out.println(Files.isRegularFile(file)); // true
System.out.println(Files.isSymbolicLink(link)); // true
System.out.println(Files.isRegularFile(link)); // true
System.out.println(Files.isRegularFile(link, LinkOption.NOFOLLOW_LINKS)); // false
System.out.println(Files.notExists(nonExistentPath)); // true
System.out.println(Files.isRegularFile(nonExistentPath)); // false
static boolean isSameFile (Path path, Path path2)
final var file1 = Path.of("D:", "java-work", "aaa1.txt");
System.out.println(file1); // D:\java-work\aaa1.txt
final var file2 = Path.of("D:", "java-work", "aaa2.txt");
System.out.println(file2); // D:\java-work\aaa2.txt
final var file3 = Path.of("D:", "java-work", "bbb.txt");
System.out.println(file3); // D:\java-work\bbb.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.writeString(file1, "abcd");
Files.writeString(file2, "abcd");
Files.writeString(file3, "XYZ");
Files.createSymbolicLink(link, file1);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//-a--- ... 4 aaa1.txt
//-a--- ... 4 aaa2.txt
//-a--- ... 3 bbb.txt
//la--- ... 0 link.txt -> D:\java-work\aaa1.txt
System.out.println(Files.readString(file1)); // abcd
System.out.println(Files.readString(file2)); // abcd
System.out.println(Files.readString(file3)); // XYZ
System.out.println(Files.readString(link)); // abcd
System.out.println(Files.isSameFile(file1, file1)); // true
System.out.println(Files.isSameFile(file1, file2)); // false
System.out.println(Files.isSameFile(file1, file3)); // false
System.out.println(Files.isSameFile(file1, link)); // true
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createFile(file);
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
try {
Files.isSameFile(file, nonExistentPath);
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static boolean isSymbolicLink (Path path)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createDirectory(dir);
Files.createFile(file);
Files.createSymbolicLink(link, file);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//-a--- ... 0 aaa.txt
//la--- ... 0 link.txt -> D:\java-work\aaa.txt
System.out.println(Files.isDirectory(dir)); // true
System.out.println(Files.isSymbolicLink(dir)); // false
System.out.println(Files.isRegularFile(file)); // true
System.out.println(Files.isSymbolicLink(file)); // false
System.out.println(Files.exists(link)); // true
System.out.println(Files.isSymbolicLink(link)); // true
System.out.println(Files.notExists(nonExistentPath)); // true
System.out.println(Files.isSymbolicLink(nonExistentPath)); // false
static boolean isWritable (Path path)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var readOnlyFile = Path.of("D:", "java-work", "read-only.txt");
System.out.println(readOnlyFile); // D:\java-work\read-only.txt
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createDirectory(dir);
Files.createFile(file);
Files.createFile(readOnlyFile);
Files.setAttribute(readOnlyFile, "dos:readonly", true);
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
//-a--- aaa.txt
//-ar-- read-only.txt
System.out.println(Files.isDirectory(dir)); // true
System.out.println(Files.isWritable(dir)); // true
System.out.println(Files.isRegularFile(file)); // true
System.out.println(Files.isWritable(file)); // true
System.out.println(Files.isRegularFile(readOnlyFile)); // true
System.out.println(Files.isWritable(readOnlyFile)); // false
System.out.println(Files.notExists(nonExistentPath)); // true
System.out.println(Files.isWritable(nonExistentPath)); // false
static Stream<String> lines (Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.writeString(path, """
abcd
XYZ
12345
""");
try (final var lines = Files.lines(path)) {
System.out.println(lines.toList()); // [abcd, XYZ, 12345]
}
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
System.out.println(Files.size(path)); // 0
try (final var stream = Files.lines(path)) {
System.out.println(stream.toList()); // []
}
static Stream<String> lines (Path path, Charset cs)
Please see also : lines(Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path);
final var csq = """
abcd
12345
〇△□×
""";
Files.writeString(path, csq, StandardCharsets.UTF_8);
try (final var stream = Files.lines(path, StandardCharsets.UTF_8)) {
System.out.println(stream.toList()); // [abcd, 12345, 〇△□×]
}
try (final var stream = Files.lines(path, Charset.forName("Shift_JIS"))) {
var _ = stream.toList();
} catch (UncheckedIOException e) {
System.out.println("UncheckedIOException! : " + e.getMessage());
}
// Result
// ↓
//UncheckedIOException! : java.nio.charset.MalformedInputException: Input length = 1
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path);
final var csq = """
abcd
12345
〇△□×
""";
Files.writeString(path, csq, Charset.forName("Shift_JIS"));
try (final var stream = Files.lines(path, Charset.forName("Shift_JIS"))) {
System.out.println(stream.toList()); // [abcd, 12345, 〇△□×]
}
try (final var stream = Files.lines(path, StandardCharsets.UTF_8)) {
var _ = stream.toList();
} catch (UncheckedIOException e) {
System.out.println("UncheckedIOException! : " + e.getMessage());
}
// Result
// ↓
//UncheckedIOException! : java.nio.charset.MalformedInputException: Input length = 1
static Stream<Path> list (Path dir)
final var dir1 = Path.of("D:", "java-work");
System.out.println(dir1); // D:\java-work
Files.createFile(dir1.resolve(Path.of("aaa.txt")));
Files.createFile(dir1.resolve(Path.of("bbb.txt")));
final var dir2 = dir1.resolve("dir");
System.out.println(dir2); // D:\java-work\dir
Files.createDirectory(dir2);
Files.createFile(dir2.resolve(Path.of("ccc.txt")));
Files.createFile(dir2.resolve(Path.of("ddd.txt")));
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa.txt
//│ bbb.txt
//│
//└─dir
// ccc.txt
// ddd.txt
try (final var stream = Files.list(dir1)) {
stream.forEach(System.out::println);
// Result
// ↓
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir
}
try (final var stream = Files.list(dir2)) {
stream.forEach(System.out::println);
// Result
// ↓
//D:\java-work\dir\ccc.txt
//D:\java-work\dir\ddd.txt
}
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
Files.createFile(file);
System.out.println(Files.isRegularFile(file)); // true
try (var _ = Files.list(file)) {
System.out.println("No errors");
} catch (NotDirectoryException e) {
System.out.println("NotDirectoryException!");
}
// Result
// ↓
//NotDirectoryException!
static long mismatch (Path path, Path path2)
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
final var file1 = Path.of("D:", "java-work", "aaa1.txt");
final var file2 = Path.of("D:", "java-work", "aaa2.txt");
final var file3 = Path.of("D:", "java-work", "aaa3.txt");
final var file4 = Path.of("D:", "java-work", "aaa4.txt");
final var file5 = Path.of("D:", "java-work", "aaa5.txt");
final var file6 = Path.of("D:", "java-work", "aaa6.txt");
Files.write(target, new byte[]{0, 1, 2});
Files.write(file1, new byte[]{0, 1, 2});
Files.write(file2, new byte[]{0, 1, 102});
Files.write(file3, new byte[]{0, 101, 102});
Files.write(file4, new byte[]{100, 101, 102});
Files.write(file5, new byte[]{});
Files.write(file6, new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa1.txt
//aaa2.txt
//aaa3.txt
//aaa4.txt
//aaa5.txt
//aaa6.txt
//target.txt
System.out.println(Arrays.toString(Files.readAllBytes(target))); // [0, 1, 2]
System.out.println(Arrays.toString(Files.readAllBytes(file1))); // [0, 1, 2]
System.out.println(Files.mismatch(target, file1)); // -1
System.out.println(Arrays.toString(Files.readAllBytes(file2))); // [0, 1, 102]
System.out.println(Files.mismatch(target, file2)); // 2
System.out.println(Arrays.toString(Files.readAllBytes(file3))); // [0, 101, 102]
System.out.println(Files.mismatch(target, file3)); // 1
System.out.println(Arrays.toString(Files.readAllBytes(file4))); // [100, 101, 102]
System.out.println(Files.mismatch(target, file4)); // 0
System.out.println(Arrays.toString(Files.readAllBytes(file5))); // []
System.out.println(Files.mismatch(target, file5)); // 0
final var ret = Files.readAllBytes(file6);
System.out.println(Arrays.toString(ret)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
System.out.println(Files.mismatch(target, file6)); // 3
static Path move (Path source, Path target, CopyOption... options)
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
Files.writeString(source, "abcd");
System.out.println(Files.exists(source)); // true
System.out.println(Files.exists(target)); // false
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Length, Name
//
//Mode Length Name
//---- ------ ----
//-a--- 4 source.txt
System.out.println(Files.move(source, target)); // D:\java-work\target.txt
System.out.println(Files.exists(source)); // false
System.out.println(Files.exists(target)); // true
System.out.println(Files.readString(target)); // abcd
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Length, Name
//
//Mode Length Name
//---- ------ ----
//-a--- 4 target.txt
final var source = Path.of("D:", "java-work", "source-dir");
System.out.println(source); // D:\java-work\source-dir
final var target = Path.of("D:", "java-work", "target-dir");
System.out.println(target); // D:\java-work\target-dir
Files.createDirectory(source);
Files.createFile(source.resolve(Path.of("aaa.txt")));
Files.createFile(source.resolve(Path.of("bbb.txt")));
System.out.println(Files.exists(source)); // true
System.out.println(Files.exists(target)); // false
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//└─source-dir
// aaa.txt
// bbb.txt
System.out.println(Files.move(source, target)); // D:\java-work\target-dir
System.out.println(Files.exists(source)); // false
System.out.println(Files.exists(target)); // true
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//└─target-dir
// aaa.txt
// bbb.txt
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
Files.createFile(source);
System.out.println(Files.exists(source)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
System.out.println(Files.move(source, source)); // D:\java-work\source.txt
System.out.println(Files.exists(source)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
Files.createFile(source);
Files.createFile(target);
System.out.println(Files.exists(source)); // true
System.out.println(Files.exists(target)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Name
//source.txt
//target.txt
try {
Files.move(source, target);
} catch (FileAlreadyExistsException e) {
System.out.println("FileAlreadyExistsException!");
}
// Result
// ↓
//FileAlreadyExistsException!
// An example of moving a file to a different FileStore.
final var source = Path.of("D:", "java-work", "source.txt");
System.out.println(source); // D:\java-work\source.txt
final var target = Path.of("R:", "java-work", "target.txt");
System.out.println(target); // R:\java-work\target.txt
Files.createFile(source);
System.out.println(Files.exists(source)); // true
System.out.println(Files.exists(target)); // false
System.out.println(Files.move(source, target)); // R:\java-work\target.txt
System.out.println(Files.exists(source)); // false
System.out.println(Files.exists(target)); // true
// An example of moving a directory to a different FileStore.
final var source = Path.of("D:", "java-work", "source-dir");
System.out.println(source); // D:\java-work\source-dir
final var target = Path.of("R:", "java-work", "target-dir");
System.out.println(target); // R:\java-work\target-dir
Files.createDirectory(source);
Files.createFile(source.resolve(Path.of("aaa.txt")));
System.out.println(Files.exists(source)); // true
System.out.println(Files.exists(target)); // false
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//└─source-dir
// aaa.txt
try {
Files.move(source, target);
} catch (DirectoryNotEmptyException e) {
System.out.println("DirectoryNotEmptyException!");
}
// Result
// ↓
//DirectoryNotEmptyException!
static BufferedReader newBufferedReader (Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.writeString(path, """
abcd
XYZ
12345
""");
try (final var reader = Files.newBufferedReader(path)) {
System.out.println(reader.readLine()); // abcd
System.out.println(reader.readLine()); // XYZ
System.out.println(reader.readLine()); // 12345
}
static BufferedReader newBufferedReader (Path path, Charset cs)
Please see also : newBufferedReader(Path path)
final var utf8 = Path.of("D:", "java-work", "aaa.txt");
System.out.println(utf8); // D:\java-work\aaa.txt
Files.writeString(utf8, "〇△□×", StandardCharsets.UTF_8);
try (final var reader = Files.newBufferedReader(utf8, StandardCharsets.UTF_8)) {
System.out.println(reader.readLine()); // 〇△□×
}
try (final var reader = Files.newBufferedReader(utf8, Charset.forName("Shift_JIS"))) {
reader.readLine();
} catch (MalformedInputException e) {
System.out.println("MalformedInputException!");
}
// Result
// ↓
//MalformedInputException!
final var sjis = Path.of("D:", "java-work", "aaa.txt");
System.out.println(sjis); // D:\java-work\aaa.txt
Files.writeString(sjis, "〇△□×", Charset.forName("Shift_JIS"));
try (final var reader = Files.newBufferedReader(sjis, Charset.forName("Shift_JIS"))) {
System.out.println(reader.readLine()); // 〇△□×
}
try (final var reader = Files.newBufferedReader(sjis, StandardCharsets.UTF_8)) {
reader.readLine();
} catch (MalformedInputException e) {
System.out.println("MalformedInputException!");
}
// Result
// ↓
//MalformedInputException!
static BufferedWriter newBufferedWriter (Path path, Charset cs, OpenOption... options)
Please see also : newBufferedWriter(Path path, OpenOption... options)
final var sjis = Path.of("D:", "java-work", "aaa.txt");
System.out.println(sjis); // D:\java-work\aaa.txt
try (final var writer = Files.newBufferedWriter(sjis, Charset.forName("Shift_JIS"))) {
writer.write("〇△□×");
}
System.out.println(Files.readString(sjis, Charset.forName("Shift_JIS"))); // 〇△□×
try {
Files.readString(sjis, StandardCharsets.UTF_8);
} catch (MalformedInputException e) {
System.out.println("MalformedInputException!");
}
// Result
// ↓
//MalformedInputException!
static BufferedWriter newBufferedWriter (Path path, OpenOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
try (final var writer = Files.newBufferedWriter(path)) {
writer.write("abcd");
writer.newLine();
writer.write("XYZ");
writer.newLine();
}
final var str = Files.readString(path);
System.out.print(str);
// Result
// ↓
//abcd
//XYZ
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
try (final var writer = Files.newBufferedWriter(path)) {
writer.write("abcd");
}
System.out.println(Files.readString(path)); // abcd
try (final var writer = Files.newBufferedWriter(path)) {
writer.write("XYZ");
}
System.out.println(Files.readString(path)); // XYZ
try (final var writer = Files.newBufferedWriter(path, StandardOpenOption.APPEND)) {
writer.write("1234");
}
System.out.println(Files.readString(path)); // XYZ1234
static SeekableByteChannel newByteChannel (Path path, OpenOption... options)
final var path = Path.of("D:", "java-work", "aaa.data");
System.out.println(path);
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
try (final var channel = Files.newByteChannel(path,
StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE)) {
final var src = ByteBuffer.wrap(new byte[]{10, 20, 30});
System.out.println(Arrays.toString(src.array())); // [10, 20, 30]
System.out.println(channel.write(src)); // 3
}
System.out.println(Arrays.toString(Files.readAllBytes(path))); // [10, 20, 30]
try (final var channel = Files.newByteChannel(path, StandardOpenOption.READ)) {
final var dst = ByteBuffer.allocate(3);
System.out.println(channel.read(dst)); // 3
System.out.println(Arrays.toString(dst.array())); // [10, 20, 30]
}
static SeekableByteChannel newByteChannel (Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs)
Please see below links.
- newByteChannel(Path path, OpenOption... options)
- An example of FileAttribute : createFile(Path path, FileAttribute<?>... attrs)
static DirectoryStream<Path> newDirectoryStream (Path dir)
final var dir = Path.of("D:", "java-work");
System.out.println(dir); // D:\java-work
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
// aaa.txt
// bbb.txt
// ccc.txt
try (final var stream = Files.newDirectoryStream(dir)) {
for (final var path : stream) {
System.out.println(path);
}
}
// Result
// ↓
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\ccc.txt
final var dir = Path.of("D:", "java-work");
System.out.println(dir); // D:\java-work
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa1.txt
//│ aaa2.txt
//│
//└─dir
// bbb1.txt
// bbb2.txt
try (final var stream = Files.newDirectoryStream(dir)) {
for (final var path : stream) {
System.out.println(path);
}
}
// Result
// ↓
//D:\java-work\aaa1.txt
//D:\java-work\aaa2.txt
//D:\java-work\dir
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
System.out.println(Files.notExists(nonExistentPath)); // true
try (var _ = Files.newDirectoryStream(nonExistentPath)) {
System.out.println("No errors");
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static DirectoryStream<Path> newDirectoryStream (Path dir, String glob)
Please see also : newDirectoryStream(Path dir)
final var dir = Path.of("D:", "java-work");
System.out.println(dir); // D:\java-work
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
// aaa.txt
// bbb.txt
// Book.java
// Page.java
try (final var stream = Files.newDirectoryStream(dir, "*")) {
for (final var file : stream) {
System.out.println(file);
}
}
// Result
// ↓
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\Book.java
//D:\java-work\Page.java
try (final var stream = Files.newDirectoryStream(dir, "*.java")) {
for (final var file : stream) {
System.out.println(file);
}
}
// Result
// ↓
//D:\java-work\Book.java
//D:\java-work\Page.java
try (final var stream = Files.newDirectoryStream(dir, "b*")) {
for (final var file : stream) {
System.out.println(file);
}
}
// Result
// ↓
//D:\java-work\bbb.txt
//D:\java-work\Book.java
static DirectoryStream<Path> newDirectoryStream (Path dir, DirectoryStream.Filter<? super Path> filter)
Please see also : newDirectoryStream(Path dir)
final var dir = Path.of("D:", "java-work");
System.out.println(dir); // D:\java-work
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
// aaa.txt
// bbb.txt
// Book.java
// Page.java
try (final var stream = Files.newDirectoryStream(dir, (_) -> true)) {
for (final var path : stream) {
System.out.println(path);
}
}
// Result
// ↓
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\Book.java
//D:\java-work\Page.java
try (final var stream = Files.newDirectoryStream(dir, (path) -> path.toString().endsWith(".java"))) {
for (final var path : stream) {
System.out.println(path);
}
}
// Result
// ↓
//D:\java-work\Book.java
//D:\java-work\Page.java
static InputStream newInputStream (Path path, OpenOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.write(path, new byte[]{10, 20, 30});
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
try (final var inputStream = Files.newInputStream(path)) {
final var bytes = inputStream.readAllBytes();
System.out.println(Arrays.toString(bytes)); // [10, 20, 30]
}
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.write(target, new byte[]{10, 20, 30});
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//-a--- ... 3 aaa.txt
//la--- ... 0 link.txt -> D:\java-work\aaa.txt
try (final var inputStream = Files.newInputStream(target)) {
final var bytes = inputStream.readAllBytes();
System.out.println(Arrays.toString(bytes)); // [10, 20, 30]
}
try (final var inputStream = Files.newInputStream(link)) {
final var bytes = inputStream.readAllBytes();
System.out.println(Arrays.toString(bytes)); // [10, 20, 30]
}
try (var _ = Files.newInputStream(link, LinkOption.NOFOLLOW_LINKS)) {
System.out.println("No errors");
} catch (IOException e) {
System.out.println(e);
}
// Result
// ↓
//java.io.IOException: File is symbolic link
static OutputStream newOutputStream (Path path, OpenOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
try (final var outputStream = Files.newOutputStream(path)) {
outputStream.write(10);
outputStream.write(20);
outputStream.write(new byte[]{30, 40, 50});
}
final var bytes = Files.readAllBytes(path);
System.out.println(Arrays.toString(bytes)); // [10, 20, 30, 40, 50]
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
try (final var outputStream = Files.newOutputStream(path)) {
outputStream.write(10);
outputStream.write(20);
}
System.out.println(Arrays.toString(Files.readAllBytes(path))); // [10, 20]
try (final var outputStream = Files.newOutputStream(path)) {
outputStream.write(30);
outputStream.write(40);
}
System.out.println(Arrays.toString(Files.readAllBytes(path))); // [30, 40]
try (final var outputStream = Files.newOutputStream(
path, StandardOpenOption.APPEND)) {
outputStream.write(50);
outputStream.write(60);
}
System.out.println(Arrays.toString(Files.readAllBytes(path))); // [30, 40, 50, 60]
static boolean notExists (Path path, LinkOption... options)
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
final var file = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
Files.createDirectory(dir);
Files.createFile(file);
Files.createSymbolicLink(link, nonExistentPath);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//-a--- ... 0 aaa.txt
//la--- ... 0 link.txt -> D:\java-work\xxx
System.out.println(Files.isDirectory(dir)); // true
System.out.println(Files.notExists(dir)); // false
System.out.println(Files.isRegularFile(file)); // true
System.out.println(Files.notExists(file)); // false
System.out.println(Files.isSymbolicLink(link)); // true
System.out.println(Files.notExists(link)); // true
System.out.println(Files.notExists(link, LinkOption.NOFOLLOW_LINKS)); // false
System.out.println(Files.notExists(nonExistentPath)); // true
static String probeContentType (Path path)
// --- PowerShell ---
//PS D:\java-work> ls -Name
//image.png
//index.html
//text.txt
//unknown.abc
final var imageFile = Path.of("D:", "java-work", "image.png");
System.out.println(Files.probeContentType(imageFile)); // "image/png"
final var htmlFile = Path.of("D:", "java-work", "index.html");
System.out.println(Files.probeContentType(htmlFile)); // "text/html"
final var textFile = Path.of("D:", "java-work", "text.txt");
System.out.println(Files.probeContentType(textFile)); // "text/plain"
final var unknownFile = Path.of("D:", "java-work", "unknown.abc");
System.out.println(Files.probeContentType(unknownFile)); // null
static byte[] readAllBytes (Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.write(path, new byte[]{10, 20, 30});
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
final var ret = Files.readAllBytes(path);
System.out.println(Arrays.toString(ret)); // [10, 20, 30]
static List<String> readAllLines (Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.writeString(path, """
abcd
XYZ
12345
""");
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
final var ret = Files.readAllLines(path);
System.out.println(ret); // [abcd, XYZ, 12345]
static List<String> readAllLines (Path path, Charset cs)
Please see also : readAllLines(Path path)
final var utf8 = Path.of("D:", "java-work", "aaa.txt");
System.out.println(utf8); // D:\java-work\aaa.txt
Files.writeString(utf8, """
abcd
〇△□×
""", StandardCharsets.UTF_8);
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
final var lines = Files.readAllLines(utf8, StandardCharsets.UTF_8);
System.out.println(lines); // [abcd, 〇△□×]
try {
Files.readAllLines(utf8, Charset.forName("Shift_JIS"));
} catch (MalformedInputException e) {
System.out.println("MalformedInputException!");
}
// Result
// ↓
//MalformedInputException!
final var sjis = Path.of("D:", "java-work", "aaa.txt");
System.out.println(sjis); // D:\java-work\aaa.txt
Files.writeString(sjis, """
abcd
〇△□×
""", Charset.forName("Shift_JIS"));
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
final var lines = Files.readAllLines(sjis, Charset.forName("Shift_JIS"));
System.out.println(lines); // [abcd, 〇△□×]
try {
Files.readAllLines(sjis, StandardCharsets.UTF_8);
} catch (MalformedInputException e) {
System.out.println("MalformedInputException!");
}
// Result
// ↓
//MalformedInputException!
static <A extends BasicFileAttributes> A readAttributes (Path path, Class<A> type, LinkOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.writeString(path, "abcd");
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Length, Name
//
//Mode Length Name
//---- ------ ----
//-a--- 4 aaa.txt
final var attrs = Files.readAttributes(path, BasicFileAttributes.class);
System.out.println(attrs.isDirectory()); // false
System.out.println(attrs.isRegularFile()); // true
System.out.println(attrs.size()); // 4
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
Files.createDirectory(dir);
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
final var attrs = Files.readAttributes(dir, BasicFileAttributes.class);
System.out.println(attrs.isDirectory()); // true
System.out.println(attrs.isRegularFile()); // false
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.createFile(target);
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//-a--- ... 0 aaa.txt
//la--- ... 0 link.txt -> D:\java-work\aaa.txt
final var attrs1 = Files.readAttributes(link, BasicFileAttributes.class);
System.out.println(attrs1.isSymbolicLink()); // false
final var attrs2 = Files.readAttributes(link,
BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
System.out.println(attrs2.isSymbolicLink()); // true
final var readOnlyFile = Path.of("D:", "java-work", "read-only.txt");
System.out.println(readOnlyFile); // D:\java-work\read-only.txt
final var hiddenFile = Path.of("D:", "java-work", "hidden.txt");
System.out.println(hiddenFile); // D:\java-work\hidden.txt
Files.createFile(readOnlyFile);
Files.setAttribute(readOnlyFile, "dos:readonly", true);
Files.createFile(hiddenFile);
Files.setAttribute(hiddenFile, "dos:hidden", true);
// --- PowerShell ---
//PS D:\java-work> ls -Force | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//-a-h- hidden.txt
//-ar-- read-only.txt
final var attrs1 = Files.readAttributes(readOnlyFile, DosFileAttributes.class);
System.out.println(attrs1.isHidden()); // false
System.out.println(attrs1.isReadOnly()); // true
final var attrs2 = Files.readAttributes(hiddenFile, DosFileAttributes.class);
System.out.println(attrs2.isHidden()); // true
System.out.println(attrs2.isReadOnly()); // false
static Map<String,Object> readAttributes (Path path, String attributes, LinkOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//-a--- aaa.txt
final var file = Path.of("D:", "java-work", "aaa.txt");
final var attrs = Files.readAttributes(file, "*");
//{lastAccessTime=2024-10-19T07:19:25.3063571Z,
// lastModifiedTime=2024-10-19T07:19:25.3063571Z,
// size=0, creationTime=2024-10-19T07:14:47.356487Z,
// isSymbolicLink=false, isRegularFile=true, fileKey=null,
// isOther=false, isDirectory=false}
System.out.println(attrs);
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
Files.createDirectory(dir);
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//d---- dir
final var attrs = Files.readAttributes(dir, "isRegularFile,isDirectory");
System.out.println(attrs); // {isRegularFile=false, isDirectory=true}
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.createFile(target);
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//-a--- ... 0 aaa.txt
//la--- ... 0 link.txt -> D:\java-work\aaa.txt
final var attrs1 = Files.readAttributes(link, "isRegularFile,isSymbolicLink");
System.out.println(attrs1); // {isSymbolicLink=false, isRegularFile=true}
final var attrs2 = Files.readAttributes(link,
"isRegularFile,isSymbolicLink", LinkOption.NOFOLLOW_LINKS);
System.out.println(attrs2); // {isSymbolicLink=true, isRegularFile=false}
final var readOnlyFile = Path.of("D:", "java-work", "read-only.txt");
System.out.println(readOnlyFile); // D:\java-work\read-only.txt
final var hiddenFile = Path.of("D:", "java-work", "hidden.txt");
System.out.println(hiddenFile); // D:\java-work\hidden.txt
Files.createFile(readOnlyFile);
Files.setAttribute(readOnlyFile, "dos:readonly", true);
Files.createFile(hiddenFile);
Files.setAttribute(hiddenFile, "dos:hidden", true);
// --- PowerShell ---
//PS D:\java-work> ls -Force | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//-a-h- hidden.txt
//-ar-- read-only.txt
final var attrs1 = Files.readAttributes(
readOnlyFile, "dos:isRegularFile,hidden,readonly");
System.out.println(attrs1); // {readonly=true, hidden=false, isRegularFile=true}
final var attrs2 = Files.readAttributes(
hiddenFile, "dos:isRegularFile,hidden,readonly");
System.out.println(attrs2); // {readonly=false, hidden=true, isRegularFile=true}
static String readString (Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.writeString(path, """
abcd
XYZ
12345
""");
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
final var ret = Files.readString(path);
System.out.println(ret);
// Result
// ↓
//abcd
//XYZ
//12345
static String readString (Path path, Charset cs)
Please see also : readString(Path path)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.writeString(path, "〇△□×", Charset.forName("Shift_JIS"));
// --- PowerShell ---
//PS D:\java-work> ls -Name
//aaa.txt
System.out.println(Files.readString(path, Charset.forName("Shift_JIS"))); // 〇△□×
try {
Files.readString(path, StandardCharsets.UTF_8);
} catch (MalformedInputException e) {
System.out.println("MalformedInputException!");
}
// Result
// ↓
//MalformedInputException!
static Path readSymbolicLink (Path link)
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.createFile(target);
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode ... Length Name
//---- ... ------ ----
//la--- ... 0 link.txt -> D:\java-work\target.txt
//-a--- ... 0 target.txt
System.out.println(Files.isRegularFile(link)); // true
System.out.println(Files.isSymbolicLink(link)); // true
System.out.println(Files.readSymbolicLink(link)); // aaa.txt
try {
System.out.println(Files.isRegularFile(target)); // true
System.out.println(Files.isSymbolicLink(target)); // false
Files.readSymbolicLink(target);
} catch (NotLinkException e) {
System.out.println("NotLinkException!");
}
// Result
// ↓
//NotLinkException!
static Path setAttribute (Path path, String attribute, Object value, LinkOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
System.out.println(Files.isHidden(path)); // false
// --- PowerShell ---
//PS D:\java-work> ls -Force | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//-a--- aaa.txt
Files.setAttribute(path, "dos:hidden", true);
System.out.println(Files.isHidden(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Force | Format-Table -Property Mode, Name
//
//Mode Name
//---- ----
//-a-h- aaa.txt
final var target = Path.of("D:", "java-work", "target.txt");
System.out.println(target); // D:\java-work\target.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.createFile(target);
Files.createSymbolicLink(link, target);
System.out.println(Files.isHidden(target)); // false
// --- PowerShell ---
//PS D:\java-work> ls -Force
//...
//Mode ... Length Name
//---- ... ------ ----
//la--- ... 0 link.txt -> D:\java-work\target.txt
//-a--- ... 0 target.txt
Files.setAttribute(link, "dos:hidden", true);
System.out.println(Files.isHidden(target)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Force
//...
//Mode ... Length Name
//---- ... ------ ----
//la--- ... 0 link.txt -> D:\java-work\target.txt
//-a-h- ... 0 target.txt
Files.setAttribute(link, "dos:hidden", true, LinkOption.NOFOLLOW_LINKS);
System.out.println(Files.isHidden(target)); // true
// --- PowerShell ---
//PS D:\java-work> ls -Force
//...
//Mode ... Length Name
//---- ... ------ ----
//la-h- ... 0 link.txt -> D:\java-work\target.txt
//-a-h- ... 0 target.txt
static Path setLastModifiedTime (Path path, FileTime time)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
final var zoneId = ZoneId.systemDefault();
System.out.println(zoneId); // Asia/Tokyo
final var ret = Files.setLastModifiedTime(path, FileTime.from(
ZonedDateTime.of(2100, 1, 1, 0, 0, 0, 0, zoneId).toInstant()));
System.out.println(ret); // D:\java-work\aaa.txt
// --- PowerShell ---
//PS D:\java-work> ls | Format-Table -Property LastWriteTime, Name
//
//LastWriteTime Name
//------------- ----
//2100/01/01 0:00:00 aaa.txt
// FileTime is UTC.
final var fileTime = Files.getLastModifiedTime(path);
System.out.println(fileTime); // 2099-12-31T15:00:00Z
final var zonedDateTime = ZonedDateTime.ofInstant(fileTime.toInstant(), zoneId);
System.out.println(zonedDateTime); // 2100-01-01T00:00+09:00[Asia/Tokyo]
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
final var zoneId = ZoneId.systemDefault();
System.out.println(zoneId); // Asia/Tokyo
final var zonedDateTime = ZonedDateTime.of(2100, 1, 1, 0, 0, 0, 0, zoneId);
System.out.println(zonedDateTime); // 2100-01-01T00:00+09:00[Asia/Tokyo]
Files.createFile(target);
Files.setLastModifiedTime(target, FileTime.from(zonedDateTime.toInstant()));
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls
//...
//Mode LastWriteTime Length Name
//---- ------------- ------ ----
//-a--- 2100/01/01 0:00 0 aaa.txt
//la--- 2024/10/19 16:31 0 link.txt -> D:\java-work\aaa.txt
final var ret1 = Files.getLastModifiedTime(link);
System.out.println(ret1); // 2099-12-31T15:00:00Z
final var ret2 = Files.getLastModifiedTime(link, LinkOption.NOFOLLOW_LINKS);
System.out.println(ret2); // 2024-10-19T07:31:55.9393338Z
static Path setOwner (Path path, UserPrincipal owner)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
Files.createFile(path);
final var service = path.getFileSystem().getUserPrincipalLookupService();
final var newOwner = service.lookupPrincipalByName("test-user");
final var ret1 = Files.setOwner(path, newOwner);
System.out.println(ret1); // D:\java-work\aaa.txt
// --- PowerShell ---
//PS D:\java-work> Get-Acl .\aaa.txt
//...
//Path Owner Access
//---- ----- ------
//aaa.txt MY-PC\test-user BUILTIN\Administrators Allow FullControl…
final var ret2 = Files.getOwner(path);
System.out.println(ret2); // MY-PC\test-user (User)
final var target = Path.of("D:", "java-work", "aaa.txt");
System.out.println(target); // D:\java-work\aaa.txt
final var link = Path.of("D:", "java-work", "link.txt");
System.out.println(link); // D:\java-work\link.txt
Files.createSymbolicLink(link, target);
// --- PowerShell ---
//PS D:\java-work> ls | Get-Acl
//..
//Path Owner Access
//---- ----- ------
//aaa.txt MY-PC\test-user BUILTIN\Administrators Allow FullControl…
//link.txt BUILTIN\Administrators BUILTIN\Administrators Allow FullControl…
final var ret1 = Files.getOwner(link);
System.out.println(ret1); // MY-PC\test-user (User)
final var ret2 = Files.getOwner(link, LinkOption.NOFOLLOW_LINKS);
System.out.println(ret2); // BUILTIN\Administrators (Alias)
static Path setPosixFilePermissions (Path path, Set<PosixFilePermission> perms)
The following code runs on Linux.
System.out.println(System.getProperty("os.name")); // Linux
// --- Linux Terminal ---
//$ ls -l sample.sh
//-rw-rw-r-- 1 xxxx xxxx 0 ... sample.sh
final var path = Path.of("sample.sh");
final var permissions = Files.getPosixFilePermissions(path);
System.out.println(PosixFilePermissions.toString(permissions)); // rw-rw-r--
final var newPermissions = PosixFilePermissions.fromString("rwxr-xr--");
final var ret = Files.setPosixFilePermissions(path, newPermissions);
System.out.println(ret); // sample.sh
// --- Linux Terminal ---
//$ ls -l sample.sh
//-rwxr-xr-- 1 xxxx xxxx 0 ... sample.sh
static long size (Path path)
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa.txt
//│ bbb.txt
//│
//└─dir
// ccc.txt
//
//PS D:\java-work> ls -Recurse
//
// Directory: D:\java-work
//
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//-a--- ... 5 aaa.txt
//-a--- ... 1000 bbb.txt
//
// Directory: D:\java-work\dir
//
//Mode ... Length Name
//---- ... ------ ----
//-a--- ... 12 ccc.txt
final var file1 = Path.of("D:", "java-work", "aaa.txt");
System.out.println(file1); // D:\java-work\aaa.txt
System.out.println(Files.size(file1)); // 5
final var file2 = Path.of("D:", "java-work", "bbb.txt");
System.out.println(file2); // D:\java-work\bbb.txt
System.out.println(Files.size(file2)); // 1000
final var dir = Path.of("D:", "java-work", "dir");
System.out.println(dir); // D:\java-work\dir
System.out.println(Files.size(dir)); // 0
final var nonExistentPath = Path.of("D:", "java-work", "xxx");
System.out.println(nonExistentPath); // D:\java-work\xxx
System.out.println(Files.notExists(nonExistentPath)); // true
try {
Files.size(nonExistentPath);
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static Stream<Path> walk (Path start, int maxDepth, FileVisitOption... options)
Please see also : walk(Path start, FileVisitOption... options)
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa.txt
//│ bbb.txt
//│
//├─dir1
//│ │ ccc.txt
//│ │ ddd.txt
//│ │
//│ └─dir1-2
//│ eee.txt
//│ fff.txt
//│
//└─dir2
// ggg.txt
// hhh.txt
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
System.out.println("maxDepth : 3");
try (final var stream = Files.walk(start, 3)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//maxDepth : 3
//D:\java-work
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir1
//D:\java-work\dir1\ccc.txt
//D:\java-work\dir1\ddd.txt
//D:\java-work\dir1\dir1-2
//D:\java-work\dir1\dir1-2\eee.txt
//D:\java-work\dir1\dir1-2\fff.txt
//D:\java-work\dir2
//D:\java-work\dir2\ggg.txt
//D:\java-work\dir2\hhh.txt
System.out.println("maxDepth : 2");
try (final var stream = Files.walk(start, 2)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//maxDepth : 2
//D:\java-work
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir1
//D:\java-work\dir1\ccc.txt
//D:\java-work\dir1\ddd.txt
//D:\java-work\dir1\dir1-2
//D:\java-work\dir2
//D:\java-work\dir2\ggg.txt
//D:\java-work\dir2\hhh.txt
System.out.println("maxDepth : 1");
try (final var stream = Files.walk(start, 1)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//maxDepth : 1
//D:\java-work
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir1
//D:\java-work\dir2
System.out.println("maxDepth : 0");
try (final var stream = Files.walk(start, 0)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//maxDepth : 0
//D:\java-work
static Stream<Path> walk (Path start, FileVisitOption... options)
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa.txt
//│ bbb.txt
//│
//├─dir1
//│ │ ccc.txt
//│ │ ddd.txt
//│ │
//│ └─dir1-2
//│ eee.txt
//│ fff.txt
//│
//└─dir2
// ggg.txt
// hhh.txt
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
try (final var stream = Files.walk(start)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//D:\java-work
//D:\java-work\aaa.txt
//D:\java-work\bbb.txt
//D:\java-work\dir1
//D:\java-work\dir1\ccc.txt
//D:\java-work\dir1\ddd.txt
//D:\java-work\dir1\dir1-2
//D:\java-work\dir1\dir1-2\eee.txt
//D:\java-work\dir1\dir1-2\fff.txt
//D:\java-work\dir2
//D:\java-work\dir2\ggg.txt
//D:\java-work\dir2\hhh.txt
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//├─dir
//│ aaa.txt
//│ bbb.txt
//│
//└─link-dir
// aaa.txt
// bbb.txt
//
//PS D:\java-work> ls
//
// Directory: D:\java-work
//
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//l---- ... link-dir -> D:\java-work\dir
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
try (final var stream = Files.walk(start)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//D:\java-work
//D:\java-work\dir
//D:\java-work\dir\aaa.txt
//D:\java-work\dir\bbb.txt
//D:\java-work\link-dir
System.out.println("FileVisitOption : FOLLOW_LINKS");
try (final var stream = Files.walk(start, FileVisitOption.FOLLOW_LINKS)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//FileVisitOption : FOLLOW_LINKS
//D:\java-work
//D:\java-work\dir
//D:\java-work\dir\aaa.txt
//D:\java-work\dir\bbb.txt
//D:\java-work\link-dir
//D:\java-work\link-dir\aaa.txt
//D:\java-work\link-dir\bbb.txt
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//└─dir
// │ aaa.txt
// │ bbb.txt
// │
// └─link-parent-dir
// │ aaa.txt
// │ bbb.txt
// │
// └─link-parent-dir
// │ aaa.txt
// │ bbb.txt
// ...
// --- PowerShell ---
//PS D:\java-work> ls -Recurse
//
// Directory: D:\java-work
//
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//
// Directory: D:\java-work\dir
//
//Mode ... Length Name
//---- ... ------ ----
//l---- ... link-parent-dir -> D:\java-work\dir
//-a--- ... 0 aaa.txt
//-a--- ... 0 bbb.txt
// Symbolic links are circular.
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
try (final var stream = Files.walk(start)) {
stream.forEach(System.out::println);
}
// Result
// ↓
//D:\java-work
//D:\java-work\dir
//D:\java-work\dir\aaa.txt
//D:\java-work\dir\bbb.txt
//D:\java-work\dir\link-parent-dir
System.out.println("FileVisitOption : FOLLOW_LINKS");
try (final var stream = Files.walk(start, FileVisitOption.FOLLOW_LINKS)) {
stream.forEach(System.out::println);
} catch (UncheckedIOException e) {
System.out.println(e);
}
// Result
// ↓
//FileVisitOption : FOLLOW_LINKS
//D:\java-work
//D:\java-work\dir
//D:\java-work\dir\aaa.txt
//D:\java-work\dir\bbb.txt
//java.io.UncheckedIOException: java.nio.file.FileSystemLoopException
final var start = Path.of("D:", "java-work", "xxx");
System.out.println(start); // D:\java-work\xxx
System.out.println(Files.notExists(start)); // true
try (var _ = Files.walk(start)) {
System.out.println("No errors");
} catch (NoSuchFileException e) {
System.out.println("NoSuchFileException!");
}
// Result
// ↓
//NoSuchFileException!
static Path walkFileTree (Path start, FileVisitor<? super Path> visitor)
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa.txt
//│ bbb.txt
//│
//├─dir1
//│ │ ccc.txt
//│ │ ddd.txt
//│ │
//│ └─dir1-2
//│ eee.txt
//│ fff.txt
//│
//└─dir2
// ggg.txt
// hhh.txt
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
System.out.println("-- start --");
final var ret1 = Files.walkFileTree(start, new FileVisitor<>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
System.out.println("preVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("visitFile : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.out.println("visitFileFailed : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
System.out.println("postVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
});
System.out.println("ret : " + ret1);
// Result
// ↓
//-- start --
//preVisitDirectory : D:\java-work
//visitFile : D:\java-work\aaa.txt
//visitFile : D:\java-work\bbb.txt
//preVisitDirectory : D:\java-work\dir1
//visitFile : D:\java-work\dir1\ccc.txt
//visitFile : D:\java-work\dir1\ddd.txt
//preVisitDirectory : D:\java-work\dir1\dir1-2
//visitFile : D:\java-work\dir1\dir1-2\eee.txt
//visitFile : D:\java-work\dir1\dir1-2\fff.txt
//postVisitDirectory : D:\java-work\dir1\dir1-2
//postVisitDirectory : D:\java-work\dir1
//preVisitDirectory : D:\java-work\dir2
//visitFile : D:\java-work\dir2\ggg.txt
//visitFile : D:\java-work\dir2\hhh.txt
//postVisitDirectory : D:\java-work\dir2
//postVisitDirectory : D:\java-work
//ret : D:\java-work
System.out.println("-- start --");
final var ret2 = Files.walkFileTree(start, new FileVisitor<>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
System.out.println("preVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("visitFile : " + file);
if (Path.of("D:", "java-work", "aaa.txt").equals(file)) {
return FileVisitResult.SKIP_SIBLINGS;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.out.println("visitFileFailed : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
System.out.println("postVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
});
System.out.println("ret : " + ret2);
// Result
// ↓
//-- start --
//preVisitDirectory : D:\java-work
//visitFile : D:\java-work\aaa.txt
//postVisitDirectory : D:\java-work
//ret : D:\java-work
System.out.println("-- start --");
final var ret3 = Files.walkFileTree(start, new FileVisitor<>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
System.out.println("preVisitDirectory : " + dir);
if (Path.of("D:", "java-work", "dir1").equals(dir)) {
return FileVisitResult.SKIP_SUBTREE;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("visitFile : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.out.println("visitFileFailed : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
System.out.println("postVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
});
System.out.println("ret : " + ret3);
// Result
// ↓
//-- start --
//preVisitDirectory : D:\java-work
//visitFile : D:\java-work\aaa.txt
//visitFile : D:\java-work\bbb.txt
//preVisitDirectory : D:\java-work\dir1
//preVisitDirectory : D:\java-work\dir2
//visitFile : D:\java-work\dir2\ggg.txt
//visitFile : D:\java-work\dir2\hhh.txt
//postVisitDirectory : D:\java-work\dir2
//postVisitDirectory : D:\java-work
//ret : D:\java-work
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//├─dir1
//└─dir2
// aaa.txt
//
//PS D:\java-work> ls | Get-Acl
//...
//Path Owner Access
//---- ----- ------
//dir1 MY-PC\test-user BUILTIN\Administrators Deny ReadData…
//dir2 MY-PC\test-user BUILTIN\Administrators Allow FullControl…
// Intentional errors.
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
System.out.println("-- start --");
final var ret = Files.walkFileTree(start, new FileVisitor<>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
System.out.println("preVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("visitFile : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.out.println("visitFileFailed : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
System.out.println("postVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
});
System.out.println("ret : " + ret);
// Result
// ↓
//-- start --
//preVisitDirectory : D:\java-work
//visitFileFailed : D:\java-work\dir1
//preVisitDirectory : D:\java-work\dir2
//visitFile : D:\java-work\dir2\aaa.txt
//postVisitDirectory : D:\java-work\dir2
//postVisitDirectory : D:\java-work
//ret : D:\java-work
static Path walkFileTree (Path start, Set<FileVisitOption> options, int maxDepth, FileVisitor<? super Path> visitor)
Please see also : walkFileTree(Path start, FileVisitor<? super Path> visitor)
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//│ aaa.txt
//│ bbb.txt
//│
//├─dir1
//│ │ ccc.txt
//│ │ ddd.txt
//│ │
//│ └─dir1-2
//│ eee.txt
//│ fff.txt
//│
//└─dir2
// ggg.txt
// hhh.txt
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
final var visitor = new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
System.out.println("preVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("visitFile : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.out.println("visitFileFailed : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
System.out.println("postVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
};
System.out.println("maxDepth : 3");
final var ret1 = Files.walkFileTree(start, Collections.emptySet(), 3, visitor);
System.out.println("ret : " + ret1);
// Result
// ↓
//maxDepth : 3
//preVisitDirectory : D:\java-work
//visitFile : D:\java-work\aaa.txt
//visitFile : D:\java-work\bbb.txt
//preVisitDirectory : D:\java-work\dir1
//visitFile : D:\java-work\dir1\ccc.txt
//visitFile : D:\java-work\dir1\ddd.txt
//preVisitDirectory : D:\java-work\dir1\dir1-2
//visitFile : D:\java-work\dir1\dir1-2\eee.txt
//visitFile : D:\java-work\dir1\dir1-2\fff.txt
//postVisitDirectory : D:\java-work\dir1\dir1-2
//postVisitDirectory : D:\java-work\dir1
//preVisitDirectory : D:\java-work\dir2
//visitFile : D:\java-work\dir2\ggg.txt
//visitFile : D:\java-work\dir2\hhh.txt
//postVisitDirectory : D:\java-work\dir2
//postVisitDirectory : D:\java-work
//ret : D:\java-work
System.out.println("maxDepth : 2");
final var ret2 = Files.walkFileTree(start, Collections.emptySet(), 2, visitor);
System.out.println("ret : " + ret2);
// Result
// ↓
//maxDepth : 2
//preVisitDirectory : D:\java-work
//visitFile : D:\java-work\aaa.txt
//visitFile : D:\java-work\bbb.txt
//preVisitDirectory : D:\java-work\dir1
//visitFile : D:\java-work\dir1\ccc.txt
//visitFile : D:\java-work\dir1\ddd.txt
//visitFile : D:\java-work\dir1\dir1-2
//postVisitDirectory : D:\java-work\dir1
//preVisitDirectory : D:\java-work\dir2
//visitFile : D:\java-work\dir2\ggg.txt
//visitFile : D:\java-work\dir2\hhh.txt
//postVisitDirectory : D:\java-work\dir2
//postVisitDirectory : D:\java-work
//ret : D:\java-work
System.out.println("maxDepth : 1");
final var ret3 = Files.walkFileTree(start, Collections.emptySet(), 1, visitor);
System.out.println("ret : " + ret3);
// Result
// ↓
//maxDepth : 1
//preVisitDirectory : D:\java-work
//visitFile : D:\java-work\aaa.txt
//visitFile : D:\java-work\bbb.txt
//visitFile : D:\java-work\dir1
//visitFile : D:\java-work\dir2
//postVisitDirectory : D:\java-work
//ret : D:\java-work
System.out.println("maxDepth : 0");
final var ret = Files.walkFileTree(start, Collections.emptySet(), 0, visitor);
System.out.println("ret : " + ret);
// Result
// ↓
//maxDepth : 0
//visitFile : D:\java-work
//ret : D:\java-work
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//├─dir
//│ aaa.txt
//│ bbb.txt
//│
//└─link-dir
// aaa.txt
// bbb.txt
//
//PS D:\java-work> ls
//
// Directory: D:\java-work
//
//Mode ... Length Name
//---- ... ------ ----
//d---- ... dir
//l---- ... link-dir -> D:\java-work\dir
final var start = Path.of("D:", "java-work");
System.out.println(start); // D:\java-work
final var visitor = new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
System.out.println("preVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("visitFile : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.out.println("visitFileFailed : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
System.out.println("postVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
};
final var ret1 = Files.walkFileTree(
start, Collections.emptySet(), Integer.MAX_VALUE, visitor);
System.out.println("ret : " + ret1);
// Result
// ↓
//preVisitDirectory : D:\java-work
//preVisitDirectory : D:\java-work\dir
//visitFile : D:\java-work\dir\aaa.txt
//visitFile : D:\java-work\dir\bbb.txt
//postVisitDirectory : D:\java-work\dir
//visitFile : D:\java-work\link-dir
//postVisitDirectory : D:\java-work
//ret : D:\java-work
System.out.println("FileVisitOption : FOLLOW_LINKS");
final var ret2 = Files.walkFileTree(
start, Set.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, visitor);
System.out.println("ret : " + ret2);
// Result
// ↓
//FileVisitOption : FOLLOW_LINKS
//preVisitDirectory : D:\java-work
//preVisitDirectory : D:\java-work\dir
//visitFile : D:\java-work\dir\aaa.txt
//visitFile : D:\java-work\dir\bbb.txt
//postVisitDirectory : D:\java-work\dir
//preVisitDirectory : D:\java-work\link-dir
//visitFile : D:\java-work\link-dir\aaa.txt
//visitFile : D:\java-work\link-dir\bbb.txt
//postVisitDirectory : D:\java-work\link-dir
//postVisitDirectory : D:\java-work
//ret : D:\java-work
// --- PowerShell ---
//PS D:\java-work> tree /F
//...
//D:.
//└─dir
// │ aaa.txt
// │ bbb.txt
// │
// └─link-parent-dir
// │ aaa.txt
// │ bbb.txt
// │
// └─link-parent-dir
// │ aaa.txt
// │ bbb.txt
// ...
// --- PowerShell ---
//PS D:\java-work> ls -Recurse
//
// Directory: D:\java-work
//
//Mode ... Length Name
//---- ... ----- ----
//d---- ... dir
//
// Directory: D:\java-work\dir
//
//Mode ... Length Name
//---- ... ------ ----
//l---- ... link-parent-dir -> D:\java-work\dir
//-a--- ... 0 aaa.txt
//-a--- ... 0 bbb.txt
// Symbolic links are circular.
final var start = Path.of("D:", "java-work");
System.out.println(start);
final var visitor = new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
System.out.println("preVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println("visitFile : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.out.println("visitFileFailed : " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
System.out.println("postVisitDirectory : " + dir);
return FileVisitResult.CONTINUE;
}
};
final var ret = Files.walkFileTree(start,
Set.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, visitor);
System.out.println("ret : " + ret);
// Result
// ↓
//preVisitDirectory : D:\java-work
//preVisitDirectory : D:\java-work\dir
//visitFile : D:\java-work\dir\aaa.txt
//visitFile : D:\java-work\dir\bbb.txt
//visitFileFailed : D:\java-work\dir\link-parent-dir
//postVisitDirectory : D:\java-work\dir
//postVisitDirectory : D:\java-work
//ret : D:\java-work
static Path write (Path path, byte[] bytes, OpenOption... options)
final var path = Path.of("D:", "java-work", "aaa.data");
System.out.println(path); // D:\java-work\aaa.data
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final byte[] bytes1 = {0, 1, 2};
System.out.println(Files.write(path, bytes1)); // D:\java-work\aaa.data
System.out.println(Arrays.toString(Files.readAllBytes(path))); // [0, 1, 2]
final byte[] bytes2 = {3, 4, 5};
System.out.println(Files.write(path, bytes2)); // D:\java-work\aaa.data
System.out.println(Arrays.toString(Files.readAllBytes(path))); // [3, 4, 5]
final byte[] bytes3 = {6, 7, 8};
System.out.println(Files.write(
path, bytes3, StandardOpenOption.APPEND)); // D:\java-work\aaa.data
System.out.println(Arrays.toString(Files.readAllBytes(path))); // [3, 4, 5, 6, 7, 8]
static Path write (Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options)
Please see also : write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options)
final var sjis = Path.of("D:", "java-work", "aaa.txt");
System.out.println(sjis); // D:\java-work\aaa.txt
System.out.println(Files.notExists(sjis)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final var ret1 = Files.write(sjis, List.of("〇", "△", "□"), Charset.forName("Shift_JIS"));
System.out.println(ret1); // D:\java-work\aaa.txt
System.out.println(Files.readAllLines(sjis, Charset.forName("Shift_JIS"))); // [〇, △, □]
try {
Files.readAllLines(sjis, StandardCharsets.UTF_8);
} catch (MalformedInputException e) {
System.out.println("MalformedInputException!");
}
// Result
// ↓
//MalformedInputException!
static Path write (Path path, Iterable<? extends CharSequence> lines, OpenOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final var ret1 = Files.write(path, List.of("aaa", "bbb", "ccc"));
System.out.println(ret1); // D:\java-work\aaa.txt
System.out.println(Files.readAllLines(path)); // [aaa, bbb, ccc]
final var ret2 = Files.write(path, List.of("ddd", "eee", "fff"));
System.out.println(ret2); // D:\java-work\aaa.txt
System.out.println(Files.readAllLines(path)); // [ddd, eee, fff]
final var ret3 = Files.write(path,
List.of("XXX", "YYY", "ZZZ"), StandardOpenOption.APPEND);
System.out.println(ret3); // D:\java-work\aaa.txt
System.out.println(Files.readAllLines(path)); // // [ddd, eee, fff, XXX, YYY, ZZZ]
static Path writeString (Path path, CharSequence csq, Charset cs, OpenOption... options)
Please see also : writeString(Path path, CharSequence csq, OpenOption... options)
final var sjis = Path.of("D:", "java-work", "aaa.txt");
System.out.println(sjis); // D:\java-work\aaa.txt
System.out.println(Files.notExists(sjis)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final var ret = Files.writeString(sjis, "〇△□×", Charset.forName("Shift_JIS"));
System.out.println(ret); // D:\java-work\aaa.txt
System.out.println(Files.readString(sjis, Charset.forName("Shift_JIS"))); // 〇△□×
try {
Files.readString(sjis, StandardCharsets.UTF_8);
} catch (MalformedInputException e) {
System.out.println("MalformedInputException!");
}
// Result
// ↓
//MalformedInputException!
static Path writeString (Path path, CharSequence csq, OpenOption... options)
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final var ret1 = Files.writeString(path, "abc");
System.out.println(ret1); // D:\java-work\aaa.txt
System.out.println(Files.readString(path)); // abc
final var ret2 = Files.writeString(path, "def");
System.out.println(ret2); // D:\java-work\aaa.txt
System.out.println(Files.readString(path)); // def
final var ret3 = Files.writeString(path, "XYZ", StandardOpenOption.APPEND);
System.out.println(ret3); // D:\java-work\aaa.txt
System.out.println(Files.readString(path)); // defXYZ
final var path = Path.of("D:", "java-work", "aaa.txt");
System.out.println(path); // D:\java-work\aaa.txt
System.out.println(Files.notExists(path)); // true
// --- PowerShell ---
//PS D:\java-work> ls
//<No files / directories>
final var csq = """
abcd
XYZ
12345
""";
final var ret = Files.writeString(path, csq);
System.out.println(ret); // D:\java-work\aaa.txt
System.out.println(Files.readAllLines(path)); // [abcd, XYZ, 12345]