文章目录
【Java基础】IO
File
File类接收路径,判断文件是否存在,若不存在则创建文件。
String IMG_PATH = "/Users/mac/Documents/project";
public void getFile(){
File file = new File(IMG_PATH);
if (!file.exists()) {
log.info("文件不存在!!!");
file.mkdir();
log.info("文件新建完成!!!");
}
}
FileInputStream
/**
* 读取文件
*/
public void inputStreamFile() throws IOException {
FileInputStream fis=null;
try {
//创建字节输入流
fis=new FileInputStream(IMG_PATH);
//创建一个长度为1024的竹筒
byte[] b=new byte[1024];
//用于保存的实际字节数
int hasRead=0;
//使用循环来重复取水的过程
while((hasRead=fis.read(b))>0){
System.out.println(">>>>>>>>>>>>>>>>"+hasRead);
}
}catch (IOException e){
log.error("读取异常"+e);
}finally {
fis.close();
}
}
FileOutputStream
/**
* 读取文件==>创建文件夹==>写出文件
*/
public void getFileReaderOutput() throws IOException{
//创建文件夹
File file = new File(MAKEDIR_TEXT_PATH);
if (!file.exists()) {
log.info("文件不存在!!!");
file.mkdir();
log.info("文件新建完成!!!");
}
FileInputStream fis=null;
FileOutputStream fos=null;
try {
//创建字节输入流
fis=new FileInputStream(TEXT_PATH);
//创建字节输出流
fos=new FileOutputStream(TEXT_PATH_NEW);
byte[] b=new byte[1024];
int hasRead=0;
//循环从输入流中取出数据
while((hasRead=fis.read(b))>0){
//每读取一次,即写入文件输入流,读了多少,就写多少。
fos.write(b,0,hasRead);
}
}catch (IOException e){
e.printStackTrace();
}finally {
fis.close();
fos.close();
}
}
FileReader
/**
* 读取文本
*/
public void getFileReader() throws IOException {
FileReader fis=null;
try {
//创建字节输入流
fis=new FileReader(TEXT_PATH);
//创建一个长度为1024的竹筒
char[] b=new char[1024];
//用于保存的实际字节数
int hasRead=0;
//使用循环来重复取水的过程
while((hasRead=fis.read(b))>0){
System.out.println(">>>>>>>>>>>>>>>>"+hasRead);
//取出竹筒中的水滴(字节),将字节数组转换成字符串进行输出
System.out.print(new String(b,0,hasRead));
}
}catch (IOException e){
e.printStackTrace();
}finally {
fis.close();
}
}
FileWriter
略
BufferedInputStream
略
BufferedOutputStream
/**
* 用于提高性能,较少磁盘IO的缓冲流
* BufferedInputStream/BufferedReader,
* BufferedOutputStream/BufferedWriter
*/
public void getBufferedStream() throws Exception{
//创建文件夹
File file = new File(MAKEDIR_TEXT_PATH);
if (!file.exists()) {
log.info("文件不存在!!!");
file.mkdir();
log.info("文件新建完成!!!");
}
FileInputStream fis=null;
FileOutputStream fos=null;
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try {
//创建字节输入流
fis=new FileInputStream(TEXT_PATH);
//创建字节输出流
fos=new FileOutputStream(TEXT_PATH_NEW);
//创建字节缓存输入流
bis=new BufferedInputStream(fis);
//创建字节缓存输出流
bos=new BufferedOutputStream(fos);
byte[] b=new byte[1024];
int hasRead=0;
//循环从缓存流中读取数据
while((hasRead=bis.read(b))>0){
//向缓存流中写入数据,读取多少写入多少
bos.write(b,0,hasRead);
}
}catch (IOException e){
e.printStackTrace();
}finally {
//关闭最上层的流即可
bis.close();
bos.close();
}
}
ZipOutputStream压缩包
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 打压缩包
* zipPath:导出zip的地址
* filePath:被导出的文件地址
*/
private void zip(String zipPath,String filePath) throws Exception{
ZipOutputStream out = null;
try {
//压缩流
out = new ZipOutputStream(new FileOutputStream(zipPath));
//File流
File inputFile = new File(filePath);
//初始文件夹目录
String dir = "";
zipRecursion(out, inputFile, dir); // 调用方法
System.out.println("压缩中…"); // 输出信息
} catch (Exception e) {
log.error("导出异常",e);
} finally {
out.close(); // 将流关闭
}
}
/**
* 打压缩包==>递归方法
*/
public void zipRecursion( ZipOutputStream zip, File file, String dir ) throws Exception {
//如果当前的是文件夹,则进行进一步处理
if (file.isDirectory()) {
//得到文件列表信息
File[] fileArray = file.listFiles();
if (fileArray == null) {
return;
}
//将文件夹添加到下一级打包目录
zip.putNextEntry(new ZipEntry(dir + "/"));
dir = dir.length() == 0 ? "" : dir + "/";
//递归将文件夹中的文件打包
for (File fi : fileArray) {
zipRecursion(zip, fi, dir + fi.getName());
}
} else {
//当前的是文件,打包处理
//文件输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(dir);
zip.putNextEntry(entry);
zip.write(FileUtils.readFileToByteArray(file));
IOUtils.closeQuietly(bis);
zip.flush();
zip.closeEntry();
}
}
下载压缩包的web方法
package com.zy.jdk.io;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
*
*
* @author admin
* @create 2021/11/9
* @since 1.0.0
*/
@RestController
public class DownLoadController {
public static final String FILE_OUT_PATH =
"/Users/mac/Documents/project/idea_project/parent/jdk/src/main/resources/new";
@PostMapping("/downZip")
public void downZip(HttpServletResponse response){
exportZip(response,FILE_OUT_PATH);
}
private static void handlerFile(ZipOutputStream zip, File file, String dir) throws Exception {
//如果当前的是文件夹,则进行进一步处理
if (file.isDirectory()) {
//得到文件列表信息
File[] fileArray = file.listFiles();
if (fileArray == null) {
return;
}
//将文件夹添加到下一级打包目录
zip.putNextEntry(new ZipEntry(dir + "/"));
dir = dir.length() == 0 ? "" : dir + "/";
//递归将文件夹中的文件打包
for (File f : fileArray) {
handlerFile(zip, f, dir + f.getName());
}
} else {
//当前的是文件,打包处理
//文件输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(dir);
zip.putNextEntry(entry);
zip.write(FileUtils.readFileToByteArray(file));
IOUtils.closeQuietly(bis);
zip.flush();
zip.closeEntry();
}
}
private static byte[] createZip(String sourceFilePath) throws Exception{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
//将目标文件打包成zip导出
File file = new File(sourceFilePath);
handlerFile(zip, file,"");
IOUtils.closeQuietly(zip);
return outputStream.toByteArray();
}
public static void exportZip(HttpServletResponse response, String sourceFilePath) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
LocalDateTime now = LocalDateTime.now();
String format = now.format(formatter);
String downloadName = "output" +format+ ".zip";
//将文件进行打包下载
try {
OutputStream out = response.getOutputStream();
//接收压缩包字节
byte[] data = createZip(sourceFilePath);
response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Expose-Headers", "*");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + downloadName);
response.addHeader("Content-Length", "" + data.length);
response.setContentType("application/octet-stream;charset=UTF-8");
IOUtils.write(data, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
版权声明:本文为qq_45647324原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。