我遇到了这个奇怪的问题。
我正在尝试读取位于另一台机器中作为共享资源的文件。
\remote-machinedirMyFileHere.txt
当我运行一个独立的应用程序(一个16行的Java文件)时,一切都很好。但是,当我尝试从服务器“引擎”中使用相同的类和方法读取相同的文件(这是一个应用引擎,非常类似于Java EE应用服务器,您可以在其中运行Java程序),就会抛出“FileNotFoundException”。
我以为我需要某种权限,因此把资源映射成驱动器:K:。
重新运行我的Java文件,读取正常。
重新在“引擎”中运行我的Java文件 -> 文件未找到异常。
当我将文件复制到本地计算机上(C:MyFileHere.txt),不会引发异常。
问题
这可能是什么导致了FileNotFoundExcecption?
我正在使用Java 1.5。
据我所知,引擎基本上是透明地使用Java的。
有人面临过类似的情况吗?
额外问题?有什么好的解决方法吗?我正在考虑安装tomcat来通过http读取这些文件,但我认为这太多了,这就是SMB协议首先存在的原因吧?而且我可能无法打开套接字。
安全管理员可能是原因(我以前从未使用过,但我知道它的存在)
如果出现这种情况,会抛出SecurityException异常吗?
非常感谢。
编辑
已解决。谢谢Steve W。
事实证明,这个引擎是由ZeroG的“LaunchAnywhere”启动的。因此,将创建一个.exe,然后使用指定的应用程序运行JVM。
这个应用程序本身是启动器。当它启动引擎时,不知道为什么或怎么样(我无法理解),JVM进程的所有者是SYSTEM用户。正如Steve指出的那样,这个用户没有网络访问权限,因此无法从共享资源或映射驱动器中读取。
解决方法(在我向制造商报告之前)是创建一个 .cmd 文件手动启动引擎。由于它将手动启动,用户可以访问网络。
我使用了SysInternals的“Process Explorer”来确切地知道运行引擎应用程序所使用的命令行。
真糟糕!
感谢那些发布答案的人。