File 与 MultipartFile 相互转换;计算文件夹的最深层数;递归删除某个文件夹;File对象转为InputStream_multipartfile fileinputstream-程序员宅基地

技术标签: 工具类  java  学习笔记  

File --> InputStream

InputStream in = new FileInputStream(file);

 

MultipartFile对象 转换为 File 对象

/**
     * @Author: zcm
     * @DateTime: 2021/10/12 下午3:15
     * @Params: [org.springframework.web.multipart.MultipartFile]
     * @Return java.io.File
     * @Description: 将 MultipartFile对象 转换为 File 对象
     */
    public static File multipartFileToFile(MultipartFile file) throws IOException {
        File toFile = null;
        if (file.equals("") || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(file.getOriginalFilename());
            inputStreamToFile(ins, toFile);
            ins.close();
        }
        return toFile;
    }
    /**
     * @Author: zcm
     * @DateTime: 2021/10/12 下午3:00
     * @Params: [java.io.InputStream, java.io.File]
     * @Return void
     * @Description: 获取流文件
     */
    private static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 将File对象 转为 MultipartFile

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import java.io.*;
import java.nio.file.Files;
import java.util.LinkedList;
import java.util.Queue;

/**
     * @Author: zcm
     * @DateTime: 2021/10/12 下午3:01
     * @Params: [java.io.File]
     * @Return org.springframework.web.multipart.MultipartFile
     * @Description: 将File对象 转为 MultipartFile。
     * 转换出来后,注意对比一下,原生的MultipartFile 与 转换出来的 MultipartFile 的
     * 各个属性,因为计算文件幻数的时候,用的是MultipartFile。
     * MultipartFile不止一个实现类,File对象转MultipartFile时,注意看调试时 MultipartFile的实现类
     */
    public static MultipartFile fileToMultipartFile(File file) {
        FileItem fileItem = createFileItem(file);
        MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
        return multipartFile;
    }

    /**
     * @Author: zcm
     * @DateTime: 2021/10/12 下午3:12
     * @Params: [java.io.File]
     * @Return java.lang.String
     * @Description: 获取 MultipartFile 对象的 ContentType属性
     * 就是文件内容的类型
     */
    public static String getContentType(File file) {
        String s = null;
        try {
            s = Files.probeContentType(file.toPath());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return s;
    }

    /**
     * @Author: zcm
     * @DateTime: 2021/10/12 下午3:14
     * @Params: [java.io.File]
     * @Return org.apache.commons.fileupload.FileItem
     * @Description: 生成 new CommonsMultipartFile(fileItem) 的 FileItem
     */
    private static FileItem createFileItem(File file) {
        FileItemFactory factory = new DiskFileItemFactory(10240, null);
        String contentType = FileUtils.getContentType(file);
        FileItem item = factory.createItem("file", contentType, true, file.getName());
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        try {
            FileInputStream fis = new FileInputStream(file);
            OutputStream os = item.getOutputStream();
            while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return item;
    }

计算文件夹最深层数

/**
     * @Author: zcm
     * @DateTime: 2021/10/11 下午8:09
     * @Params: [java.io.File, int]
     * @Return void
     * @Description: 计算文件夹的最大深度,如果超过 maximumOfFileTreeDepth 层,就抛出异常
     */
    private static int  maximumOfFileTreeDepth = 5;
    public static void checkFileTreeDepth(File file, int depth){
        File[] files = file.listFiles();
        for(int i = 0; i < files.length; i++){
            File f = files[i];
            if (f.isDirectory()){
                depth++;
                if (depth < FileUtils.maximumOfFileTreeDepth){
                    checkFileTreeDepth(f, depth);
                }else{
                    throw new RuntimeException("文件层数太深了!");
                }
                depth--;
            }
        }
        return ;
    }

递归删除某个文件夹

/**
     * @Author: zcm
     * @DateTime: 2021/10/11 下午8:14
     * @Params: [java.lang.String]
     * @Return void
     * @Description: 递归删除这个路径下的所有文件对象
     */
    public static void deleteAllFile(String path){
        File all = new File(path);		//获取其file对象
        File[] fs = all.listFiles();	//遍历path下的文件和目录,放在File数组中
        for(File f:fs){					//遍历File[]数组
            if(!f.isDirectory()){
                f.delete();
            }else {
                deleteAllFile(f.getAbsolutePath());
            }
        }
        all.delete();
    }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37905259/article/details/120739175

智能推荐

[AMBA]AXI原子操作(AXI Atomic Operation)-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏25次。AXI原子操作(AXI Atomic Operation)。​原子操作就是不可中断的一个或者一系列操作, 也就是不会被线程调度机制打断的操作, 运行期间不会有任何的上下文切换(context switch)。我们为什么要关注原子操作呢?如果确定某个操作是原子的, 就不用为了去保护这个操作而加上会耗费昂贵性能开销的锁,借助原子操作可以实现互斥锁(mutex),借助互斥锁, 可以实现让更多的操作变成原子操作。 前言:一、原子操作的基本概念..._axi原子操作

Ps 滤镜:球面化-程序员宅基地

文章浏览阅读189次。Ps菜单:滤镜/扭曲/球面化Filter/Distort/Spherize球面化 Spherize滤镜可用于创造图像的球面或凹面效果。常用来制作图像的视觉弯曲,模拟三维效果,或者创造特殊的艺术效果。“球面化”滤镜通过数学算法调整图像的像素,使图像中心区域凸起或凹陷,从而在视觉上产生图像向外凸出或向内凹陷的效果。根据选择的“模式”,还可控制只沿水平方向或沿垂直方向进行拉伸或挤压。◆◆◆主要用途1...

MFC一一MFCPropertyGridCtrl控件使用_cmfcpropertygridctrl xml-程序员宅基地

文章浏览阅读6.3k次。MFC属性网格控件,控件样式如下所示: 通常其与Tree Control结合使用,如上图中的左边部分所述,点击左边树结点,对应右边插入相应的MFCPropertyGridCtrl控件,如下我们将介绍MFCPropertyGridCtrl控件public: CMFCPropertyGridCtrl m_wndPropList;一、在窗口创建前,创建属性表格并添加相应的属性设置int CDi..._cmfcpropertygridctrl xml

Layui在select下拉框中动态添加选项_layui select 动态加载-程序员宅基地

文章浏览阅读3.6k次。话不多说,直接上代码(注意项下方说明)HTML:<form class="layui-form" action=""> <div class="layui-input-inline> <select name="modules" lay-verify="required" lay-search="" lay-filter="test" id="test"> // 选项动态放置 </select>_layui select 动态加载

JS-正则表达式-程序员宅基地

文章浏览阅读98次。正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作。

Git速查手册_如何查看git手册-程序员宅基地

文章浏览阅读1.3k次。1024了,程序猿们节日快乐,简单整理个供小白使用的git速查手册,之后有时间再完善,其实一会一些简单的操作平时工作就够用了(只要你别闹!一般不会有什么大问题),哈哈哈文章目录Git的组成git--相关配置git--查看远程库信息git--初始化仓库git--将文件提交到暂存区git--将暂存区文件提交到本地仓库git--查看仓库当前状态git--比较文件异同git--查看历史记录git--代码..._如何查看git手册

随便推点

如何查看SAP表变更记录_sap ps 项目更改记录查询-程序员宅基地

文章浏览阅读2.2k次。在运维的过程中,我们有时需要去追踪一些表的变更记录,如采购订单的单价更新,采购订单的入库标识何时更新等,以便我们可以更快的追踪定位到问题所在,本章给大家介绍下如何追踪系统中表的变更记录。根据表名获取更改文档对象,表:TCDOB。_sap ps 项目更改记录查询

超链接打不开是什么原因html,超链接打不开是什么原因-程序员宅基地

文章浏览阅读2.4w次。演示工具:电脑型号:华硕adolbook14 2020系统版本:windows10具体原因及解决方法:1、如果是链接到本地文件的超链接无法打开,可能是相对路径和绝对路径的问题,绝对地址,是有完全的路径,如果超链接的路径写错了,就无法打开。2、检查一下被链接的文件是否被改变了存储位置,如果是,需重新设置一次。3、如果链接的是局域网上其它电脑中的文档,可能是被链接的电脑网络设置出了问题,先检查能否链接...

搭建网站服务基于openlab_那些可以在openlab网站获得支持-程序员宅基地

文章浏览阅读156次。1.基于域名www.openlab.com可以访问网站内容 welcome to openlab。#mount /dev/sr0 /mnt#yum install httpd -y2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student网站访问学生信息,www.openlab.com/data网站访问教学资料,www.openlab.com/money网站访问缴费网站。(1)学生信息网站只能song和tian两个人访问,其他用户不_那些可以在openlab网站获得支持

idea常用插件_idea打印sql语句插件-程序员宅基地

文章浏览阅读1.9k次。当我们在写代码的时候,其实很多基础的代码都可以直接生成的,个人比较喜欢用easycode,该插件可以自己自定义生成基础的增删改查,有提供的模板,但个人建议最好还是自己写个模板,能符合自己的项目。定制性更强,而且该代码能直接生成到项目中选择连接的数据库,右击使用。_idea打印sql语句插件

win10 锁屏时间无法设置 解决方法_注册表修改锁屏时间win10-程序员宅基地

文章浏览阅读5.6k次。win10 锁屏时间无法设置 解决方法问题描述:解决方案:标题问题描述:win10 无法修改屏幕保护时间解决方案:标题将下段代码复制进txt,保存成reg,然后运行。dword:0000003C,为设置的时间16进制秒数Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]“InactivityTimeoutSecs”=d_注册表修改锁屏时间win10

无人机基础知识:多旋翼无人机自动控制原理与算法_无人机协调行为算法怎么学习-程序员宅基地

文章浏览阅读5.4k次,点赞7次,收藏82次。无人机(Unmanned Aerial Vehicle),指的是一种由动力驱动的、无线遥控或自主飞行、机上无人驾驶并可重复使用的飞行器,飞机通过机载的计算机系统自动对飞行的平衡进行有效的控制,并通过预先设定或飞机自动生成的复杂航线进行飞行,并在飞行过程中自动执行相关任务和异常处理。在前面的文章中,我们分析了多旋翼无人机的飞行原理及飞行模式。链接在最后的飞行模式中, 除了纯手动模式外,简单解释了其它模式如姿态模式的原理,其中一笔带过就是形成了闭环控制,所以稳定。_无人机协调行为算法怎么学习

推荐文章

热门文章

相关标签