无法使用Java删除系统目录中的文件

时间:2014-07-25 12:03:34

标签: java batch-processing

我正在尝试删除C:\Program Files\folder\files.中的文件夹及其文件我不是该文件夹的创建者,但我在这台机器上有管理员权限我正在执行我的java代码。我收到IO Exception错误,指出我没有权限执行此操作。所以我尝试使用PosixFilePermission来设置不起作用的权限。我听说有一种解决方法使用bat或bash命令来授予管理员权限并在删除文件夹之前执行批处理。如果我做错了或建议最好的解决方法,请告诉我。

  

注意:file.canWrite()在检查时没有抛出任何异常   写入权限。我使用的是JDK 1.7

String sourcefolder = "C:\Program Files\folder\files";
    File file = new File(sourcefolder);
    try {
        if (!file.canWrite())
            throw new IllegalArgumentException("Delete: write protected: "
                    + sourcefolder);
          file.setWritable(true, false);

        //using PosixFilePermission to set file permissions 777
            Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
            perms.add(PosixFilePermission.OTHERS_WRITE);
            Files.setPosixFilePermissions(Paths.get(sourcefolder), perms);
        //file.delete();
        FileUtils.cleanDirectory(file);
        System.out.println("Deleted");
    } catch (Exception e) {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:0)

您似乎需要执行以管理员身份运行的操作。您可以使用命令行从Java执行此操作

Process process = Runtime.getRuntime().exec(
       "runas /user:" + localmachinename + "\administrator del " + filetodelete);

您需要读取输出以查看它是否失败。

对我来说,请参阅http://technet.microsoft.com/en-us/library/cc771525.aspx

答案 1 :(得分:0)

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

如果您使用的是Java 7或更高版本,则可以使用javax.nio。* API;这是一个更可靠的&amp;与[legacy] [1] java.io.Fileclasses;

一致
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);
}

这是我删除的代码,您也可以参考:

import java.io.File;
 class DeleteFileExample
{
    public static void main(String[] args)
    {   
        try{

            File file = new File("C:\\JAVA\\1.java");

            if(file.delete()){
                System.out.println(file.getName() + " is deleted!");
            }else{
                System.out.println("Delete operation is failed.");
            }

        }catch(Exception e){

            e.printStackTrace();

        }

    }
}

  [1]: http://docs.oracle.com/javase/tutorial/essential/io/legacy.html