java - 当文件确实存在时抛出 FileNotFoundException

标签 java jvm io filenotfoundexception smb

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

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

\\remote-machine\dir\MyFileHere.txt

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

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

重新运行我的 java 文件,读取,正常。

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

当我将文件复制到本地机器 ( C:\MyFileHere.txt ) 时,没有抛出异常。

问题

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

我正在使用 Java 1.5

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

有人遇到过类似的事情吗?

其他问题?解决这个问题的好方法是什么?我开始考虑为这些文件提供服务并通过 http 读取它们的 tomcat 安装,但我认为这太多了,这就是为什么首先要使用 SMB 协议(protocol)的原因不是吗?并且我可能无法打开套接字。

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

如果是这种情况,难道不会抛出 SecurityException 吗?

非常感谢。

编辑

已解决。谢谢史蒂夫 W。

事实证明,该引擎是使用 ZeroG 的“LaunchAnywhere”启动的。因此,将创建一个 .exe 文件,该文件将运行具有指定应用程序的 JVM。

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

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

我使用 SysInternals 的“Process Explorer”来准确了解用于运行引擎应用程序的命令行。

一团糟!

感谢发布答案的人。

最佳答案

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

关于java - 当文件确实存在时抛出 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/486494/

相关文章:

java - Eclipse:JVM 共享库不包含 JNI_CreateJavaVM 符号

c++ - 0x50E2DF58 处的未处理异常 (msvcp120d.dll)

java - IBM-IEEE double 浮点字节转换

java - JAVA创建的JSP页面出现乱码

java - 如何在 Java 中命名 HashMap?

java - 如何确保 MultiResourceItemReader 在每次执行作业时刷新资源

java - JVM 字节码指令 Tload_<n> 与 Tload

Java 服务器应用程序闲置一段时间后速度变慢 (Windows)

file - 在perl6中,如何以段落模式读取文件?

linux - 使用 getchar() 在原始模式下捕获 Ctrl-Enter?