如果文件已经存在而不是覆盖它,则为文件名添加后缀

时间:2015-01-12 10:13:29

标签: java file-io overwrite

我正在保存上传的文件,如下所示:

UploadItem item = event.getUploadItem();
File dir = new File("D:/FileUpload");
if (!dir.exists()) {
    dir.mkdir();
}
File bfile = new File("D:/FileUpload" + "/" + item.getFileName());
OutputStream outStream = new FileOutputStream(bfile);
outStream.write(item.getData());
outStream.close();

但我的问题是,在文件夹 D:/ FileUpload 中上传一次文件相同的旧文件。在上面的功能中它将删除旧文件。示例第一次,我上传文件: test.doc (旧文件)。然后我上传另一个同名文件: test.doc (新文件)。在文件夹FileUpload将有一个文件是 test.doc (新文件)。我希望函数将在窗口OS中处理类似:新文件将是 test(2).doc 。我该如何处理它?所有情况: D:/ FileUpload 有多个文件: test.doc test(1).doc test(2 ).doc test(a).doc ,......我想我们只是检查格式 ....(int).doc 。那个新文件将是: test(3).doc (忽略 test(a).doc

1 个答案:

答案 0 :(得分:0)

也许你正在寻找这样的东西?我列出了目录中的文件,将每个文件的名称与文件名进行比较。如果名称匹配,则递增计数。然后,当您创建文件时,请在其名称中包含计数。

UploadItem item = event.getUploadItem();
File dir = new File("D:/FileUpload");
if (!dir.exists()) {
    dir.mkdir();
}
String [] files = dir.list();
int count = 0;

for(String file : files) {
  if (file.startsWith(item.getFileName()) {
    count++;
  }
}

File bfile = new File("D:/FileUpload" + "/" + item.getFileName() + "(" + count + ")");
OutputStream outStream = new FileOutputStream(bfile);
outStream.write(item.getData());
outStream.close();