百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 软件资讯 > 正文

100个Java工具类之6:文件的上传与下载

ninehua 2024-11-17 19:50 38 浏览

该系列为java工具类系列,主要展示100个常用的java工具类。

本系列工具类的核心目的主要有三点:

1,以便他用:提供可用的Java工具类,方便大家使用,避免重复造轮子

2,个人记录:作为个人记录,同时督促自己学习总结

3,为初学者提供思路,相互交流,共同进步

当然,很多细节部分经不起推敲,如存在部分代码不规范、注释不详细、格式不统一等问题,还望阅读者多多包涵,多提意见。

本文目录:

文件的上传(根据源文件路径上传)

文件的上传(根据MultipartFile上传)

文件的下载


文件的上传,本文根据上传参数的不通介绍两种上传方式,分别是根据源文件路径和MultipartFile对象进行上传。

这两种方式基本上是类似的,因为可以获取或生成文件流,并由此在文件路径下生成新文件

此代码中没有删除源文件,使用者可根据实际需求来修改代码。

一、文件的上传(根据源文件路径上传)

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;

/**
 * @Author 程序幻境
 * @Date 2022/11/20
 * @Version 1.0
 */
public class FtpUtil {

    public static void main(String[] args) {
        uploadFile("C:\\Users\\CXHJ\\Desktop\\1.txt","C:\\Users\\CXHJ\\Desktop\\1","1.txt");
    }

    /**
     * 上传文件
     *
     * @param srcFilePath 源文件全路径(包含文件名称)
     * @param filePath  上传路径
     * @param fileName 文件名(目标文件名称,一般和源文件同名)
     */
    public static String uploadFile(String srcFilePath, String filePath, String fileName) {
        try {
            //根据源文件路径,创建文件流
            File file = new File(srcFilePath);
            InputStream in = new FileInputStream(file);
            //新建目标文件
            File desFile = mkdirFiLe(filePath, fileName);
            //源文件写入目标文件
            FileUtils.copyInputStreamToFile(in, desFile);
            //关流
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileName;
    }

    /**
     * 判断路径是否存在,如果不存在,创建此路径
     *
     * @param filePath      文件路径
     * @param fileName 文件名
     * @throws IOException
     */
    public static File mkdirFiLe(String filePath, String fileName) throws IOException {
        File file = new File(filePath, fileName);
        if (!file.exists()) {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            file.createNewFile();
        }
        return file;
    }
}

二、文件的上传(根据根据MultipartFile上传)

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;

/**
 * @Author 程序幻境
 * @Date 2022/11/20
 * @Version 1.0
 */
public class FtpUtil {

    public static void main(String[] args) {
        uploadFile("C:\\Users\\CXHJ\\Desktop\\1.txt","C:\\Users\\CXHJ\\Desktop\\1","1.txt");
    }

