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

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

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

该系列为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();
    }

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

编辑人:程序幻境

码字不易,不喜勿踩

相关推荐

让Mac也能读取Android设备文件(mac系统能读取win的文件么)

由于苹果的iOS和谷歌的Android系统属于竞争关系,因此苹果的电脑系统MacOSX并不支持MTP协议,这就使得通过USB将Android设备连接到Mac电脑上无法识别,更别说读取里面的文件了。...

抛弃Windows吧!谷歌推免费Chrome系统,一个U盘就搞定

在目前的个人电脑上,最主流的系统当然是Windows,不过除了Windows之外,我们也可以选择购买苹果的电脑,使用苹果的MacOS系统。不过除了苹果和微软的系统之外,实际上谷歌也有自己用于个人电脑...

安卓版Apple Music应用正式上架Google Play

IT之家讯11月11日消息,苹果今天正式推出了安卓版AppleMusic应用(测试版),用户可在谷歌应用商店GooglePlay进行下载。AppleMusic最初只提供给Mac、iPhone和...

Mac 基于HTTP方式访问下载共享文件,配置共享服务器

方法一:使用Python的SimpleHTTPServer进行局域网文件共享Mac自带Python,所以不需要安装其他软件,一条命令即可1):进入需要共享的文件夹,如Public文件夹cd/Us...

谷歌 Gmail 现可设置为 iOS 14/iPadOS 14 默认邮件应用

IT之家9月22日消息据外媒MacRumors报道,苹果iOS14与iPadOS14允许用户将第三方应用设置为iPhone和iPad的默认浏览器应用。目前,用户还可以将第三方...

终于免费了!谷歌地球专业版下载(谷歌地球专业版多少钱)

IT之家(www.ithome.com):终于免费了!谷歌地球专业版下载IT之家讯1月31日消息,谷歌地球专业版GoogleEarthPro现在完全免费了。在此之前,要使用这款专业版的谷歌地球需要...

谷歌计划将于11月发布64位Mac版Chrome

投稿by:hnn072来源:威锋网PostTime:2014-09-1523:51:55以下为文章全文:威锋网9月15日消息,日前,谷歌公司在官方博客中正式宣布,谷歌将在今年11月发布的...

Google首次推出beta版的64位Mac Chrome浏览器

在宣布Windows版的64位Chrome进入稳定版(Chrome37)2天之后,Google刚刚又发布38版的Chromebeta版,除了增加新的用户档案切换界面并引入G...

YouTube应用下载全攻略:安卓、iOS及视频下载指南

#哪些网站帮你打开了新世界的大门?#YouTube是全球最大的视频分享平台,拥有数十亿用户。它允许用户上传、分享和观看视频,涵盖娱乐、教育、新闻、音乐、博客、游戏等各类视频。通常,您可以使用You...

MaterialDesign来袭!iOS谷歌浏览器更新!

今日,谷歌发布了最新的iOS版Chrome浏览器应用升级,在新版本中该应用添加了最新的MaterialDesign界面,并增加了在iOS设备和Mac中快速无缝切换浏览内容的Handoff特性支持。最...

谷歌为Canary/Dev分支Mac版Chrome浏览器64位支持

【巴士速递·移动情报站】上周,谷歌为Windows7和8系统用户推出了64位版本的Chrome浏览器Beta测试版。现在,谷歌悄悄的为Canary和Dev分支Mac版Chrome浏览器增加了64位支...

谷歌发布64位Chrome for Mac 首个测试版

投稿by:水木之向来源:威锋网PostTime:2014-08-2921:52:52以下为文章全文:威锋网8月29日消息,在发布64位ChromeforWindows之后,谷歌日...

Google Stadia首发支持设备中确认有Pixel 4和Pixel 2系列

2019-10-3110:20谷歌今天宣布扩充GoogleStadia的首发支持设备规模,继Pixel3系列、Pixel3a系列之外还添加了Pixel4系列和Pixel2系列四款机型。据...

64位谷歌浏览器Chrome 11月登陆苹果OS X

IT之家(www.ithome.com):64位谷歌浏览器Chrome11月登陆苹果OSX谷歌将于11月正式发布非beta版的、苹果OSX系统的64位谷歌浏览器,谷歌于一个月前曾推出beta版的...

外媒:谷歌推出了搭载苹果M1芯片Mac的Chrome版本

据外媒TheVerge消息,谷歌日前为苹果的ArmMacs发布了Chrome的本地版本。不过该版本原本是在周二开始推出,但由于意外崩溃而暂停了。Chrome产品经理MarkChang表示,谷歌计...