参考文章
- 【Java基础】IO
- File
- FileInputStream
- FileOutputStream
- FileReader
- FileWriter
- BufferedInputStream
- BufferedOutputStream
- ZipOutputStream压缩包
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
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;
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();
}
}



