加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java临时文件多线程应用程序

发布时间:2020-12-15 04:08:30 所属栏目:Java 来源:网络整理
导读:我正在寻找一种简单的方法来生成一个临时文件,该文件在每个JVM的基础上总是以一个唯一的名称结束.基本上我想确保在多线程应用程序中,如果两个或多个线程试图在完全相同的时刻创建一个临时文件,它们将最终得到一个唯一的临时文件,并且不会抛出任何异常. 这是
我正在寻找一种简单的方法来生成一个临时文件,该文件在每个JVM的基础上总是以一个唯一的名称结束.基本上我想确保在多线程应用程序中,如果两个或多个线程试图在完全相同的时刻创建一个临时文件,它们将最终得到一个唯一的临时文件,并且不会抛出任何异常.

这是我目前的方法:

public File createTempFile(InputStream inputStream) throws FileUtilsException {
    File tempFile = null;
    OutputStream outputStream = null;
    try {
        tempFile = File.createTempFile("app",".tmp");
        tempFile.deleteOnExit();
        outputStream = new FileOutputStream(tempFile);
        IOUtils.copy(inputStream,outputStream);
    } catch (IOException e) {
        logger.debug("Unable to create temp file",e);
        throw new FileUtilsException(e);
    } finally {
        try { if (outputStream != null) outputStream.close(); } catch (Exception e) {}
        try { if (inputStream != null) inputStream.close(); } catch (Exception e) {}
    }
    return tempFile;
}

这对我的目标是完全安全的吗?我查看了以下网址的文档,但我不确定.

见java.io.File#createTempFile

解决方法

以下网址上发布的答案回答了我的问题.我发布的方法在多线程单JVM进程环境中是安全的.为了使其在多线程多JVM进程环境(例如集群Web应用程序)中安全,您可以使用Chris Cooper的想法,该想法涉及在每个JVM进程中的File.createTempFile方法的prefix参数中传递唯一值.

Is createTempFile thread-safe?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读