下载具有相同名称的附件,而不用Java覆盖

时间:2018-03-07 06:48:46

标签: java javamail

根据我的要求,我需要将一个文件从邮件收件箱下载到指定的目录中,稍后如果有相同的内容,我需要将同一个文件保存到同一个目录但是名称不同,这里以前的文件不应该被覆盖意味着文件必须保存在具有相同名称的同一目录中(这里我有一个假设,例如,如果我的文件是abc.txt,修改后如果我下载修改后的文件,它可以保存为abc( 1).txt)。我该如何解决我的问题?任何人都可以帮助我在JAVA中解决这个问题。下面是我的代码,但它覆盖了相同的文件。

if (contentType.contains("multipart")) {
  // this message may contain attachment
  Multipart multiPart = (Multipart) message.getContent();
  for (int i = 0; i < multiPart.getCount(); i++) {
    MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
    if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {

      // save an attachment from a MimeBodyPart to a file
      String destFilePath = "F:/unprocessed/"+part.getFileName();
      InputStream input = part.getInputStream();
      BufferedInputStream in = null;
    in = new BufferedInputStream(input);

      FileOutputStream output = new FileOutputStream(destFilePath);

      byte[] buffer = new byte[4096];

      int byteRead;

      while ((byteRead = input.read(buffer)) != -1) {
        output.write(buffer, 0, byteRead);
      }

      System.out.println("FileOutPutStream is Being Closed");
      output.close();

    }
  }

}

1 个答案:

答案 0 :(得分:1)

如前所述,您需要检查现有文件。这是实现这一目标的一种方式:

public String getUniqueFileName(String input) {
    String base = "F:/unprocessed/";

    String filename = base+input;

    File file = new File(filename);
    int version = 0;
    while (file.exists()) {
        version++;
        String filenamebase = filename.substring(0, filename.lastIndexOf('.'));
        String extension = filename.substring(filename.lastIndexOf('.'));
        file = new File(filenamebase+"("+ version+")"+extension);
    }
    return file.getAbsolutePath();
}

然后将destFilePath的赋值更改为调用此方法:

String destFilePath = getUniqueFileName(part.getFileName());