在特定服务器(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 );
我尝试过的事情
动态更改了java.io.tmpdir变量。 System.setProperty("java.io.tmpdir", "C:\\");
将-Djava.io.tmpdir=c:\\temp
添加到webnetwork lax文件中的无限制位置。
我尝试将webNetwork服务设置为以具有临时文件权限的指定用户身份运行,例如管理员。
确保我有可用的磁盘空间,并清理了c:\ windows \ temp文件夹。
确保将tmp环境变量设置为其默认值。
我还尝试从使用Run As Administrator
选项打开的命令提示符运行服务。
IOException
仍然存在。我有另一台运行相同代码的服务器没有问题(Windows Server 2012)。
是否有其他人对我可以尝试解决此问题的其他方面有任何想法?还是有关如何更彻底地调试问题的任何提示,以便掌握正在发生的事情?
答案 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
。