黑马程序员技术交流社区
标题:
文件夹之间拷贝功能的实现
[打印本页]
作者:
taozhihui
时间:
2016-9-13 01:08
标题:
文件夹之间拷贝功能的实现
package com.heima.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test3 {
/**
* 需求:3,从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
*
* 把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
* 分析:
* 1,在目标文件夹中创建原文件夹
* 2,获取原文件夹中所有的文件和文件夹,存储在File数组中
* 3,遍历数组
* 4,如果是文件就用io流读写
* 5,如果是文件夹就递归调用
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File src = Test1.getDir();
File dest = Test1.getDir();
if(src.equals(dest)) {
System.out.println("目标文件夹是源文件夹的子文件夹");
}else {
copy(src,dest);
}
}
/*
* 把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
* 1,返回值类型void
* 2,参数列表File src,File dest
*/
public static void copy(File src, File dest) throws IOException {
//1,在目标文件夹中创建原文件夹
File newDir = new File(dest, src.getName());
newDir.mkdir();
//2,获取原文件夹中所有的文件和文件夹,存储在File数组中
File[] subFiles = src.listFiles();
//3,遍历数组
for (File subFile : subFiles) {
//4,如果是文件就用io流读写
if(subFile.isFile()) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
BufferedOutputStream bos =
new BufferedOutputStream(new FileOutputStream(new File(newDir,subFile.getName())));
int b;
while((b = bis.read()) != -1) {
bos.write(b);
}
作者:
huangbinqqian
时间:
2016-9-13 01:24
为什么我也这样打,没有把文件夹也copy进去,很奇怪
作者:
taozhihui
时间:
2016-9-13 23:45
你确定?
作者:
Leo_
时间:
2017-3-17 22:25
学长,你好,也是这道题目,帮我看看,这个问题出在哪里,运行时异常说我
Exception in thread "main" java.io.FileNotFoundException: E:\kk (拒绝访问。)
代码是:
package com.haima.bean;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
import javax.imageio.stream.FileImageInputStream;
public class Test3 {
/**
* @param args
* 从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
* 分析:
* 1.将键盘录入文件夹路径进行判断file1,file2
* 2.其中一个文件夹中的内容,进行遍历到字符数组中
* 3.通过字符数据,获取其的地址值,然后,对每一个数组中的内容,进行拷贝
* 4,拷贝到目标文件夹中
* 5.关流
* @throws IOException
*
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
System.out.println("请输入文件来源地址");
File file1 = getFile();
System.out.println("请输入文件目标地址");
File file2 = getFile();
//System.out.println(file1.getName());
//System.out.println(file2.getName());
//System.out.println(file1.getPath());
copyFile(file1,file2);
}
//1.将键盘录入文件夹路径进行判断
public static File getFile(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入文件夹路径");
String line = sc.nextLine();
while(true){
File file = new File(line);
if(!file.exists()){
System.out.println("请重新输入文件路径");
}else if(file.isFile()){
System.out.println("你输入的是文件路径,请重新输入");
}else {
return file;
}
}
}
public static File copyFile(File file1,File file2) throws IOException{
File [] subFile1 = file1.listFiles();
for (File file33 : subFile1) {
if(file33.isFile()){
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file33));
BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(file2.getPath()));
int b;
while((b = fis.read()) != -1){
fos.write(b);
}
fis.close();
fos.close();
}else if(file33.isDirectory()){
return copyFile(file33,file2);
}
}
return file1;
}
}
作者:
wdjzhuhuo
时间:
2017-3-17 22:32
来学习来学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2