文件存在时抛出FileNotFoundException

我正面临这个奇怪的问题。

我正在尝试将位于另一台计算机上的文件作为共享资源读取:

\\remote-machine\dir\MyFileHere.txt 

当我运行一个独立的应用程序(16行java文件)时,一切都很好。 但是当我尝试使用相同的类和相同的方法从服务器“引擎”(这是一个应用程序引擎,就像你可以运行java程序的Java EE应用程序服务器)中读取相同的文件时,“FileNotFoundException”被抛出。

我虽然我会获得某种权限,所以我将资源映射为驱动器:K:\

重新运行我的java文件,读取,罚款。

在“引擎” – > FileNotFoundException中重新运行我的java文件。

当我将文件复制到本地计算机(C:\ MyFileHere.txt)时,不会抛出任何exception。

可能导致此FileNotFoundExcecption的原因是什么?

我正在使用Java 1.5

据我所知,引擎几乎透明地使用java。

有人遇到过类似的事吗?

补充问题? 这对解决方法有什么好处? 我开始考虑提供服务这些文件的tomcat安装并通过http读取它们,但我认为这太多了,这就是为什么SMB协议首先出现的原因不是吗? 也许我无论如何都无法打开sockets。

安全管理器可能是原因(我之前从未使用过,但我知道它存在)

如果出现这种情况,是否会抛出SecurityException?

非常感谢。

编辑

解决了。 谢谢史蒂夫W.

事实certificate,该引擎是与ZeroG的“LaunchAnywhere”一起发布的。 因此,创建一个.exe,然后将使用指定的应用程序运行JVM。

这个应用程序本身就是Launcher。 当它启动引擎时,以某种方式(我无法弄清楚为什么或如何)拥有JVM进程的用户是SYSTEM。 史蒂夫指出,该用户没有NETWORK访问权限,因此无法从共享资源或映射驱动器中读取。

解决方法(当我向制造商报告时)是创建一个.cmd文件来手动启动引擎。 由于它将手动启动,因此用户可以访问网络。

我使用了SysInternals的“Process Explorer”来确切地知道用于运行引擎应用程序的命令行。

真是一团糟!

感谢那些发布答案的人。

共享资源是否受用户名和密码保护? 如果是这样,您的应用程序引擎是否以该用户身份运行? 如果您的应用程序引擎作为Windows服务运行,则Windows服务无法作为“本地系统帐户”运行。 此帐户无法访问网络。 您必须将服务配置为以具有访问共享驱动器权限的用户身份运行。

仔细检查文件是否真的被称为“MyFileHere.txt”而不是“MyFileHere.txt.txt”如果你隐藏文件的扩展名,这是一个很容易错过的错误

您是否检查过服务器上的事件日志以查看它是否被拒绝? 可能是程序在不同的用户帐户下运行,而不是您的想法。

我不熟悉Java,但我知道我编写的一些程序我必须允许网络服务访问资源。

实际上,我看到你现在已经选择了正确的答案。 哦,这和我的答案一样:)很酷!

我有一次类似的问题。 我认为这与java解析远程文件URI的方式有关。 尝试以下操作,看看它是否有效:

文件:////remote-machine/dir/MyFileHere.txt

我使用下面的示例来validation我的框中共享文件夹中是否存在文件并且工作正常:

 public static void main(String[] args) throws URISyntaxException{ URI uri = new URI(args[0]); //args[0] = File:////remote-machine/dir/MyFileHere.txt File f = new File(uri); System.out.print(String.format("File %1$s Exists? %2$s", args[0],f.exists())); }