1

我在我们的开发域中遇到了一个奇怪的问题。所以基本上我们的 java 应用程序目前在 jdk1.6 上运行,我们计划将其升级到 1.8 。所以目前以下代码在 1.6 中运行良好,但返回异常

java.io.IOException: Unable to create temporary file, C:\Users\xxxxx\xxxxx\Local\Temp\XYZDirectory at java.io.File$TempDirectory.generateFile(File.java:1921) at java.io.File.createTempFile(File.java:2010) at java.io.File.createTempFile(File.java:2070)

在 1.8 中。代码如下 -

File file = null;
    try {
        file =
            File.createTempFile("XYZ", "Directory" + System.getProperty("file.separator"));
        file.delete();
        file.mkdirs();
    } catch (final IOException e) {
        e.printStackTrace();
    }
    return file;

我们希望我们的产品同时兼容 1.6 和 1.8 。

经过一番研究,我发现我可能不得不使用以下Files上课方法

public static Path createTempDirectory(Path dir,
                   String prefix,
                   FileAttribute<?>... attrs)
                            throws IOException

所以我有以下疑问 -

1) 为什么File.createTempFile在 1.8 中抛出异常?

2)这两种方法的概念区别是什么?

3)如果File.createTempFile不再支持它为什么不被弃用?

4)解决这个问题的合适方法是什么?换句话说,我可以根据安装在 VM 中的 jdk 版本进行编程检查以使用适当的方法,然后继续创建临时目录,但这是解决此问题的最佳方法吗?

4

1 回答 1

-3

这适用于两者:

        File file = null;
    try {
        file = File.createTempFile("XYZ", "Directory");
        file.delete();
        file.mkdirs();
        System.out.println(file);
    } catch (final IOException e) {
        e.printStackTrace();
    }
    return file;

我不确定为什么连接文件分隔符会失败,但这就是异常的原因。我的猜测是分隔符是由 File 类以编程方式插入的,而您手动添加一个会导致失败。

话虽如此,下面是推荐的 Java 7 中引入的 NIO 版本:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class TempStackTest {
    public Path getTempFilePath() {
        Path path = null;
        try {
            path = Files.createTempFile("XYZ", "Directory");
            path.toFile().delete();
        } catch (final IOException e) {
            e.printStackTrace();
        }
        return path;
    }
}
于 2016-03-15T15:28:12.367 回答