我的小型实用程序应用程序通过GUI文件选择器要求用户提供输出目录。
然后,经过一些处理,它会在此输出目录中创建许多文件。
我需要检查应用程序是否具有写访问权,以便它通知用户并执行
无法继续进行处理(可能需要很长时间)
我的第一次尝试是 java.io.File 的 canWrite()方法。但这行不通
因为它只处理目录条目本身,而不处理其内容。我至少看过
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
}
但是,这对我来说并不优雅,因为它只是尝试实际创建文件并检查操作是否成功。
我怀疑必须有一个更好的方法,但是到目前为止我找到的所有解决方案
与安全管理器一起使用,其他与Java Applets一起处理,而不是独立的应用程序。
我想念什么吗?
在检查目录内文件访问之前,推荐的方法是什么
实际写文件?
我正在使用Java 5。
最佳答案
您可以检查文件许可权,确保目录存在,并进行大量检查或找到一个库来为您检查所有内容但是()不是检查尝试的最佳方法吗?如果您检查权限并且文件系统已更改...,则必须更改代码。但是尝试写入文件总是会告诉您是否可以写入文件。
您的解决方案不一定是最优雅的解决方案。这不是廉价的硬编码补丁,也不是丑陋的东西。这只是正常的代码。而且它将始终有效。但是,如果您不希望看到代码中的检查,只需将其放在类中就可以将其分开,唯一的目的是检查编写的可能性。实际上,无论您是否喜欢它,您都应该将它放在实用程序类中。
另一种解决方案是尝试将您的整个写入硬盘的代码放入其中。而且,如果您无法编写,则将跳过整个部分,并在catch部分中向您提供反馈信息。