【问题标题】:IOException when creating a temporary file?创建临时文件时出现IOException?
【发布时间】:2014-08-14 12:31:14
【问题描述】:

我正在为 Atlassian Bamboo 创建一个任务插件。在任务执行的某个时刻,我想创建一个临时文件:

File temp = File.createTempFile(fileName.toString(), null, dir);
temp.deleteOnExit();

,其中:

fileName.toString() = e.g. "C:\Atlassian\bamboo-home\xml-data\build-dir\CMPT-CMPTP-JOB1\test.java"
dir = new File("temp");

在本地测试时,一切正常 - 文件已正确创建。但是,在我在服务器上部署插件并尝试执行上述代码后,我得到了一个 IOException:

java.io.IOException: The filename, directory name, or volume label syntax is incorrect
        at java.io.WinNTFileSystem.createFileExclusively(Native Method)
        at java.io.File.createTempFile(File.java:1879)

可能是什么原因?

附加信息:我很确定 dir.exists()

【问题讨论】:

  • 我已经看过这个问题并且我已经检查了前三个答案。仍然没有结果。
  • 你的服务器是 Unix 机器吗?如果是这样,则 C:/... 无效
  • 你的临时文件的前缀多么奇怪......

标签: java ioexception bamboo temporary-files


【解决方案1】:

文件名

"C:\Atlassian\bamboo-home\xml-data\build-dir\CMPT-CMPTP-JOB1\test.java"

在 Windows 上有效,但在 Unix 操作系统上无效。您将无法创建这样的(临时)文件,无论是指定为绝对名称/路径或文件,也不能仅相对于另一个文件夹。

如果您的操作系统是 Windows,您仍然不能使用完整路径(以 "C:" 之类的驱动器规范开头)创建为另一个文件夹的子文件夹。

【讨论】:

  • 我的本地计算机和服务器都在 Windows 上。
【解决方案2】:

路径的开头或结尾可以有空格,打印您的file.getAbsolutePath() 以查看 java 正在读取的当前路径。

【讨论】:

    【解决方案3】:

    dir 变量必须设置为目录temp 的完整(或相对)路径。 File.createTempFile 的第一个参数应该是临时文件的前缀(至少三个字母长。例如“test”)。这将在给定目录(由变量dir 指定)中创建一个“test.tmp”。

    查看the javadoc

    您可以使用dir.exists() 来检查目录dir 是否存在

    【讨论】:

    • 我猜是因为您计算机的文件结构与服务器上的不同。为避免此类问题,请尝试仅使用相对路径(例如:“./temp”将始终引用位于执行文件夹中的目录“temp”,无论是在计算机上还是在服务器上运行)
    • 规范说该值可能与临时文件夹无关“如果目录参数为空,则将使用系统相关的默认临时文件目录”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2011-11-27
    • 2012-07-13
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多