迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

在 Java 中创建临时文件

作者:迹忆客 最近更新:2023/08/12 浏览次数:

本文将演示如何使用不同的替代方法在 Java 中创建临时文件。

我们使用 Java 中的临时文件来存储程序执行期间的临时信息、释放资源或将信息传递给程序的其他部分。


在 Java 中使用 Java Legacy IO 创建临时文件

我们可以使用 java.io 包中的标准文件库在 Java 中创建临时文件。我们使用一种 createTempFile() 方法来制作临时文件。

让我们一一了解这两种多态形式。

在 Java 中创建临时文件的第一个多态形式的方法

我们可以在第一个实现中传递两个参数:prefixsuffix。通过将前缀和后缀添加到标识符来生成文件名。

JVM 本身会生成标识符。临时文件的名称类似于下面给出的形式。

prefixIDsuffix

当我们使用这种方法创建临时文件时,临时文件存储在临时文件的默认目录中。用于存储临时文件的默认目录可能因操作系统而异。

\tmp 目录是 Linux 操作系统中临时文件的默认目录。如果我们使用 Windows 平台,默认目录一般是 C:\\WINNT\\TEMP

让我们看看 createTempFile() 方法的第一种多态形式的定义。

public static File createTempFile(String prefix,
                String suffix)
                        throws IOException

正如我们所见,这个方法抛出了 IOException。因此,在使用此方法时,我们应该使用 try-catch 块。

如果我们不想使用 try-catch 块,我们的方法应该抛出相同的异常以便稍后由我们或 JVM 处理它。

该方法返回一个 File 对象,其中包含创建的临时文件的绝对路径。

代码:

import java.io.File;
import java.io.IOException;

