Java中无法创建临时文件

3
我有一个Java方法,它接受字节数组和字符串值作为参数并返回一个文件对象。这是代码:
public File createTempFile(byte[] byteArray, String fileName) throws IOException {
    String prefix = FilenameUtils.getBaseName(fileName);
    String suffix = getMimeType(byteArray);
    File tempFile = File.createTempFile(prefix, suffix, null);
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(tempFile);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    fos.write(byteArray);
    fos.close();
    return tempFile;
}

当我尝试像这样运行它时:
File myFile = tiedostoService.createTempFile(tiedosto.getContent(), attachment.getFileName());

我遇到了如下的IOException异常。
java.io.IOException: Unable to create temporary file, C:\Users\ROSHAN~1\AppData\Local\Temp\kuva1068864619970584773image\png
at java.io.File$TempDirectory.generateFile(File.java:1921)
at java.io.File.createTempFile(File.java:2010)

从堆栈跟踪中可以看出,它试图创建一个文件,例如C:\Users\ROSHAN~1\AppData\Local\Temp\kuva1068864619970584773image\png而不是C:\Users\ROSHAN~1\AppData\Local\Temp\kuva1068864619970584773image.png

我该如何解决这个问题?非常感谢任何帮助。

2个回答

4

'image/png'是一种Mime类型。在这里可以查看Java中的所有Mime类型

编写一个工具,将Mime类型转换为文件扩展名。希望这能有所帮助。


getMimeType(byteArray).substring(getMimeType(byteArray).lastIndexOf("/") + 1); 这行代码对我来说解决了问题,它将mimetype中的最后一个字符串分割出来,作为文件扩展名。例如,从 "image/png" 中获取 "png"。 - Roshan Upreti

1
我认为你的后缀字符串中有一个额外的 \,你能否尝试调试并查看后缀的实际值?
我尝试运行了以下代码:
String suffix = "\\png";

我得到了同样的错误,但如果我这样做

String suffix = ".png";

创建临时文件没有错误,注意需要在后缀中添加一个点...


结果表明,我只需要将最后一个字符串从后缀处分割开来,在这种情况下,我简单地使用了substring().lastindexof()方法。之后它完美地运行了。 - Roshan Upreti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接