我来为您提供一个完整的FileUtils工具类的案例,包含文件操作的常见功能:

FileUtils工具类完整案例
基础文件操作
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.*;
import java.util.List;
import java.util.stream.Collectors;
public class FileUtils {
/**
* 读取文件内容为字符串
*/
public static String readFileToString(String filePath) throws IOException {
return new String(Files.readAllBytes(Paths.get(filePath)));
}
/**
* 读取文件内容为字符串(指定编码)
*/
public static String readFileToString(String filePath, Charset charset) throws IOException {
return new String(Files.readAllBytes(Paths.get(filePath)), charset);
}
/**
* 读取文件所有行
*/
public static List<String> readLines(String filePath) throws IOException {
return Files.readAllLines(Paths.get(filePath));
}
/**
* 写入字符串到文件
*/
public static void writeStringToFile(String filePath, String content) throws IOException {
Files.write(Paths.get(filePath), content.getBytes());
}
/**
* 追加字符串到文件
*/
public static void appendStringToFile(String filePath, String content) throws IOException {
Files.write(Paths.get(filePath), content.getBytes(),
StandardOpenOption.APPEND, StandardOpenOption.CREATE);
}
}
文件复制、移动和删除
public class FileCopyMoveUtils {
/**
* 复制文件
*/
public static void copyFile(String sourcePath, String destPath) throws IOException {
Path source = Paths.get(sourcePath);
Path dest = Paths.get(destPath);
Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING);
}
/**
* 移动文件
*/
public static void moveFile(String sourcePath, String destPath) throws IOException {
Path source = Paths.get(sourcePath);
Path dest = Paths.get(destPath);
Files.move(source, dest, StandardCopyOption.REPLACE_EXISTING);
}
/**
* 删除文件
*/
public static boolean deleteFile(String filePath) throws IOException {
return Files.deleteIfExists(Paths.get(filePath));
}
/**
* 递归删除目录及其内容
*/
public static void deleteDirectory(File directory) throws IOException {
if (directory.exists()) {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
file.delete();
}
}
}
directory.delete();
}
}
/**
* 复制目录及其内容
*/
public static void copyDirectory(File sourceDir, File destDir) throws IOException {
if (!sourceDir.exists() || !sourceDir.isDirectory()) {
throw new IOException("源目录不存在");
}
if (!destDir.exists()) {
destDir.mkdirs();
}
File[] files = sourceDir.listFiles();
if (files != null) {
for (File file : files) {
File destFile = new File(destDir, file.getName());
if (file.isDirectory()) {
copyDirectory(file, destFile);
} else {
copyFile(file.getAbsolutePath(), destFile.getAbsolutePath());
}
}
}
}
}
文件搜索和过滤
import java.util.ArrayList;
import java.util.List;
public class FileSearchUtils {
/**
* 查找指定扩展名的文件
*/
public static List<File> findFilesByExtension(File directory, String extension) {
List<File> result = new ArrayList<>();
if (!directory.exists() || !directory.isDirectory()) {
return result;
}
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
result.addAll(findFilesByExtension(file, extension));
} else if (file.getName().endsWith(extension)) {
result.add(file);
}
}
}
return result;
}
/**
* 根据文件名关键字搜索文件
*/
public static List<File> findFilesByName(File directory, String keyword) {
List<File> result = new ArrayList<>();
if (!directory.exists() || !directory.isDirectory()) {
return result;
}
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
result.addAll(findFilesByName(file, keyword));
} else if (file.getName().contains(keyword)) {
result.add(file);
}
}
}
return result;
}
/**
* 获取目录下所有文件(递归)
*/
public static List<File> getAllFiles(File directory) {
List<File> result = new ArrayList<>();
if (!directory.exists() || !directory.isDirectory()) {
return result;
}
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
result.addAll(getAllFiles(file));
} else {
result.add(file);
}
}
}
return result;
}
}
文件比较和校验
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class FileCompareUtils {
/**
* 计算文件的MD5值
*/
public static String getMD5(File file) throws IOException, NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
try (InputStream is = new FileInputStream(file)) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
md.update(buffer, 0, bytesRead);
}
}
byte[] digest = md.digest();
return bytesToHex(digest);
}
/**
* 计算文件的SHA-256值
*/
public static String getSHA256(File file) throws IOException, NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
try (InputStream is = new FileInputStream(file)) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
md.update(buffer, 0, bytesRead);
}
}
byte[] digest = md.digest();
return bytesToHex(digest);
}
/**
* 比较两个文件是否相同
*/
public static boolean filesAreEqual(File file1, File file2) throws IOException, NoSuchAlgorithmException {
if (file1.length() != file2.length()) {
return false;
}
return getMD5(file1).equals(getMD5(file2));
}
/**
* 字节数组转十六进制字符串
*/
private static String bytesToHex(byte[] bytes) {
StringBuilder result = new StringBuilder();
for (byte b : bytes) {
result.append(String.format("%02x", b));
}
return result.toString();
}
}
使用示例
public class FileUtilsDemo {
public static void main(String[] args) {
try {
// 1. 写入文件
FileUtils.writeStringToFile("test.txt", "Hello, World!");
// 2. 追加内容
FileUtils.appendStringToFile("test.txt", "\nThis is appended text.");
// 3. 读取文件
String content = FileUtils.readFileToString("test.txt");
System.out.println("文件内容: " + content);
// 4. 复制文件
FileCopyMoveUtils.copyFile("test.txt", "copy.txt");
System.out.println("文件复制成功");
// 5. 移动文件
FileCopyMoveUtils.moveFile("copy.txt", "moved.txt");
System.out.println("文件移动成功");
// 6. 查找文件
File directory = new File(".");
List<File> txtFiles = FileSearchUtils.findFilesByExtension(directory, ".txt");
System.out.println("找到的txt文件: " + txtFiles.size() + " 个");
// 7. 计算MD5
File testFile = new File("test.txt");
String md5 = FileCompareUtils.getMD5(testFile);
System.out.println("文件的MD5值: " + md5);
// 8. 删除文件
FileCopyMoveUtils.deleteFile("moved.txt");
System.out.println("文件删除成功");
// 9. 读取所有行
List<String> lines = FileUtils.readLines("test.txt");
lines.forEach(System.out::println);
// 清理
FileCopyMoveUtils.deleteFile("test.txt");
} catch (IOException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
高级功能示例
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class AdvancedFileUtils {
/**
* 保存对象到文件(使用ObjectOutputStream)
*/
public static void saveObjectToFile(Object object, String filePath) throws IOException {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath))) {
oos.writeObject(object);
}
}
/**
* 从文件读取对象
*/
public static Object readObjectFromFile(String filePath) throws IOException, ClassNotFoundException {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath))) {
return ois.readObject();
}
}
/**
* 缓存文件内容带过期时间
*/
public static class CachedFile {
private String content;
private LocalDate cacheDate;
private final String filePath;
public CachedFile(String filePath) {
this.filePath = filePath;
}
public String getContent() throws IOException {
if (content == null || !isCacheValid()) {
content = FileUtils.readFileToString(filePath);
cacheDate = LocalDate.now();
}
return content;
}
private boolean isCacheValid() {
if (cacheDate == null) return false;
return cacheDate.plusDays(1).isAfter(LocalDate.now());
}
}
/**
* 文件统计信息
*/
public static class FileStats {
public static void printStats(File file) {
System.out.println("文件路径: " + file.getAbsolutePath());
System.out.println("文件大小: " + formatSize(file.length()));
System.out.println("最后修改时间: " + new java.util.Date(file.lastModified()));
System.out.println("是否可读: " + file.canRead());
System.out.println("是否可写: " + file.canWrite());
System.out.println("是否目录: " + file.isDirectory());
}
private static String formatSize(long bytes) {
if (bytes < 1024) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(1024));
String pre = "KMGTPE".charAt(exp - 1) + "";
return String.format("%.2f %sB", bytes / Math.pow(1024, exp), pre);
}
}
}
这个FileUtils工具类提供了文件操作中最常用的功能,包括:
- 读写文件
- 复制、移动、删除
- 搜索、过滤
- 比较、校验
- 序列化
- 缓存
- 统计信息
您可以根据实际需求选择相应的功能使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播