本文目录导读:

- 使用 File.length() 方法(最常用)
- 使用 Files.size() 方法(Java 7+)
- 使用 FileChannel.size() 方法
- 获取目录大小(递归计算)
- 完整的工具类示例
- 注意事项
- 推荐使用
在Java中获取文件大小有多种方法,以下是常用的几种方式:
使用 File.length() 方法(最常用)
import java.io.File;
public class GetFileSizeExample {
public static void main(String[] args) {
File file = new File("test.txt");
if (file.exists()) {
long bytes = file.length();
System.out.println("文件大小(字节):" + bytes);
System.out.println("文件大小(KB):" + bytes / 1024.0);
System.out.println("文件大小(MB):" + bytes / (1024.0 * 1024));
} else {
System.out.println("文件不存在");
}
}
}
使用 Files.size() 方法(Java 7+)
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class GetFileSizeNio {
public static void main(String[] args) throws IOException {
Path path = Paths.get("test.txt");
if (Files.exists(path)) {
long bytes = Files.size(path);
System.out.println("文件大小(字节):" + bytes);
// 格式化显示
String formattedSize = formatSize(bytes);
System.out.println("格式化的文件大小:" + formattedSize);
}
}
// 格式化文件大小显示
public static String formatSize(long bytes) {
if (bytes < 1024) {
return bytes + " B";
} else if (bytes < 1024 * 1024) {
return String.format("%.2f KB", bytes / 1024.0);
} else if (bytes < 1024 * 1024 * 1024) {
return String.format("%.2f MB", bytes / (1024.0 * 1024));
} else {
return String.format("%.2f GB", bytes / (1024.0 * 1024 * 1024));
}
}
}
使用 FileChannel.size() 方法
import java.io.File;
import java.io.FileInputStream;
import java.nio.channels.FileChannel;
public class GetFileSizeChannel {
public static void main(String[] args) {
File file = new File("test.txt");
try (FileInputStream fis = new FileInputStream(file);
FileChannel channel = fis.getChannel()) {
long bytes = channel.size();
System.out.println("文件大小(字节):" + bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
}
获取目录大小(递归计算)
import java.io.File;
public class GetDirectorySize {
public static void main(String[] args) {
File directory = new File("myFolder");
if (directory.exists() && directory.isDirectory()) {
long totalSize = getDirectorySize(directory);
System.out.println("目录总大小:" + totalSize + " 字节");
}
}
public static long getDirectorySize(File dir) {
long size = 0;
if (dir.isDirectory()) {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile()) {
size += file.length();
} else if (file.isDirectory()) {
size += getDirectorySize(file);
}
}
}
}
return size;
}
}
完整的工具类示例
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.DecimalFormat;
public class FileSizeUtils {
// 获取文件大小(字节)
public static long getFileSize(String filePath) {
File file = new File(filePath);
if (file.exists() && file.isFile()) {
return file.length();
}
return 0;
}
// 格式化为可读的大小
public static String formatFileSize(long size) {
if (size <= 0) return "0 B";
final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"};
int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
DecimalFormat df = new DecimalFormat("#,##0.#");
return df.format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
// 获取多个文件的总大小
public static long getTotalSize(String... filePaths) {
long total = 0;
for (String path : filePaths) {
total += getFileSize(path);
}
return total;
}
public static void main(String[] args) {
String filePath = "test.txt";
long bytes = getFileSize(filePath);
System.out.println("文件大小:" + bytes + " 字节");
System.out.println("格式化大小:" + formatFileSize(bytes));
// 获取多个文件总大小
long total = getTotalSize("file1.txt", "file2.txt", "file3.txt");
System.out.println("总大小:" + formatFileSize(total));
}
}
注意事项
- 返回值单位:所有方法返回的都是字节(bytes)大小
- 文件不存在:
File.length()返回 0,Files.size()抛出异常 - 性能:
File.length()最快,Files.size()次之 - 大文件:
File.length()返回long类型,最大支持 9EB - 文件锁定:
FileChannel.size()可以获取被其他进程锁定的文件大小
推荐使用
- 简单场景:使用
File.length() - Java 7+:使用
Files.size() - 需要格式化显示:结合
formatFileSize()方法 - 获取目录大小:使用递归方法
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播