2013-02-25 123 views
0

我正在编写一个程序,其中的一部分是删除某个文件夹中的文件(在程序根目录中)。目前,这些文件不是由程序创建的,而是在外部创建的 - 但是将来它们可能会或可能不会被程序本身创建/编辑。如何设置删除权限?

现在的问题:

当我尝试删除一个文件,我得到许可例外。很多检查,调试和研究之后,我写了这个代码:

private void checkAndDelete(int n, String fileName) { 
    // TODO: file permission error 
    if (n == JOptionPane.YES_OPTION) { 
     File file = new File(fileName); 
     file.setWritable(true); 
     SecurityManager s = new SecurityManager(); 
     s.checkDelete(fileName); 
     System.out.println(file); 
     if(file.delete()) { 
      JOptionPane.showMessageDialog(null, "Deletion successful!"); 
      initializeNorth(); 
     } else { 
      JOptionPane.showMessageDialog(null, "Deletion failed!"); 
     } 
    } 
} 

n是值当用户点击yes或no在对话框中确认删除,fileName是文件名。现在

,该checkDelete方法抛出这样的:

Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied ("java.io.FilePermission" "DB/fun trivia.kgf" "delete") 

所以我缩小了问题 - 权限问题。如果它很重要,我在Dropbox(我的所有项目都在这里)中有文件。该文件存在,可读可写。我已经完成了所有检查。问题只是为了获得许可。

我该如何解决这个问题?

编辑:我试图改变我的文件的位置是在我的本地系统,但它有相同的错误。所以它不是一个问题,只有在Dropbox上。

回答

3

显然,我还没有关闭该文件的Scanner。我只是压制资源泄漏..我不得不包装我的文件Scannertry { } finally { }为它工作。

1

如果您使用的是Windows,请以管理员身份运行您的软件。 您可以以管理员身份或IDE本身(Netbeans,Eclipse)运行程序。两者都应该工作。

+1

我总是以管理员身份运行。但问题是,尽管我可以以管理员身份运行它,但使用该程序的其他人可能不会。 – 2013-02-25 20:31:26

+0

嗯,好的!你真的需要应用程序的安全策略吗?有没有可能删除SecurityManager? – Laerte 2013-02-25 20:54:28

+1

我加了'SecurityManager'只是为了调试。我不需要它为我的程序工作。 – 2013-02-25 21:11:02