java.io.IOException:系统找不到指定的路径

时间:2014-03-18 20:44:18

标签: java file file-io io inputstream

在特定服务器(Windows 2012服务器R2)上,我无法创建临时文件。我每次尝试都会收到以下错误。

java.io.IOException: The system cannot find the path specified
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(Unknown Source)
etc..

每次运行以下代码时都会发生错误:

InputStream inputStream = portalBean.createPDF( sessionID, foCode );

我尝试过的事情

  1. 动态更改了java.io.tmpdir变量。 System.setProperty("java.io.tmpdir", "C:\\");

  2. -Djava.io.tmpdir=c:\\temp添加到webnetwork lax文件中的无限制位置。

  3. 我尝试将webNetwork服务设置为以具有临时文件权限的指定用户身份运行,例如管理员。

  4. 确保我有可用的磁盘空间,并清理了c:\ windows \ temp文件夹。

  5. 确保将tmp环境变量设置为其默认值。

  6. 我还尝试从使用Run As Administrator选项打开的命令提示符运行服务。

  7. IOException仍然存在。我有另一台运行相同代码的服务器没有问题(Windows Server 2012)。

    是否有其他人对我可以尝试解决此问题的其他方面有任何想法?还是有关如何更彻底地调试问题的任何提示,以便掌握正在发生的事情?

2 个答案:

答案 0 :(得分:4)

可用于调试此工具的一个工具是来自系统内部工具包的process monitor。步骤是:添加一个过滤器来监视你的进程(我认为你的情况是javaw.exe),在错误发生后,通过进程监视器日志中的文件活动,你可以找到进程是如何进行的查找文件以及进程搜索的目录。如果进程在错误的目录中搜索,则可以从日志中找到它。

我刚刚用这个工具来解决今天的JVM崩溃问题。

根据您的问题的描述,我想在您的代码中间更改了流程的路径变量,使用另一个工具process explore您可以查看流程的路径变量,它可能会有所帮助。

答案 1 :(得分:1)

尝试在主目录下的某个位置创建一个目录:

final Path tmpdir = Paths.get(System.getProperty("user.home"), "tmp");
Files.createDirectories(tmpdir);
System.setProperty("java.io.tmpdir", tmpdir.toAbsolutePath().toString());

然后在那里尝试Files.createTempFile()

请注意,如果Files.createDirectories()引用的是不属于目录的现有文件,则会获得FileAlreadyExistsException