创建文件夹
dir.mkdirs();//创建文件夹
复制文件夹
问题1:使用字节流还是字符流
使用字节流 可能有图片、视频、音频.....等二进制文件
问题2:如何提高复制速度
BufferedInputStream和BufferedOutputStream
byte [] buf = new byte[1024];
问题3:涉及的技能点
1.IO流 :文件的复制
2.递归:各级文件夹和文件的递归复制
3.File类:文件夹的定义和创建
问题4:问题的迭代
1.复制一个文件
2.复制一个文件夹下所有的文件(不包括子文件夹)
3.复制一个文件夹下所有的文件和子文件夹,从而完成文件夹的复制
package dr;
/**
* 复制文件夹
* 1复制一个文件
* 2复制文件夹下所有的文件但是不包括子文件夹
* 3复制一个文件夹下的所有文件和子文件
*/
import java.io.*;
public class TestCopyDir1 {
public static void main(String[] args) {
// copyFile("e:/JDK_API_1_6_zh_CN.CHM", "e:/JDK_API_1_6_zh_CN2.CHM");
copyDir("e:/练手","e:/练手2");
}
public static void copyDir(String sourcename, String destDirname) {
//源文件必须存在
File sourceDir = new File(sourcename);
if (!sourceDir.exists()) {
System.err.println("源文件夹必须存在");
return;
}
//目的文件夹手动创建
File destDir = new File(destDirname);
if (!destDir.exists()) {
destDir.mkdirs();
}
//复制所有文件到目的文件夹
File[] files = sourceDir.listFiles();
for (File file : files) {
//System.out.println(file.getName() + " " + file.isFile());
if (file.isFile()) {
copyFile(sourcename + "/" + file.getName(), destDirname + "/" + file.getName());
}
//如果是文件夹也复制
if (file.isDirectory()) {
//递归调用
copyDir(sourcename + "/" + file.getName(), destDirname + "/" + file.getName());
}
}
}
/**
* 复制文件
* @param scorcename
* @param destname
*/
public static void copyFile(String scorcename, String destname) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try{
InputStream fis = new FileInputStream(new File(scorcename));//OutputStream fos = new FileOutputStream(new File("e:/ideaProjects/readme2.txt"));
OutputStream fos = new FileOutputStream(new File(destname));
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//大大减少读写硬盘的次数:中转站还是1个字节,每次读数据先读缓冲区,缓冲区没有,读一次硬盘,将缓冲去填满,
//其实缓冲区起到了读一次硬盘写多字节数据的作用,写一次硬盘写多字节数据
//2.使用流
byte[] buf = new byte[1024];
//先读一个字节
int len= bis.read(buf);//读源文件的一个字节赋值给n
while (len!= -1) {//判断是否到达文件末尾
//写一个字节
bos.write(buf,0,len);
//在读一个字节
len = bis.read(buf);//读源文件的一个字节赋值给n
}
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if (bis != null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (bos != null) {
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//3.关闭流
}
}