黑马程序员技术交流社区
标题:
求助解决文件复制的问题
[打印本页]
作者:
smhjx2006
时间:
2013-6-5 19:17
标题:
求助解决文件复制的问题
/**
问题描述:将
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()]);
}
}
作者:
eycrckag
时间:
2013-6-5 19:23
你的代码貌似没有问题哦,你仔细看看是不是路径问题。可以先把复制的目的改成当前目录,就是现在的路径。相对路径试试,一般情况下,复制文件,就是路径容易出问题。最后再改成绝对路径。
作者:
苑永志
时间:
2013-6-15 16:27
哥们,我替你找到错误了,下面有错误的代码段:
ArrayList<String> al1 = new ArrayList<String>();
File[] files = dir.listFiles();
for(int x=0; x<files.length; x++){
System.out.println(files[x]);
if(files[x].isDirectory()){
getAllJavaFile(files[x],
al1
);
}else{
if(files[x].getName().endsWith(".java")){
al.add(files[x].getAbsolutePath());
}
}
}
估计这样楼主已经可以看出问题的所在了,就是每次执行getAllJavaFile时,都会在代码块中重新创建一个新的ArrayList对象。
实际上,最后返回的只是第一层目录得到的所有文件的路径。可做如下的更改:
//ArrayList<String> al1 = new ArrayList<String>();
File[] files = dir.listFiles();
for(int x=0; x<files.length; x++){
System.out.println(files[x]);
if(files[x].isDirectory()){
getAllJavaFile(files[x],
al
);//无论哪一层目录中文件的路径都存放在这一个ArrayList对象中
}else{
if(files[x].getName().endsWith(".java")){
al.add(files[x].getAbsolutePath());
}
}
}
作者:
smhjx2006
时间:
2013-6-16 18:04
非常感谢!终于知道问题出在哪了!{:soso_e156:}
作者:
苑永志
时间:
2013-6-16 22:55
smhjx2006 发表于 2013-6-16 18:04
非常感谢!终于知道问题出在哪了!
呵呵,不用客气,互相学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2