首先有一个非空的文件夹(内包含子文件夹,子文件夹内包含文件)我将文件夹内的子文件夹拷贝出来,代码如下:public class DirCopy {
private static final Logger logger = Logger.getLogger(DirCopy.class);
public static boolean copy(String file1, String file2) { File in = new File(file1);
File out = new File(file2);
if (!in.exists()) {
logger.error(in.getAbsolutePath() + "源文件路径错误!!!");
return false;
} else {
logger.debug("源文件路径" + in.getAbsolutePath());
logger.debug("目标路径" + out.getAbsolutePath());
}
if (!out.exists())
out.mkdirs();
File[] file = in.listFiles();
FileInputStream fin = null;
FileOutputStream fout = null;
for (int i = 0; i < file.length; i++) {
if (file[i].isFile()) {
try {
fin = new FileInputStream(file[i]);
} catch (FileNotFoundException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
System.out.println("in.name=" + file[i].getName());
try {
fout = new FileOutputStream(new File(file2 + AppConfig.get("jr.dir.FileSeparator")
+ file[i].getName()));
} catch (FileNotFoundException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
//System.out.println(file2);
int c;
byte[] b = new byte[1024 * 5];
try {
while ((c = fin.read(b)) != -1) { fout.write(b, 0, c);
System.out.println("复制文件中!");
}
fin.close();
fout.flush();
fout.close();
} catch (IOException e) {
logger.error("[execute()]catch:" + e.getMessage());
}
} else
copy(file1 + AppConfig.get("jr.dir.FileSeparator") + file[i].getName(), file2 + AppConfig.get("jr.dir.FileSeparator")
+ file[i].getName());
} return true; }然后删除该文件夹,代码如下:public static void deleteDir(File dir) { 
    if (dir == null || !dir.exists() || !dir.isDirectory()) 
        return; // 检查参数 
    for (File file : dir.listFiles()) { 
        if (file.isFile()) 
            file.delete(); // 删除所有文件 
        else if (file.isDirectory()) 
            deleteDir(file); // 递规的方式删除文件夹 
    } 
    dir.delete();// 删除目录本身 
}问题是:删除文件夹时,发现只能删除文件夹中的第一个子文件夹。IO流我查了,发现已经关闭了,用了Unlocker发现文件被占用。后来我改用while(!file.delete)发现文件是可以被删除的,但是要等好久,请大侠解释以上问题

解决方案 »

  1.   

    说错了,用Unlocker时发现文件未被占用
      

  2.   

    建议你用
    org.apache.commons.io包的FileUtils类
    4行代码就搞定
      

  3.   

    dir.listFiles()在迭代里面改变了,会对for有影响吗?
      

  4.   

    dir.listFiles()
    你是一遍列出来一边删除吧,感觉你的删除可能会多listFiles()结果有影响,可以尝试先list目录到数组中,然后迭代数组进行删除
      

  5.   

    文件不能调用file.listFiles(),只有文件夹才行。。        public static void main(String[] args)
    {
    deleteFile(new File("e:\\"));
    }

    public static void deleteFile(File file)
    {
    if(file.isFile())
    {
    file.delete();
    }
    else
    {
    File[] files = file.listFiles();
    for(File itemFile:files)
    {
    deleteFile(itemFile);
    }
    file.delete();
    }
    }