我正在尝试删除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();
}
答案 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