【问题标题】:Getting permission denied in Java when reading a file (Linux)读取文件时在Java中获得权限被拒绝(Linux)
【发布时间】:2016-10-03 18:21:50
【问题描述】:

大家好,我最近搬到 Ubuntu 从事一个项目。 我必须简单地从文件中读取,使用:

File root = new File(fileroot); File sourceFile = new File(root,filename);

但是当我运行应用程序时,我得到: error: error reading FilePath; FilePath (Permession denied).

(FilePath 是文件所在的路径,出于隐私考虑,我已将其隐藏)

我猜是操作系统引起的,因为在 Windows 上运行相同的代码不会给我任何错误。有没有办法解决这个问题?我的意思是一种直接从 Java 获取这些权限的方法,或者可能使用命令从终端更改它们?

提前感谢您的回答!

【问题讨论】:

  • 您可以以有权打开该文件的用户身份运行该程序。示例sudo java -jar myProg.jar.
  • 要研究的另一件事是这些文件是如何创建的。你看,在没有读取权限的情况下首先创建文件没有多大意义,迫使你稍后添加它们。因此,您可能正在查看系统上的 umask 设置;您处理的文件一开始就不是可读,这似乎很奇怪。所以,是的,这些答案可以帮助您修复这个问题;但您应该首先询问(并解决)“您为什么到达那里”。

标签: java linux file permissions permission-denied


【解决方案1】:

正如消息中所说,您可能没有读取该文件的权限。要进行故障排除,您可以添加:

System.out.println(sourceFile.getAbsolutePath());

找到您尝试读取的文件的确切位置,然后检查文件系统权限:

ls -la <path to your file>

验证您是否拥有r 权限,否则这是您得到的错误。

【讨论】:

  • 我得到:` -rw------- 1 root root 2044 ott 3 18:00 PATHTOTHEFILE` 我想我有读写权限吧?
  • 这意味着只有用户root可以阅读它。要修复它,您必须通过chown &lt;your user&gt; RaggruppatoreLibriPe‌​rAutore.java 更改文件的所有权或添加读取权限:chmod a+r RaggruppatoreLibriPe‌​rAutore.java
【解决方案2】:

执行此操作的一种方法是导航到文件并更改权限以允许每个用户读取文件。 最简单的是通过终端:

chmod +r /path/to/file

要查看所有不同的用途,请点击链接并了解 chmod。 https://codex.wordpress.org/Changing_File_Permissions

【讨论】:

  • 我设法用这个答案做了一些事情,现在这个错误已经消失了,但我在另一个文件上得到了另一个。将权限扩展到整个文件夹怎么样?
  • 您可以将递归参数“-R”与 chmod 一起使用(就像大多数 linux 命令一样)。您可以这样做:chmod +r -R /path/to/directory/ 请务必小心选择正确的路径。如果您对根目录执行此操作,您将整个系统的权限授予每个用户。这对于数据安全性来说是非常糟糕的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
相关资源
最近更新 更多