尽管chmod 777,java.io.FileNotFoundException(权限被拒绝)

在Tomcat上编写Grails应用程序时,我遇到了一些奇怪的问题。

创建简单的测试控制器后,我想在包com中编写测试内容

package com.domain.controller import java.io.File; import java.io.PrintWriter; class TestController { def index() { // test try { PrintWriter writer = new PrintWriter("/home/user/domains/domain.com/public_html/the-file-name.txt"); writer.println("The first line"); writer.println("The second line"); writer.close(); } catch (IOException e) { throw new RuntimeException(e); } } } 

我得到一个例外:

类java.io.FileNotFoundException消息/home/user/domains/domain.com/public_html/the-file-name.txt(Brakdostępu)

我已将chmod设置为777到/home/user/domains/domain.com/public_html/ 。 并且tomcat7.tomcat7是所有者。 我还试图创建这个文件,访问权限777和所有权设置为tomcat7,但我仍然得到一个例外:

 ls -al /home/user/domains/domain.com/public_html razem 16 drwxrwxrwx 3 tomcat7 tomcat7 4096 01-08 23:25 . drwxr-xr-x 8 user user 4096 12-16 17:14 .. -rwxrwxrwx 1 tomcat7 tomcat7 0 01-08 23:25 the-file-name.txt 

我应该在OS中遇到什么条件?

如果有人能澄清问题,我将非常感激。


编辑

我在/path1下创建了目录,设置为777.文件存储完美。 我还在/path2/testdir下创建了目录,但是path2没有权限777和chown。 它也有效。 我还用字符测试了testdir ._ ,也有效。

我很调查,无法理解这种行为。

确保您还具有对所有父目录的读取和执行访问权限。

示例: chmod o+x /home/user

最后我解决了这个问题。 路径中的一个目录没有其他组的可执行权限,因此@JustinKSU建议,没有可能通过整个路径。

chmod o+x /home/user解决了这个问题。

发生FileNotFoundException :

当具有指定路径名的文件不存在时。 如果文件存在但由于某种原因无法访问,例如当尝试打开只读文件进行写入时,也会抛出它。

文件在那里,它根据您发送的内容具有写权限。

在某些情况下,如果您尝试访问以进行读/写操作的文件被另一个程序打开,则会发生此错误。 使用lsof | grep the-file-name.txt lsof | grep the-file-name.txt以查看它是否已打开。

我在Jenkins工作中的构建过程中遇到了这个问题。 我已经将jenkins用户添加到tomcat7组,但只要应该将工件复制到Tomcat实例目录,Jenkins作业就会失败。

事实certificate,我需要解决的所有问题是重启Jenkins服务。