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

Posted

技术标签:

【中文标题】java.io.IOException:系统找不到指定的路径【英文标题】:java.io.IOException: The system cannot find the path specified 【发布时间】:2014-04-24 19:09:55 【问题描述】:

在特定服务器(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)。

还有其他人对我可以尝试解决此问题的其他方法有任何想法吗?或者关于如何更彻底地调试问题以了解正在发生的事情的任何提示?

【问题讨论】:

这是 Java 6 还是 Java 7? @fge Java 7 我相信。 2012服务器中,tmp文件位于哪个文件夹? @AndreaTaroni86 默认C:\Windows\Temp 一件事,你确定你的代码真的使用了临时目录吗? 【参考方案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

【讨论】:

【参考方案2】:

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

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

根据你的问题描述,我猜是你的代码中间改了进程的路径变量,用另一个工具process explore你可以查看进程的路径变量,可能会有帮助。

【讨论】:

以上是关于java.io.IOException:系统找不到指定的路径的主要内容,如果未能解决你的问题,请参考以下文章

java.io.IOException: Cannot run program “del“: CreateProcess error=2, 系统找不到指定的文件。

weblogic在阶段找不到.ear,但它在文件系统上

安装没有成功。无法安装应用程序。 java.io.IOException:仅在内部请求,但空间不足

ClientAbortException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。,进不了Debug,访问不到方法

java创建文件夹以及文件

maven新建项目报错,找不到SpringServletContainerInitializer类