public class Test {
//测试 拷贝整个文件夹
public static void main(String[] args) throws IOException, AbsException{
File file = getFile();
File dir = getFile();
copyDir(file, dir);
}
private static void demo1() throws IOException {
FileInputStream fis = new FileInputStream("SB.bmp");
FileOutputStream fos = new FileOutputStream("copy.bmp");
int b;
while((b = fis.read()) != -1) {
// fos.write(b);
}
fis.close();
fos.close();
}
/*
* 拷贝一个文件夹copyDir()
* 返回值类型void
* 参数列表 需要File file(要拷贝的) File dir(拷贝放哪)
* 分析
* 0.定义一个小数组
* 1.定义一个fileArr数组 通过listFile()获取数组
* 2.定义一个文件输入流和输出流.接收Null
* 3.通过length来遍历这个数组
* 4.通过输入流得到filearr[] 输出流得到 new File(dir,filearr[].getName)
* 5.通过while循环写入数据
*/
public static void copyDir(File file , File dir) throws IOException {
byte[] arr = new byte[1024 * 8];
File[] fileArr = file.listFiles();
FileInputStream fis = null;
FileOutputStream fos = null;
for (int i = 0; i < fileArr.length; i++) {
/**
* 可加入判断如果是文件夹,那么在新路径创建文件夹,递归这个方法
*/
fis = new FileInputStream(fileArr[i]);
fos = new FileOutputStream(new File(dir , fileArr[i].getName()));
int len;
while((len = fis.read(arr)) != -1) {
fos.write(arr, 0, len);
}
fis.close();
fos.close();
}
}
/*
* 定义一个方法获取键盘录入的文件路径,并封装成File对象返回
* 1.返回类型File
* 2.参数列表无
*/
private static File getFile() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入文件路径:");
while(true) {
String line = sc.nextLine();
File file = new File(line);//把文件名封装在File对象
if(!file.exists())
System.out.println("文件不存在,请重新输入:");
else if(file.isDirectory()){
System.out.println("您输入的是一个文件夹");
return file;
}
else
System.out.println("您输入的是一个文件");
return file;//为什么没有跳出循环,因为ruturn是跳出方法.方法都终止了.还有什么循环
}
}
}
class AbsException extends Exception {
public AbsException() {
super();
}
public AbsException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public AbsException(String message, Throwable cause) {
super(message, cause);
}
public AbsException(String message) {
super(message);
}
public AbsException(Throwable cause) {
super(cause);
}
} |
|