SimpleDateFormat не работает для createTempFile - PullRequest
0 голосов
/ 02 апреля 2019

Я создаю новый 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 голосов
/ 02 апреля 2019

Кажется, является частью самого метода createTempFile.Я просматривал документы, и там говорится: «После внесения этих изменений имя нового файла будет сгенерировано путем объединения префикса, пяти или более внутренних сгенерированных символов и суффикса».Кажется, он генерирует случайные символы в конце, чтобы гарантировать уникальность.

То, что вы можете сделать, я думаю, это сохранить файловый объект где-то там, где вы можете получить к нему доступ, где вам нужно, и просто получить первые 6 символов, которые должны быть датой, или вы можете просто создать обычный файл.Также возможно, что, возможно, вы можете просто переименовать временный файл после создания, чтобы использовать только первые 6 символов?Не совсем уверен

0 голосов
/ 02 апреля 2019

File.createTempFile позволяет указать префикс и суффикс для созданного файла, но вы не указываете полное имя, так как в его имени есть случайная часть. Если вы хотите, чтобы файл во временной директории имел именно это имя, вам нужно использовать что-то вроде этого:

File image = new File(
        System.getProperty("java.io.tmpdir") , 
        tempName + 
        ".png"
    );
0 голосов
/ 02 апреля 2019

Простой ответ, вы не можете изменить имя файла, созданного с помощью 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. Ни этот метод, ни какой-либо из его вариантов не вернут тот же абстрактный путь снова в текущем вызове виртуальной машины.
...