Что лучший способ состоит в том, чтобы генерировать уникальное имя и короткое имя файла в Java

Не могли бы вы предоставить представляемый вид? Возможно, вы можете попробовать использовать атрибут HTML name или Xpath здесь:

 click_on("Ajouter une taille")

В зависимости от представления вы можете использовать:

find("[id='add_size']").click
70
задан Reddy 24 September 2012 в 11:36
поделиться

10 ответов

Ну, вы можете использовать версию с тремя аргументами: File.createTempFile (префикс строки, суффикс строки, каталог файлов) , который позволит вам поместить его туда, где вы хотите лайк. Если вы не скажете это, Java не будет обрабатывать это иначе, чем любой другой файл. Единственным недостатком является то, что имя файла гарантированно должно быть длиной не менее 8 символов (минимум 3 символа для префикса, плюс 5 или более символов, сгенерированных функцией).

Если это слишком долго для вас, я полагаю, вы могли бы всегда просто начинайте с имени файла «a» и просматривайте «b», «c» и т. д., пока не найдете тот, который еще не существует.

87
ответ дан 24 November 2019 в 13:21
поделиться

Я использую текущие миллисекунды со случайными числами

т.е.

Random random=new Random();
String ext = ".jpeg";
File dir = new File("/home/pregzt");
String name = String.format("%s%s",System.currentTimeMillis(),random.nextInt(100000)+ext);
File file = new File(dir, name);
0
ответ дан 24 November 2019 в 13:21
поделиться

Похоже, у вас есть несколько решений для создания уникального имени файла, поэтому я оставлю это в покое. Я бы проверил имя файла следующим образом:

    String filePath;
    boolean fileNotFound = true;
    while (fileNotFound) {
        String testPath = generateFilename();

        try {
            RandomAccessFile f = new RandomAccessFile(
                new File(testPath), "r");
        } catch (Exception e) {
            // exception thrown by RandomAccessFile if 
            // testPath doesn't exist (ie: it can't be read)

            filePath = testPath;
            fileNotFound = false;
        }
    }
    //now create your file with filePath
0
ответ дан 24 November 2019 в 13:21
поделиться

Как насчет генерации на основе метки времени, округленной до ближайшей миллисекунды, или любой необходимой вам точности ... затем используйте блокировка для синхронизации доступа к функции.

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

Или, если вы предпочитаете делать это без блокировок, используйте шаг по времени плюс идентификатор потока и убедитесь, что функция длится дольше миллисекунды или ждет, пока она сделает это.

0
ответ дан 24 November 2019 в 13:21
поделиться

Почему не просто использовать что-то на основе метки времени ..?

2
ответ дан 24 November 2019 в 13:21
поделиться

Если у вас есть доступ к базе данных, вы можете создать и использовать последовательность в файле название.

select mySequence.nextval from dual;

Он будет гарантированно уникальным и не должен становиться слишком большим (если вы не качаете тонну файлов).

5
ответ дан 24 November 2019 в 13:21
поделиться

Посмотрите файл javadoc , метод createNewFile создаст файл, только если он не существует, и вернет логическое значение, чтобы сказать, был ли файл создан.

Вы также можете использовать метод существующие ():

int i = 0;
String filename = Integer.toString(i);
File f = new File(filename);
while (f.exists()) {
    i++;
    filename = Integer.toString(i);
    f = new File(filename);
}
f.createNewFile();
System.out.println("File in use: " + f);
7
ответ дан 24 November 2019 в 13:21
поделиться

Я использую метку времени

] т.е.

new File( simpleDateFormat.format( new Date() ) );

И инициализировать simpleDateFormat что-то вроде:

new SimpleDateFormat("File-ddMMyy-hhmmss.SSS.txt");

РЕДАКТИРОВАТЬ

Как насчет

new File(String.format("%s.%s", sdf.format( new Date() ),
                                random.nextInt(9)));

Если количество файлов, созданных за одну секунду, слишком велико.

Если это так, и имя не имеет значения

 new File( "file."+count++ );

: P

12
ответ дан 24 November 2019 в 13:21
поделиться

Я бы использовал библиотеку Apache Commons Lang ( http://commons.apache.org/lang ).

Существует класс org. apache.commons.lang.RandomStringUtils , который можно использовать для генерации случайных строк заданной длины. Очень удобно не только для генерации имени файла!

Вот пример:

String ext = "dat";
File dir = new File("/home/pregzt");
String name = String.format("%s.%s", RandomStringUtils.randomAlphanumeric(8), ext);
File file = new File(dir, name);
27
ответ дан 24 November 2019 в 13:21
поделиться

Объединяя другие ответы, почему бы не использовать метку времени мс с добавленным случайным значением; повторяйте до тех пор, пока нет конфликта, что на практике почти никогда не будет.

Например: File-ccyymmdd-hhmmss-mmm-rrrrrr.txt

2
ответ дан 24 November 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: