您的位置:首页 > 其它

目录下指定类型的文件复制到另外一个目录

2013-07-18 00:18 519 查看
今天毕老师的视频说到写一个方法, 把一个目录下所有的指定类型的文件复制到另外一个目录, 赶紧暂停了视频, 试着自己写了一下, 毫无压力, 一次成功.

这个小程序把以前学的File方法和io操作都用到了, 挺有锻炼意义.

Ps: 谁知道怎么让代码中的注释变绿.

package com.day20;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

public class copy_the_file {
static ppppp p = new ppppp();  //想偷懒做的替换, p.pln()=System.out.println()

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File dir_from = new File("D:\\test\\from");	//定义起始目录, 就是从这个目录开始搜索文件
File dir_to = new File("D:\\test\\to");	//定义目标目录, 就是把目标文件复制到这个目录
copyFile(dir_from, dir_to);	//调用复制文件方法;
}

//复制文件方法, 里边调用了另外2个方法, ErgodicDirToLookingForJavaFile()和copy(),方法是干什么的看名字就知道了.
public static void copyFile(File dir_from, File dir_to){
if(dir_from.canRead()){  //起始目录可读再继续,否则直接报错.
if(dir_to.canWrite()){	//目标目录可写再继续,否则直接报错. 经测试, 在windowsXP中,把目标目录设置为只读, 仍然可以写文件, 不报错.
ErgodicDirToLookingForJavaFile(dir_from);	//该方法把目录下所有的.java文件添加到wantedFileList列表
for(File f:wantedFileList){  //循环复制列表每一个文件
try {
copy(f, dir_to);
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
//						e.printStackTrace();
p.pln("您选择的文件 "+f+" 不存在.");
}
catch (IOException e) {
// TODO Auto-generated catch block
//						e.printStackTrace();
p.pln("文件 "+f+" 复制失败.");
}
}
}
else{
p.pln("您输入的目标目录"+dir_to+"不可写.");
}
}
else{
p.pln("您输入的起始目录"+dir_from+"不可读.");
}
}

public static void ErgodicDirToLookingForJavaFile(File dir){
//使用listFiles(filter)方法筛选目录下的文件
File[] files = dir.listFiles(new FileFilter(){	//匿名内部类编写FileFilter

@Override
public boolean accept(File arg0) {
// TODO Auto-generated method stub
return arg0.toString().toLowerCase().endsWith(".java")||arg0.isDirectory();
//该FileFilter返回目录和所有以".java"结尾的文件
}});

for(File file:files){
if(!file.canRead()){	//此语句未经测试, 正常情况下不会报错.
p.pln(file+"不可读, 跳过此文件.");
continue;
}
else{
if(file.isDirectory()){	//如果是文件夹, 则递归调用本方法, 直到某个文件夹下不再有文件夹, 仅有文件
ErgodicDirToLookingForJavaFile(file);
}
else{
wantedFileList.add(file);	//不是文件夹, 就添加到wantedFileList列表
}
}
}
}

//复制文件方法, 为了省事, 没有使用Reader, 使用了Stream, 通吃所有类型文件.
public static void copy(File original_file, File dir_to) throws FileNotFoundException,IOException{
if(dir_to.canRead()){
String fileName = original_file.getName();
File goal_file = new File(dir_to+"\\"+fileName);

BufferedInputStream bi = new BufferedInputStream(new FileInputStream(original_file));
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(goal_file));
int num;
while((num=bi.read())!=-1){
bo.write(num);
}
bi.close();	//忘记了是否需要关闭, 以防万一, 还是关闭了, 总是没有坏处, 下同.
bo.close();
}
else{
p.pln("您的目标目录 "+dir_to+" 没有读取权限.");
}
}

static ArrayList<File> wantedFileList = new ArrayList<File>();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: