/**问题描述:将d:\ceshi 目录下的所有.java 文件复制到d:\ch 目录下
*下面的程序,调试了很长时间,发现结果只是复制了d:\ceshi目录中的java文件,
*但是却没有复制该路径里面所包含的子文件夹中的java文件。不知哪里的问题?请求帮助
*/
package com.itheima;
import java.awt.List;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class Test9 {
public static void main(String[] args) {
//定义目录dir
File dir = new File("d:\\ceshi\\");
//定义集合al用于存放dir目录中的所有java文件的绝对路径
ArrayList<String> al = new ArrayList<String>();
//调用getAllJavaFile方法,该方法会将所有java文件的绝对路径存入al集合中,并以字符串数组的形式返回
String[] arr = getAllJavaFile(dir,al);
//遍历字符串数组arr,并将数组元素封装成File对象传递给copyJavaFile方法,该方法实现java文件的复制
for(String str :arr)
{
copyJavaFile(new File(str));
}
}
//定义方法copyJavaFile(),实现file文件的复制
public static void copyJavaFile(File file) {
//String name = file.get
File dir = new File("d:\\ch\\");
if(!(dir.isDirectory()&&dir.exists()))
dir.mkdirs();
BufferedReader bufr = null;
BufferedWriter bufw = null;
String line = null;
try{
bufr = new BufferedReader(new FileReader(file));
bufw = new BufferedWriter(new FileWriter(new File(dir,file.getName())));
while((line = bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch(IOException e){
throw new RuntimeException("读写失败");
}
finally{
if(bufr!=null){
try{
bufr.close();
}
catch(IOException ex){
throw new RuntimeException("关闭读取失败!");
}
}
if(bufw!=null){
try{
bufw.close();
}
catch(IOException ex){
throw new RuntimeException("关闭写入失败");
}
}
}
}
//定义方法获取指定目录下所有java文件的方法getAllJavaFile()
public static String[] getAllJavaFile(File dir,ArrayList<String> al){
if(!(dir.exists()&&dir.isDirectory()))
throw new RuntimeException("目录不存在或者不是目录");
ArrayList<String> al1 = new ArrayList<String>();
File[] files = dir.listFiles();
for(int x=0; x<files.length; x++){
if(files[x].isDirectory())
getAllJavaFile(files[x],al1);
else{
if(files[x].getName().endsWith(".java")){
al.add(files[x].getAbsolutePath());
}
}
}
return al.toArray(new String[al.size()]);
}
}
|