在创建文件内部之前检查目录中的写访问权限

kaz*_*aki 27 java permissions file

我的小实用程序应用程序通过GUI文件选择器向用户询问输出目录.然后,经过一些处理后,它会在此输出目录中创建大量文件.

我需要检查应用程序是否具有写访问权限,以便通知用户并且不继续处理(这可能需要很长时间)

我的第一次尝试是java.io.FilecanWrite()方法.但这不起作用,因为它处理目录条目本身而不是其内容.我已经看到至少一个Windows XP文件夹的实例可以重命名或删除但是不能在其中创建文件(因为权限).这实际上是我的测试用例.

我终于解决了以下解决方案

//User places the input file in a directory and selects it from the GUI
//All output files will be created in the directory that contains the input file
File fileBrowse = chooser.getSelectedFile(); //chooser is a JFileChooser
File sample = new File(fileBrowse.getParent(),"empty.txt"); 
try
{
     /*
      * Create and delete a dummy file in order to check file permissions. Maybe 
      * there is a safer way for this check.
      */
      sample.createNewFile();
      sample.delete();
}
catch(IOException e)
{
      //Error message shown to user. Operation is aborted
}
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说并不优雅,因为它只是试图实际创建一个文件并检查操作是否成功.

我怀疑必须有一个更好的方法,但到目前为止我找到的所有安全管理器和解决方案的解决方案都涉及Java Applet,而不是独立的应用程序.我错过了什么吗?

在实际编写文件之前,建议在目录中检查文件访问的方法是什么?

我使用的是Java 5.

Phi*_*ere 20

您可以检查文件权限,确保目录存在,并进行大量检查或找到一个可以检查所有检查的库 但是(!)不是检查的最佳方法吗?如果您检查权限和文件系统更改...您将不得不更改您的代码.但是,尝试编写文件总是会告诉您是否可以编写文件.

您的解决方案不一定是最优雅的解决方案.它不是一个廉价的硬编码补丁或丑陋的东西.这只是普通的代码.它会一直有效.但是如果你不喜欢在代码中看到检查,只需将它放在类中,只有目标是检查可能的写入.事实上,你应该把它放在一个实用工具类中,你喜欢优雅与否.

另一种解决方案是将整个写入硬盘驱动器的代码放在try中.如果你不能写,整个部分将被跳过,你会在catch部分给出一条消息给用户反馈.