字节流:可以处理一切文件,包括二进制 音频 视频 doc等
节点流 InputStream FileInputStream
OutputStream FileOutputStream
一.读取文件
1.建立联系 File对象 源头
2.选择流 文件输入流 InputStream FileInputStream
3.操作: byte[] char = new byte[1024]; + read +读取大小
4.释放资源:关闭
二.写出文件
1.建立联系 File对象 目的地
2.选择流 文件输出流 OutputStream FileOutputStream
3.操作: write()+flush()
4.释放资源:关闭
三.文件拷贝 程序为桥梁
1.建立联系 File对象 源头+目的地
2.选择流
文件输入流 InputStream FileInputStream
文件输出流 OutputStream FileOutputStream
3.操作: 拷贝
byte[] char = new byte[1024];
int lent=0
while(-1!=(len=输入流.read(char))){
输出流.write(char,0,len)
}
输出流.flush();
4.释放资源:关闭两个流
package com.kennosaur.io.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class CopyFile {
public static void main(String[] args) throws IOException {
File src = new File("d:/myjavacode/testfile/1.jpg");
File dest = new File("d:/myjavacode/testfile/1-1-1.jpg");
InputStream is = new FileInputStream(src);
OutputStream os = new FileOutputStream(dest);
byte[] flush = new byte[1024];
int len = 0;
while(-1!=(len=is.read(flush))) {
os.write(flush, 0, len);
}
os.flush();
os.close();
is.close();
}
}
四.文件夹拷贝
1.递归查找子孙级文件|文件夹
2.文件: 复制(IO流复制)
文件夹: 创建
package com.kennosaur.io.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/*
* 文件操作
* 1.文件拷贝
* 2.文件夹拷贝
*/
public class FileUtil {
/**
* 拷贝文件夹
* @param srcPath 源路径
* @param destPath 目标路径
* @throws IOException
*/
public static void copyDir(String srcPath,String destPath) throws IOException{
File src = new File(srcPath);
File dest = new File(destPath);
copyDir(src, dest);
}
/**
* 拷贝文件夹
* @param src 源File对象
* @param dest 目标File对象
* @throws IOException
*/
public static void copyDir(File src,File dest) throws IOException {
if(src.isDirectory()) {
dest = new File(dest,src.getName());
}
copyDirDetail(src,dest);
}
/**
* 拷贝文件夹细节
* @param src
* @param dest
*/
public static void copyDirDetail(File src,File dest) throws IOException{
if (src.isFile()) { //文件
try {
FileUtil.copyFile(src, dest);
} catch (IOException e) {
//e.printStackTrace();
throw e;
}
}else if(src.isDirectory()){
//创建目录,确保目标文件夹存在
dest.mkdirs();
//获取下一级目录|文件
for(File sub:src.listFiles()) {
copyDirDetail(sub,new File(dest,sub.getName()));
}
}
}
/*
* 文件的拷贝
* @param 源文件路径
* @param 目标文件路径
* @throws IOException
* @return
*/
public static void copyFile(String srcPath, String destPath) throws IOException {
copyFile(new File(srcPath),new File(destPath));
}
/*
* 文件的拷贝
* @param 源文件File对象
* @param 目标文件File对象
* @throws IOException
* @return
*/
public static void copyFile(File src, File dest) throws IOException {
if (!src.isFile()) { //不是文件或者为null
//System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");
}
//如果dest为已经存在的文件件,不能建立与文件夹同名的文件
if (dest.isDirectory()) {
throw new IOException(dest.getAbsolutePath()+"不能建立与文件夹同名的文件");
}
InputStream is = new FileInputStream(src);
OutputStream os = new FileOutputStream(dest);
byte[] flush = new byte[1024];
int len = 0;
while(-1!=(len=is.read(flush))) {
os.write(flush, 0, len);
}
os.flush();
os.close();
is.close();
}
}