题目:把一个指定目录下的(目录、文件、文件中的数据)拷贝到另外一个目录下。
方法一:
package day16;
/**
* 字节流既可以在纯文本的时候使用,还可以在图片,视频,音频下使用
*io流:字节文件流
* FileInputStream
* FileOutputStream
*/
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 Homework_3 {
public static void main(String[] args) {
File f1 = new File("D:\\JavaSEWrokSpace\\day05");
File f2 = new File("D:/FileIO");
copyAll(f1,f2);//从指定的f1目录下复制到f2目录
System.out.println("复制结束");
}
/**
* 从指定的f1这个目录复制到f2目录下
* @param f1
* @param f2
*/
private static void copyAll(File f1, File f2) {
//f2创建文件夹
File f = new File(f2,f1.getName());
f.mkdirs();//d:/fileio/day05
//1.获取f1目录下的所有文件
File [] files = f1.listFiles();
for (File file : files) {//获取每一个file对象
//2.判断是文件还是目录
if(file.isFile()){
//文件 数据复制
//TestByteIO.copyFile(file, new File(f2,file.getName()));
copyFile(file, new File(f,file.getName()));//从f1复制数据到f2
}
if(file.isDirectory()){
//目录 创建目录,进入这个文件夹,获取他目录下的所有文件
/*File f = new File(f2,file.getName());
f.mkdirs();
copyAll(file,f)*/
copyAll(file,f);
}
}
}
public static void copyFile(File f1,File f2) {
//f1读取
//1.需要输入流
InputStream is = null;
OutputStream os = null;
try{
is = new FileInputStream(f1);
//f2写入
//2.需要输出流
os = new FileOutputStream(f2);
//3.不断读取
byte[] buf = new byte[1024];
int len;//读取的字节长度
while((len = is.read(buf))!=-1){
/*String str = new String(buf,0,len);
System.out.println(str);*/
//4.吧读取的数据写入文件
os.write(buf, 0, len);
}
/*int len ;
while((len=is.read())!=-1){
os.write(len);
}*/
}catch(IOException e){
e.printStackTrace();
}finally{
//5.关闭
try {
if(is!=null)
is.close();
if(os!=null)
os.close();
} catch (IOException e) {
e.printStackTrace();
}//刷新
}
}
}