05 文件操作
一、获取文件大小
1、通过file的length()方法获取;
二、文件大小转换
bytes--> KB,MB,GB,TB
/** * 转换文件大小 */ public static String formatFileSize(long fileSize) { DecimalFormat df = new DecimalFormat("#.00"); String fileSizeString = ""; String wrongSize = "0B"; if (fileSize == 0) { return wrongSize; } if (fileSize < 1024) { fileSizeString = df.format((double) fileSize) + "B"; } else if (fileSize < 1048576) { fileSizeString = df.format((double) fileSize / 1024) + "KB"; } else if (fileSize < 1073741824) { fileSizeString = df.format((double) fileSize / 1048576) + "MB"; } else if (fileSize < 1099511627776L){ fileSizeString = df.format((double) fileSize / 1073741824) + "GB"; }else { fileSizeString = df.format((double) fileSize / 1099511627776L) + "TB"; } return fileSizeString; }
三、OOM问题
首先要排查SpringMvc的配置文件中对文件上传大小的限制是否过于小,未达到要求。
如果排查过配置文件没有问题后,那就去排查是否是tomcat的JVM内存设置过小导致内存溢出。
域名设置的大小
https://blog.csdn.net/Acompanys/article/details/105434370
其他文章:
四、判断文件类型
1. 通过后缀名,如exe,jpg,bmp,rar,zip等等。
2. 通过上传请求的Content-type来判断。
3. 通过文件头,根据文件流中特定的一些字节标识来区分不同类型的文件。
对比:1和2的方式很容易被篡改,安全性低;3安全性更高
五、读取文件
5.1 读到内存中
// 方法一:Files 是最简洁直接的方式,一次性将文件内容全部读入内存,适用于文件大小适中时 Files.readAllBytes(Paths.get("path/to/your/file.txt")) // 方法二:BufferedReader 和 Scanner 适用于逐行读取文件内容,尤其是当文件较大时,避免一次性读入内存 //方法三:Apache Commons IO 库的 FileUtils工具类 byte[] fileContent = FileUtils.readFileToByteArray(new File("path/to/your/file.txt"));
5.2 读到缓存中(BufferReader),从缓存中取数据
private String readFile(String file) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader (file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try {
while((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
return stringBuilder.toString();
} finally {
reader.close();
}
}
优点:比需要的时候再去文件中读取要快一些
5.3 使用工具类
public static List<String> readAllLines(Path path) throws IOException { return readAllLines(path, StandardCharsets.UTF_8); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!