数据文件: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,方便使用
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>
知道工具类了,那代码写起来就简单了。网上模板到处都是。