Java文件操作

数据文件:CSV

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本

csv文件,常用的是英文逗号 ,  进行分割的文本文件,可以用 Excel打开,或者记事本等软件打开。

Java 操作CSV文件包:

        <dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
		</dependency>

读文件:

List<String> recordLines = FileUtils.readLines(new File(csvFile), "UTF-8");

读取的每行记录都是用 分隔符 , 连接的,所以需求 split 获得各个不同的字段。

写文件:

FileUtils.write(outFile,c1+","+c2+","+c3+","+c4+"\n","UTF-8",true);

写文件时,不同的字段 需要用 分隔符 , 连接, 换行时 拼接 \n 即可

Excel文件:xlsx

xlsx是Microsoft Office EXCEL 2007/2010/2013/2016/2019文档的扩展名。其基于Office Open XML标准的压缩文件格式取代了其以前专有的默认文件格式,在传统的文件名扩展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)

如果用记事本打开 xlsx 文件,会显示乱码,可见,xlsx不是文本格式。

如果把 xlsx 文件的后缀改成 zip,那么可以用压缩软件打开,可以发现其中是 OOXML

Apache POI

Apache POI - the Java API for Microsoft Documents

Apache POI - the Java API for Microsoft Documents

Apache POI 可以操作微软的各种文档:Excel、Word、PPT、PDF等等

easypoi

这个包是对 原生POI 进行了封装,提供了简易操作的API,方便使用

EasyPoi教程_V1.0

easyexcel

阿里提供的操作Excel的工具包

GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具

spring boot完成文件上传/下载

1. 上传

spring boot 封装了 文件上传的复杂操作,只需要像写 普通的接口一样就可以 完成 文件数据的接收。 接收到文件的后续处理,需要根据实际需求来处理。

@PostMapping("/upload")
public CommonResponse upload(MultipartFile file) throws Exception{}

2. 下载

    @GetMapping("/download")
    public void download(HttpServletRequest request, HttpServletResponse response){
        try {
            try(InputStream templateFileStream = ClassLoader.getSystemResourceAsStream("下载的文件.xlsx"); OutputStream responseOutputStream = response.getOutputStream()) {
                response.setContentType("text/html;charset=utf-8");
                response.setHeader("Content-Disposition", "attachment; filename=下载的文件.xlsx");
                // common-io 包里的工具类
                IOUtils.copy(templateFileStream, responseOutputStream);
                responseOutputStream.flush();
            }
        } catch (IOException e) {
            log.error("文件下载失败:",e);
        }
    }

注意事项:

在下载文件的 响应流设置的 header中的文件名,需要进行编码才行:

URLEncoder.encode("下载的文件.xlsx", "UTF-8")

文件在spring boot的位置

将spring boot jar包解压:

BOOT-INF

     -----classes

            ------com   // java文件下的 项目代码

            ------static // resources 文件下的 资源文件,静态文件所在路径

            ------application.yml //resources 文件下的 配置文件

     -----lib  // 项目依赖jar包

     -----classpath.idx

META-INF

     -----maven  //项目pom文件

     -----MANIFEST.MF // 项目信息

org

     -----springframework

            ------boot

                    ------loader  // spring boot 中的class文件

                            ------JarLauncher.class

BOOT-INF

     -----classes

            ------com   // java文件下的 项目代码

            ------static // resources 文件下的 资源文件

            ------application.yml //resources 文件下的 配置文件

     -----lib  // 项目依赖jar包

     -----classpath.idx

META-INF

     -----maven  //项目pom文件

     -----MANIFEST.MF // 项目信息

org

     -----springframework

            ------boot

                    ------loader  // spring boot 中的class文件

                            ------JarLauncher.class

从上述可知,项目静态资源路径是 BOOT-INF/classes/static/xxx

有三种方式:

第一种: 获取的资源对象为: sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream

ClassLoader.getSystemResourceAsStream("BOOT-INF/classes/static/xxxx.xlsx");

ClassPathResource cpr = new ClassPathResource("BOOT-INF/classes/static/file.xlsx");

InputStream is= cpr .getInputStream();

第二种:获取的资源对象为:org.springframework.boot.loader.data.RandomAccessDataFile$DataInputStream 

ClassPathResource cpr = new ClassPathResource("static/file.xlsx");
InputStream is= cpr .getInputStream();

文件上传至FTP服务器

文件操作 常常涉及到 文件上传,比如上传到 sftp服务器 或者 ftp服务器。需要注意的是,sftp服务器和 ftp服务器 可不一样。

sftp操作工具类:

        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>

ftp操作工具类:

        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.8.0</version>
        </dependency>

知道工具类了,那代码写起来就简单了。网上模板到处都是。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值