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

问题描述 投票:3回答:2

在特定服务器(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选项打开的命令提示符运行服务。

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

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

java file file-io io inputstream
2个回答
4
投票

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

我刚刚使用这个工具找出了JVM崩溃问题。

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


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

© www.soinside.com 2019 - 2024. All rights reserved.