无法使用Java删除文件夹

时间:2014-02-28 03:39:38

标签: java file file-io java-io

我正在尝试删除只有文件但没有子文件夹但没有成功的文件夹。

代码:

File rowFolder = new File(folderPath);
String[] files = rowFolder.list();
for (String file : files){
    File deleteFile = new File(file);
    System.out.println("deleting file -"+deleteFile.getName());
    deleteFile.delete();
}
System.out.println("deleting folder -"+rowFolder.getName());
rowFolder.delete();

输出:

deleting file -testing.pdf
deleting file -app_json.json
deleting file -photo.jpg
deleting folder -bundle_folder

代码不会删除任何文件夹或任何文件。那是为什么?

4 个答案:

答案 0 :(得分:5)

由于多种原因,您可能会收到失败的删除信息;该文件可能被文件系统锁定,您可能缺少权限,或者可能被其他进程打开等。

如果您使用的是Java 7或更高版本,则可以使用javax.nio.* API;这是一个更可靠的&与legacy java.io.File类一致:

Path fp = file.toPath();
Files.delete(fp);

如果你想抓住可能的例外:

try {
    Files.delete(path);
} catch (NoSuchFileException x) {
    System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
    System.err.format("%s not empty%n", path);
} catch (IOException x) {
    // File permission problems are caught here.
    System.err.println(x);
}

检查docs以获取有关Java 7中IO的更多信息

答案 1 :(得分:2)

由于您没有检查delete()的返回值,因此您生成的输出毫无意义。删除可能由于多种原因而失败:

  • 该文件是非空目录
  • 该文件由其他用户(在某些平台上)打开
  • 您无权删除该文件。

答案 2 :(得分:1)

试试此代码

 public class DeleteDirTest {
    public static void main(String[] args) throws IOException {
        DeleteDirTest test = new DeleteDirTest();
        boolean result = test.deleteDir(new File("D:/test"));
        System.out.println(result);         
    }

    public boolean deleteDir(File file) {
        if (file.isDirectory()) {
            String[] children = file.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(file, children[i]));
                if (!success) {
                    return false;
                }
            }
        }
        return file.delete();
    }

}

答案 3 :(得分:0)

试试这个。资料来源:How To Delete Directory In Java

import java.io.File;
import java.io.IOException;

public class DeleteDirectoryExample
{
    private static final String SRC_FOLDER = "C:\\mkyong-new";

    public static void main(String[] args)
    {   

        File directory = new File(SRC_FOLDER);

        //make sure directory exists
        if(!directory.exists()){

           System.out.println("Directory does not exist.");
           System.exit(0);

        }else{

           try{

               delete(directory);

           }catch(IOException e){
               e.printStackTrace();
               System.exit(0);
           }
        }

        System.out.println("Done");
    }

    public static void delete(File file)
        throws IOException{

        if(file.isDirectory()){

            //directory is empty, then delete it
            if(file.list().length==0){

               file.delete();
               System.out.println("Directory is deleted : " 
                                                 + file.getAbsolutePath());

            }else{

               //list all the directory contents
               String files[] = file.list();

               for (String temp : files) {
                  //construct the file structure
                  File fileDelete = new File(file, temp);

                  //recursive delete
                 delete(fileDelete);
               }

               //check the directory again, if empty then delete it
               if(file.list().length==0){
                 file.delete();
                 System.out.println("Directory is deleted : " 
                                                  + file.getAbsolutePath());
               }
            }

        }else{
            //if file, then delete it
            file.delete();
            System.out.println("File is deleted : " + file.getAbsolutePath());
        }
    }
}