当前位置: 代码迷 >> J2EE >> 关于Java File Delete解决方案
  详细解决方案

关于Java File Delete解决方案

热度:80   发布时间:2016-04-22 02:25:51.0
关于Java File Delete
首先有一个非空的文件夹(内包含子文件夹,子文件夹内包含文件)

我将文件夹内的子文件夹拷贝出来,代码如下:
Java code
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;    }


然后删除该文件夹,代码如下:
Java code
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)发现文件是可以被删除的,但是要等好久,请大侠解释以上问题


------解决方案--------------------
从删除文件的代码上,没发现什么逻辑错误,有异常吗?
------解决方案--------------------
代码我感觉无问题,我自己也测试了下删除正常着哩,楼主是不是有窗口打开了要删除的某个目录?
------解决方案--------------------
dir.listFiles()
你是一遍列出来一边删除吧,感觉你的删除可能会多listFiles()结果有影响,可以尝试先list目录到数组中,然后迭代数组进行删除
------解决方案--------------------
文件不能调用file.listFiles(),只有文件夹才行。。
Java code
        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();        }    }
  相关解决方案