public class tempFile {
    public static void main(String[] args) {
        try
        {
            File file = File.createTempFile("myTemp", ".tmp");
            System.out.print(file);
            file.deleteOnExit();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}

输出:

/tmp/myTemp14969130618851885659.tmp

如果我们不提供任何后缀参数,JVM 会添加默认的 .tmp 后缀。但是,我们不能省略前缀参数,它的长度至少应为三个字符。

我们使用了 deleteOnExit() 方法,在 JVM 退出时删除文件。我们应该始终在使用结束时删除临时文件作为一种好习惯。

Java 中创建临时文件的方法的第二种多态形式

我们可以在 createTempFile() 方法的第二个多态实现中提供三个参数。正如我们上面讨论的,前两个参数是相似的。

第三个参数是一个 File 对象,我们可以使用它来为我们的临时文件提供特定的路径。如果我们将 null 传递给第三个参数,则此实现的工作方式与第一个相同。

让我们看看 createTempFile() 方法的第二种多态形式的方法定义。

public static File createTempFile(String prefix,
                String suffix,
                File directory)
                        throws IOException

此形式的命名约定、异常和所有其他工作方式与该方法的先前形式相同。

让我们看看使用这种方法创建临时文件的代码。

import java.io.File;
import java.io.IOException;

public class tempFile {
    public static void main(String[] args) {
        try
        {
            File path =  new File("/home/stark/eclipse-workspace-java/JavaArticles");
            File file = File.createTempFile("myTemp",".tmp", path);
            System.out.print(file);
            file.deleteOnExit();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}

输出:

/home/stark/eclipse-workspace-java/JavaArticles/myTemp10717312880412401466.tmp

我们应该注意,临时文件是在代码中提供的目录中创建的,而不是在默认目录中创建的。


在 Java 中使用 Java NIO 库创建临时文件

我们可以使用替代的 java.nio.file.Files 库在运行时创建临时文件。这个库的行为类似于我们讨论过的传统 Java IO 库。

NIO 库还提供了 createTempFile() 方法的两种多态形式。两种多态形式的区别在于,另一种让我们传递文件路径。

该文件的名称是使用前缀和后缀以及类似于 Java 传统 IO 库的标识符创建的。如上所述,临时文件的默认路径也与 Java 遗留的 IO 库相同。

用于创建临时文件的传统 Java IO 方法与 NIO 库之间的显着区别在于,我们使用 NIO 库可以更好地控制文件的安全参数。

让我们看看 createTempFile() 方法的两种多态形式的方法定义。

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

上面给出的多态形式是第一种形式。下面给出第二种多晶型。

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

我们可以在这两种多态形式中找到 FileAttribute 参数。我们可以使用这个参数来提供文件级属性的列表,例如权限。

这些方法返回一个 Path 对象,该对象表示该方法创建的临时文件的路径。

让我们看看使用这个库创建临时文件的代码。

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;


public class tempFile2 {
    public static void main(String [] args)
    {
        try 
        {
            Path path = Paths.get("/home/stark/eclipse-workspace-java/JavaArticles");

            Set<PosixFilePermission> filePerm = PosixFilePermissions.fromString("rwxrwxrwx");
            FileAttribute<Set<PosixFilePermission>> fileAttr = PosixFilePermissions.asFileAttribute(filePerm);

            Path temp = Files.createTempFile(path, "myTemp", ".tmp", fileAttr);
            System.out.print(temp);

            File file = new File(path.toString());
            file.deleteOnExit();
        } 
        catch (IOException e) 
        {

        }
    }
}

该代码使用了 createTempFile() 方法的所有四个参数。我们可以根据需要省略参数。

但是,请记住前缀参数不能省略。

如果我们省略 Path 参数,我们将使用方法的第一种多态形式,临时文件将保存到临时文件的默认目录。

如果我们省略 FileAttribute 参数,将使用默认权限创建文件。

该代码还使用 PosixFilePermissions 库使用简单的字符串定义文件权限。我们可以在这里阅读更多关于它的信息。

我们应该注意到 NIO 库没有自己的 deleteOnExit() 方法。因此,代码使用遗留的 IO 文件库来删除临时文件。

输出:

/home/stark/eclipse-workspace-java/JavaArticles/myTemp5731129001304860331.tmp

在 Java 中创建临时文件时要处理的隐藏异常

虽然我们已经看到用于创建临时文件的 Java 遗留 IO 库和 NIO 库方法抛出 IOException,但也有一些隐藏的异常我们应该牢记。

这些异常是隐藏的,因为它们不是使用方法本身直接引发的。由于方法内部的其他执行,这些反而被抛出。

  1. SecurityException:由于操作系统不允许程序创建临时文件,我们可以得到这个异常。
  2. IllegalArgumentException:当我们传递一些 Java 虚拟机无法识别的奇怪参数时,我们会得到这个异常。
  3. FileAlreadyExistsException:如果我们指定 CREATE_NEW 文件属性选项,并且文件已经存在,我们会收到此异常。
  4. UnsupportedOperationException:当我们指定了一个无法识别的文件属性时,该方法会抛出这个异常。

结论

在本文中,我们看到了两个不同的库来在 Java 中创建临时文件。Java 遗留 IO 库被广泛使用,但我们可以使用 NIO 库对文件权限进行更严格的控制。

但是,如果我们不指定文件是使用默认权限创建的,则它可能具有高度受限的权限。

上一篇:Java 中从 java.util.date 转为 java.sql.date

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Java 日期中获取当前时间戳

发布时间:2023/08/11 浏览次数:177 分类:Java

这篇文章是关于获取 Java Date 中的当前时间戳的。本文介绍如何获取 Java 中的当前时间戳,并列出一些示例代码以了解该主题。

获取 Java 中的当前年份

发布时间:2023/08/11 浏览次数:145 分类:Java

在本文中,讨论了如何在 Java 中获取当前年份的不同方法。在 Java 中使用 java.Util.Date 类获取当前年份

如何在 Java 中为日期增加一天

发布时间:2023/08/11 浏览次数:156 分类:Java

在本文中,我们将学习如何在 Java 中将日期增加一天。这可以通过使用各种方法来完成,例如 plusDays 方法,Calendar 类方法,向 Date 对象添加毫秒以及 Instant class 方法。如果你使用的是 Java 1.8 或

如何在 Java 中比较两个日期

发布时间:2023/08/11 浏览次数:190 分类:Java

在本文中,我们将学习多种方法来比较 Java 中的日期。为了获得理想的结果,我们可以用以下的方法,即 before(),after(),equals() 和 compareTo()。

如何在 Java 中从数组创建数组列表

发布时间:2023/08/11 浏览次数:134 分类:Java

本文将介绍在 Java 中从数组创建数组列表的不同方法。在 Java 中,有三种不同的方法可以将数组转换为数组列表,如 Arrays.asList()、Collections.addAll() 和 add()。

如何在 Java 中打印 ArrayList

发布时间:2023/08/11 浏览次数:154 分类:Java

在本文中,我们将介绍在 Java 中打印 ArrayList 的多种方法。我们的 Arraylist 将包含一个名为 ModelClass 的类对象,它有一个变量 name 和 getter/setter 函数。

如何在 Java 中创建二维 ArrayList

发布时间:2023/08/11 浏览次数:94 分类:Java

在本文中,我们将介绍两个关于如何创建二维 ArrayList 的 Java 方法。在 Java 中使用固定大小的 ArrayList 创建二维 ArrayList

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便