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

无法使用Java删除系统目录中的文件,java,batch-processing,Java,Batch Processing,我正在尝试删除C:\Program files\folder\files中的文件夹及其文件。我不是文件夹的创建者,但我在执行java代码的这台机器上拥有管理员权限。我收到IO异常错误,说明我没有执行此操作的权限。所以我尝试了PosixFilePermission来设置权限,但也没有成功。我听说有一种解决方法,使用bat或bash命令授予管理员权限,并在删除文件夹之前执行批处理。如果我做错了什么,请告诉我,或者建议最好的解决方法 注意:file.canWrite()在检查 写访问。我正在使用JDK

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

注意:file.canWrite()在检查 写访问。我正在使用JDK1.7

String sourcefolder=“C:\Program Files\folder\Files”;
File File=新文件(sourcefolder);
试一试{
如果(!file.canWrite())
抛出新的IllegalArgumentException(“删除:写保护:”
+源文件夹);
setWritable(true、false);
//使用PosixFilePermission设置文件权限777
Set perms=new HashSet();
perms.add(PosixFilePermission.OTHERS_WRITE);
Files.setPosixFilePermissions(path.get(sourcefolder),perms);
//delete();
FileUtils.cleanDirectory(文件);
系统输出打印项次(“删除”);
}捕获(例外e){
e、 printStackTrace();
}

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

Process process = Runtime.getRuntime().exec(
       "runas /user:" + localmachinename + "\administrator del " + filetodelete);
您需要读取输出以查看它是否失败


在我看来,删除失败的原因有很多:-文件可能被文件系统锁定,您可能缺乏权限,或者可能被其他进程打开等等

如果您使用的是Java7或更高版本,那么可以使用javax.nio.*API;它比[legacy][1]java.io.FileClass更可靠、更一致

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

是的,彼得。我很确定,它实际上是一个java项目文件夹,当然,它没有打开,也没有使用文件,也没有将其添加到eclipse IDE中。@JavaLover这是否意味着您可以使用资源管理器删除文件?是的,我可以从资源管理器中删除文件,但会有一个额外的提示,要求我以管理员身份删除。您可以在启动程序时右键单击该程序,然后选择“以管理员身份运行”以使用IDE执行此操作,您需要以管理员身份运行IDE。这并不能回答此问题。若要评论或要求作者澄清,请在其帖子下方留下评论。感谢@Deepanshu Bedi,感谢您宝贵的时间。我的问题仍然存在,如果我将项目保存在D:或F:或任何其他驱动程序中,但C:是写保护的,我可以执行此操作。因此,我希望找到一个解决方案,在删除文件夹之前动态授予管理员权限。如果我尝试删除D:../../../.中的任何内容,它会起作用,如果是从C:\Program Files\../.中删除,它就不起作用。。这是我的原始版本。这意味着允许您的程序文件执行某些特定任务。要创建文件夹,请删除它们。等等,试试看“转到c:\program Files并右键单击,告诉我您得到了哪些选项?”?它们是有限的还是可以的?现在您还可以投票:P@JavaLoverI我猜你希望我检查一下我的电脑里有什么。我是这个帐户的管理员。现在可能的问题与安全性有关,我必须是root用户才能删除此文件夹。您能告诉我如何通过运行.bat命令来实现这一点吗?该命令允许我设置root权限,从而允许我删除文件夹?我真的很感谢你在这方面的努力你在使用windows还是mac?[如果是windows,请参阅此项]。如果能解决你的问题,我想投一票
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