【问题标题】:Can I use File.createTempFile() to create a file with a non-random name我可以使用 File.createTempFile() 创建一个非随机名称的文件吗
【发布时间】:2014-04-21 07:12:57
【问题描述】:

我想创建一个具有特定名称的临时文件(在应用程序关闭时消失)。我正在使用此代码:

f = File.createTempFile("tmp", ".txt", new File("D:/"));

这会创建类似D:\tmp4501156806082176909.txt 的内容。我只想要D:\tmp.txt。我该怎么做?

【问题讨论】:

    标签: java


    【解决方案1】:

    在这种情况下,不要使用createTempFilecreateTempFile 的重点是生成“垃圾”名称以避免名称混淆。

    您应该使用File.createNewFile() 或直接写入文件。哪个更适合您的用例。然后,您可以调用 File.deleteOnExit() 让 VM 负责清理文件。

    【讨论】:

      【解决方案2】:

      如果您只想创建tmp.txt,则只需使用createNewFile() 创建文件,而不是createTempFile()createTempFile 用于创建在反复创建时不应具有相同名称的临时文件。

      还可以查看this post,它展示了一种创建文件的非常简单的方法。

      拍了上面提到的帖子:

      String path = "C:"+File.separator+"hello"+File.separator+"hi.txt";
      //(use relative path for Unix systems)
      File f = new File(path);
      //(works for both Windows and Linux)
      f.mkdirs(); 
      f.createNewFile();
      

      【讨论】:

      • 我认为以这种方式使用File.separator 不是一个好习惯。它可能会导致可移植性问题(具体来说,在一个操作系统上编译的类会将 File.separator 内联为该操作系统的值,因此在不同的操作系统上运行时它可能无法按预期工作)。最好使用始终有效的new File(dirName, childName)。在您的情况下,new File(new File("C:", "hello"), "hi.txt");。不确定new File("C:"),我从未尝试过(不是 Windows 的普通用户)。
      【解决方案3】:

      尝试正则表达式

      fileName = fileName.replaceAll("\\d", "");
      

      【讨论】:

        猜你喜欢
        • 2018-09-08
        • 2011-04-25
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 2020-09-12
        • 1970-01-01
        • 2020-12-01
        • 1970-01-01
        相关资源
        最近更新 更多