SimpleDateFormat无法创建createTempFile

时间:2019-04-01 21:50:17

标签: java android file simpledateformat

我正在创建新的TmepFile,并希望将格式设置为“ yyyyMMdd”,但是直到createTempFile才可以使用。

private File createFile() throws IOException{
        String tempName = new SimpleDateFormat("yyyyMMdd").format(new Date());
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        Log.d("e",tempName);

        File image = File.createTempFile(
                tempName,
                ".png",
                storageDir

        );
        Log.d("e",image.getName());
        mCurrentPhotoPath = image.getAbsolutePath();
        return image;

    }

日志

D/e: 20190402
D/e: 201904021419980777854538831.png

3 个答案:

答案 0 :(得分:0)

简单的答案,您无法更改使用createTempFile创建的文件的名称。每个文件都有一个默认的唯一名称。

根据https://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile(java.lang.String,%20java.lang.String,%20java.io.File)的回答很长:

  1. 在调用此方法之前,由返回的抽象路径名表示的文件不存在,并且
  2. 此方法及其任何变体在虚拟机的当前调用中都不会再次返回相同的抽象路径名。

答案 1 :(得分:0)

似乎是createTempFile方法本身的一部分。我正在看文档,它说:“一旦进行了这些调整,将通过连接前缀,五个或更多内部生成的字符以及后缀来生成新文件的名称。” 看起来它会在最后生成随机字符以确保唯一性。

我想您可以将文件对象存储在您可以访问它的位置,只需获取前6个字符(应为日期)即可,也可以只创建一个普通文件。还有可能也许您可以在创建临时文件后仅重命名前6个字符就对其重命名?不太确定

答案 2 :(得分:0)

File.createTempFile可让您为创建的文件指定前缀和后缀,但由于其名称中包含随机部分,因此您无需指定全名。如果要在temp目录中有一个确切名称的文件,则需要使用类似以下内容的文件:

File image = new File(
        System.getProperty("java.io.tmpdir") , 
        tempName + 
        ".png"
    );