    /**
     * 上传文件
     *
     * @param file     文件对象
     * @param filePath 上传路径
     * @param fileName 文件名
     */
    public static String uploadFile(MultipartFile file, String filePath, String fileName) {
        try {
            //获取文件流
            InputStream in = file.getInputStream();
            //新建目标文件
            File desFile = mkdirFiLe(filePath, fileName);
            //源文件写入目标文件
            FileUtils.copyInputStreamToFile(in, desFile);
            //关流
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileName;
    }

    /**
     * 判断路径是否存在,如果不存在,创建此路径
     *
     * @param filePath      文件路径
     * @param fileName 文件名
     * @throws IOException
     */
    public static File mkdirFiLe(String filePath, String fileName) throws IOException {
        File file = new File(filePath, fileName);
        if (!file.exists()) {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            file.createNewFile();
        }
        return file;
    }
}

三、文件的下载

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
 
import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;

/**
     * @param filePath 文件完整路径(包括文件名和扩展名)
     * @param fileName 下载后看到的文件名
     * @return  文件名
     */
    public static void fileDownload(final HttpServletResponse response, String filePath, String fileName) throws Exception{
        File file = new File(filePath);
        byte[] data = FileUtils.readFileToByteArray(file);
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.reset();
        response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
        response.addHeader("Content-Length", "" + data.length);
        response.setContentType("application/octet-stream;charset=UTF-8");
        OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
        outputStream.write(data);
        outputStream.flush();
        outputStream.close();
        response.flushBuffer();
    }

本文仅供个人记录,大家可以借鉴,每行代码都是自己手打,亲测可直接粘贴执行,如有任何问题可在评论区提问,欢迎大家交流。

编辑人:程序幻境

码字不易,不喜勿踩

相关推荐

Java 反编译工具的使用与对比分析

前言Java反编译,一听可能觉得高深莫测,其实反编译并不是什么特别高级的操作,Java对于Class字节码文件的生成有着严格的要求,如果你非常熟悉Java虚拟机规范,了解Class字节...

Java代码混淆工具Allatori混淆jar可执行包的使用方法

Allatori简介Allatori是第二代Java混淆器,可为您的知识产权提供全方位的保护。Allatori不只是混淆,它还最小化应用程序大小,并提高速度,同时除了您和您?的团队之外,任何人...

window下将spring boot-jar添加到服务中,实现自动启动

1、下载winsw:https://github.com/winsw/winsw/releases...

idea maven 依赖包报红

有不少小伙伴遇到这个问题问我该怎么破,其实这个问题的答案在网上已经烂大街了,随便一查就一堆(其中不少是复制粘贴的且抄都抄不全,令人汗颜!),在此我记录下解决方案。解决方案如下:maven的settin...

使用 XJar 对程序 jar 包加密,防止被破解

1.新建一个空的maven项目,并在pom文件中添加:<dependencies><dependency><groupId>com.github.c...

maven 处理多版本 jar包依赖冲突

一。参考文档https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-th...

IntelliJ Idea下jar包引入失败的处理方法

IntelliJIdea下jar包引入失败的处理方法标签:IntelliJIDEAIDEA导入新项目或者更新的时候,显示“Cannotresolvesymbol'XXX‘’”,之前有...

将本地jar 批量发布到 Nexus 私服

前言在日常开发过程中,我们有遇到将项目依赖通过mvndeploy发布到自己的公司的私服,以便其他人/环境统一下载入口。但是也有一些特殊情况,比如只能拿到第三方(或甲方)的依赖jar,并不能拿到...

如何优雅替换第三方依赖中的类?

在项目中需要依赖其他第三方的jar包,但有时我们需要扩展第三方jar的功能,或者修复依赖中已知还未修复的bug,但碰到过很多种情况,第三方类库中并没有提供对应的扩展点导致无法优雅的使用继承等方法对代码...

Jarboot-一个功能强大易用的Java进程启动器

什么是JarbootJarboot是一个功能强大易用的Java进程启动器,使用jarboot可以方便的启动一批的Java进程,支持按照依赖的优先级顺序启动、进程守护、文件监控重启、进程在线调试。...

IDEA 这么设置 Maven,再也不用担心依赖下载失败了

Hello,大家好,我是楼下小黑哥。B站视频版本...

一个小技巧,Maven 打 Jar 包体积缩小100倍

大家好,我是互联网架构小马哥!为了大家能够从从项目集成的苦力活中解放出来,最近这一周,整理了两篇关于Jenkins构建、部署的文章,感兴趣的朋友可以看看:【...

还在用nohup启动java jar服务?试试强大的systemctl吧

nohup直译过来就是不挂断,要运行后台中的nohup命令,添加&(表示“and”的符号)到命令的尾部,使用nohup启动的例子:nohup/usr/bin/java-jar/dat...

推荐一款产品-防止JAVA代码反编译

VirboxProtector是深思数盾科技股份有限公司经过多年技术深耕开发的一款高强度虚拟机外壳。VirboxProtector集加密、压缩、混淆虚拟化等于一身。支持的操作系统包括Windo...

如何使用Axure制作交互文档?

编辑导语:Axure作为交互文档有着可交互、兼容性好的优势,本文作者结合亲身的实践操作,为我们分享了如何使用Axure制作交互文档。01Axure软件介绍这次团队决定使用的是Axure9版...