奇怪的File.list()行为

时间:2013-12-19 18:43:53

标签: java oracle unix

我在Oracle DB 11g中有一个Java存储过程。 Oracle中的Java版本是v1.5x。它的作用是读取特定Unix目录中的文件。我以前做过这种事,但从不反对这个Unix目录。这是我第一次遇到这个问题。

问题是该目录上的list()仅将一个条目返回到捕获结果的数组中。是的,这个主目录中还有许多其他文件和子目录。

在此目录中为我想要获取的文件执行ls -ltrabF会产生以下结果:

-rwxrwxrwx   1 msdwjj   staff      26134 Dec 18 16:45 myfile.pdf

在包含我得到的相同文件的另一个目录上执行相同的ls命令:

-rw-r--r--   1 msdwjj   staff      26134 Dec 16 16:02 myfile.pdf

然而,我可以在后一种情况下阅读,但不能在前一种情况下阅读。它可能是目录的所有者吗?如果是这样,为什么我能够访问其中的一个文件而不是其他文件?

我一直在与DBA合作,他已经打开了该目录及其中所有文件的权限,并且仍然只返回这一个条目 - 总是相同的条目。我还使用目录上的canRead()检查了目录的可读性,它返回true。

这不是一个过滤问题,因为我已经确认list() - 没有传入的过滤器 - 总是只返回这一个条目。我写了一个过滤器并将其删除只是为了检查它。

如果我从一个从Unix命令提示符运行的程序运行代码,它可以正常工作。如果我只是更改这个Java SP的目录,它就可以正常工作。

如果有人能想到其他任何事情来检查,我会非常感激。是否有其他Java方法尝试使用除了提到的那些?在Unix中有什么东西我可能会问DBA有人能想到的吗?

1 个答案:

答案 0 :(得分:0)

可能是由于Unix文件权限以外的访问控制框架,例如SELinux。