java如何同磁盘交互
Java 与磁盘交互的方法
Java 提供了多种方式与磁盘进行交互,包括文件读写、目录操作、文件系统监控等。以下是常见的实现方法:
文件读写操作
使用 java.io 和 java.nio 包中的类进行文件读写:

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.BufferedReader;
// 写入文件
File file = new File("example.txt");
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
writer.write("Hello, World!");
}
// 读取文件
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
使用 NIO(New I/O)包
java.nio.file 提供了更现代的文件操作方式:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
Path path = Paths.get("example.txt");
// 写入文件
Files.write(path, "Hello, NIO!".getBytes());
// 读取文件
List<String> lines = Files.readAllLines(path);
lines.forEach(System.out::println);
目录操作
创建、删除和遍历目录:

import java.io.File;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
// 创建目录
File dir = new File("mydir");
dir.mkdir();
// 遍历目录
Path dirPath = Paths.get("mydir");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dirPath)) {
for (Path entry : stream) {
System.out.println(entry.getFileName());
}
}
文件属性操作
获取和修改文件属性:
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
Path filePath = Paths.get("example.txt");
BasicFileAttributes attrs = Files.readAttributes(filePath, BasicFileAttributes.class);
System.out.println("Creation time: " + attrs.creationTime());
System.out.println("Size: " + attrs.size());
// 修改文件时间
Files.setLastModifiedTime(filePath, FileTime.fromMillis(System.currentTimeMillis()));
文件系统监控
使用 WatchService 监控文件系统变化:
import java.nio.file.*;
Path dir = Paths.get("mydir");
WatchService watchService = FileSystems.getDefault().newWatchService();
dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE);
WatchKey key;
while ((key = watchService.take()) != null) {
for (WatchEvent<?> event : key.pollEvents()) {
System.out.println("Event kind: " + event.kind() + ". File affected: " + event.context());
}
key.reset();
}
注意事项
- 使用
try-with-resources语句确保资源正确关闭。 - 处理
IOException以应对可能的文件操作错误。 - 对于大文件,使用缓冲流或
NIO以提高性能。 - 考虑文件路径的跨平台兼容性,使用
Paths.get()或File.separator。






