2013-07-02 7 views
0

Я хочу указать имя файла с инкрементным номером, если файл существует, который не удаляет мой старый файл. Пожалуйста, помогите мне. Благодаря!Как добавить инкрементный номер в имя файла, если файл существует?

List items = upload.parseRequest(request); 
FileItem file = (FileItem)items.get(1); 
String fileName = file.getName(); 
String filePath = uploadPath + File.separator + fileName; 
File storeFile = new File(filePath); 
if(storeFile.exists()){ 
    **/*Do logic to change the filename of the existed file*/** 
}else{ 
    System.out.println(filePath); 
    file.write(storeFile); 
} 


@BalusC this what I do sir: 

String prefix = FilenameUtils.getBaseName(fileName); 
String suffix = FilenameUtils.getExtension(fileName); 
File newfileName = File.createTempFile(prefix + "-", "." + suffix, new File(uploadPath)); 
file.write(newfileName); 

Мой первый загрузить нормально с результатом: Язык программирования Reflection.docx Но моя вторая загрузка привела к: Язык программирования Reflection15897278330376654158

Что является причиной этого?

+0

Довольно основной и, вероятно, наивная реализация будет переименовать новый файл с последней версией этого (2, 3, 4, и) и есть еще один файл (или таблицы в базе данных), где у вас есть последняя версия для файла. Тем не менее, вместо того, чтобы изобретать колесо, я бы рекомендовал использовать [Content Management System] (http://en.wikipedia.org/wiki/Content_management_system) для управления версиями файлов и всей этой трудной и неприятной работы. –

+0

Но сэр невозможно, если я могу добавить символ или дату или инкрементный номер в префикс файла, чтобы сделать его уникальным? Я хочу реализовать обновление файлов, если файл существует. Как вы говорите, есть ли api системы управления контентом в java? –

+0

Доступ к ссылке в Википедии, которую я предоставил в своем комментарии (это не значит, чтобы мой комментарий выглядел хорошо), вы найдете [список рамок системы управления контентом] (http://en.wikipedia.org/wiki/List_of_content_management_frameworks), а некоторые из них - на Java. Я работал с CMS в прошлом, чтобы справиться с этой работой, но это будет зависеть от ваших потребностей, чтобы найти лучшее для вас. –

ответ

-2

Не совсем то, что вы просили, но File.createTempFile может сделать трюк. Он вставляет случайное число в имя файла temp вместо инкрементного номера.

File tempFile = File.createTempFile(fileName, null, new File(uploadPath)); 
+0

Я бы не выбрал это, так как выглядит как OP, работающий над веб-приложением, и два или более пользователя могут загружать один и тот же файл в то время. Таким образом, чтобы избежать параллельных операций, было бы лучше использовать специализированную систему, такую ​​как система управления контентом, которая уже обрабатывает всю эту неприятную работу. –

+0

@Luiggi. При подключении к javadoc это должно быть ОК для параллельных операций: «гарантировано, что: Файл, обозначенный возвращенным абстрактным пустым именем, не существовал до вызова этого метода». В java-документе не очевидно, насколько атомарна эта операция, но с учетом того, что используются случайные числа, если она не является атомарной, она, вероятно, достаточно безопасна для всех, кроме самых загруженных webapps. – lreeder

+0

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

Смежные вопросы