Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中下载同名附件而不覆盖_Java_Jakarta Mail - Fatal编程技术网

在Java中下载同名附件而不覆盖

在Java中下载同名附件而不覆盖,java,jakarta-mail,Java,Jakarta Mail,根据我的要求,我需要将一个文件从邮件收件箱下载到一个指定的目录中,过一段时间后,如果相同的文件出现,我需要将相同的文件保存到同一个目录中,但名称不同,此处不应覆盖上一个文件意味着必须使用相同的名称将文件保存在同一目录中(这里我有一个假设,例如,如果我的文件是abc.txt,在修改后,如果我下载修改后的文件,它可以保存为abc(1.txt)。我如何解决我的问题?有谁能帮助我用JAVA解决这个问题。下面是我的代码,但它覆盖了同一个文件 if (contentType.contains("multip

根据我的要求,我需要将一个文件从邮件收件箱下载到一个指定的目录中,过一段时间后,如果相同的文件出现,我需要将相同的文件保存到同一个目录中,但名称不同,此处不应覆盖上一个文件意味着必须使用相同的名称将文件保存在同一目录中(这里我有一个假设,例如,如果我的文件是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();

    }
  }

}
if(contentType.contains(“多部分”)){
//此邮件可能包含附件
Multipart Multipart=(Multipart)message.getContent();
对于(int i=0;i
如前所述,您需要检查现有文件。以下是一种方法:

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());

默认情况下应该会发生这种情况,您不必为此执行任何特殊操作,因为我认为文件系统会处理它。如果您在执行此操作时遇到问题,请先尝试,然后在此处提出问题。@VPK您能检查我的上述代码吗?它正在覆盖文件。在写入文件之前,请检查文件是否已经存在,如果存在,请选择其他名称。