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

其他文章:

https://blog.csdn.net/liyantianmin/article/details/45557609?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2

四、判断文件类型

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);
    }

 

posted @   zhegeMaw  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示