当前位置: 首页 > 面试题库 >

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

彭坚壁
2023-03-14
问题内容

我的小型实用程序应用程序通过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 Applet而非独立应用程序打交道。我想念什么吗?

在实际写入文件之前,建议使用哪种方法检查目录中的文件访问权限?

我正在使用Java 5。


问题答案:

您可以检查文件许可权,确保目录存在,并进行大量检查,或者找到一个库来进行所有检查( 但是!)
不是尝试尝试的最佳方法?如果检查权限,并且文件系统已更改…,则必须更改代码。但是尝试写入文件总是会告诉您是否可以写入文件。

您的解决方案不一定是最优雅的解决方案。这不是廉价的硬编码补丁,也不是丑陋的东西。这只是正常的代码。而且它将始终有效。但是,如果您不希望看到代码中的检查,只需将其放在类中就可以将其分开,唯一的目的是检查编写的可能性。实际上,无论您是否喜欢它,您都应该将它放在实用程序类中。

另一种解决方案是尝试将您的整个写入硬盘的代码放入。而且,如果您无法编写,则将跳过整个部分,并在catch部分中向您提供反馈信息。



 类似资料:
  • 创建目录权限 如果你想创建一个目录并授予777权限,你需要怎么做?查看Go的API文档我们可以这样写。 源文件为mkdir.go。 package main import ( "fmt" "os" ) func main() { err := os.MkdirAll("/tmp/gotest/", 0777) if err != nil { panic(er

  • 条件是,如果目录存在,则必须在该特定目录中创建文件,而不创建新目录。 下面的代码仅使用新目录创建一个文件,而不针对现有目录。例如,目录名类似于“GETDIRECTION”:

  • 我想检查一个现有的文件是否在一个特定的目录或子目录中。

  • 问题内容: 我想快速识别目录中的所有可写文件。快速的方法是什么? 问题答案:

  • 问题内容: 我有一堆长时间运行的脚本和应用程序,它们将输出结果存储在几个用户之间共享的目录中。我想要一种方法来确保在此共享目录下创建的每个文件和目录都自动具有权限。 我知道我可以在各种脚本的开头使用,但是我不喜欢这种方法,因为许多用户编写自己的脚本,可能会忘记自己设置umask。 我真的只希望文件系统在某个文件夹中时,以一定的权限设置新创建的文件和目录。这是可能吗? 更新 :我 认为 可以使用PO

  • 问题内容: 如果要在中创建文件,可以执行以下操作: 另外,我想用于创建文件。那我该怎么办呢?由于某种原因,该文件未在正确的目录中创建。 问题答案: 最好的方法是: