【问题标题】:How to check if file exist when downloading from FTP从FTP下载时如何检查文件是否存在
【发布时间】:2011-05-17 04:10:19
【问题描述】:

我正在从 FTP 服务器下载,但我不知道如何检查文件是否已经存在。我想要做的是从 FTP 服务器检索 filname,然后将其与文件夹中的所有文件进行比较。如果文件已经存在,那么它将下一个 FTP 文件名与文件夹中的所有文件进行比较,依此类推。 我已经进行了比较,如果文件夹中的所有文件与 FTP 服务器上的文件同名,它就可以工作,但是如果我添加一些旧文件,那么它会再次下载所有文件,我不希望这样。

这是我的临时代码:

String[] names = client.listNames();
        File folder = new File("c:\\test\\RTR_ZIP\\");
        String[] filename = folder.list();

        for (;i<names.length;i++) {
            name = names[i];

            exists=false;

                if (name.contains(".zip")) {

                    if (filename.length == 0) {
                        new_file = new FileOutputStream("C:\\test\\RTR_ZIP\\" + name);
                        client.retrieveFile(name, new_file);
                        j++;
                        exists=true;
                    } else {
                            for (;k<filename.length;k++) {
                            name = names[i];
                            i++;
                            name1=filename[k];
    //                        CHECK IF FILE EXISTS
                                    if (!name.equals(name1)) {
                                        new_file = new FileOutputStream("C:\\test\\RTR_ZIP\\" + name);
                                        client.retrieveFile(name, new_file);
                                        j++;
                                        exists=true;
                                    } 
                            }
                      }//else
                }//if contains .zip
        }//for

提前致谢。

【问题讨论】:

    标签: java ftp download file-exists


    【解决方案1】:

    您应该使用java.io.File.existsjava.io.File.isFile()|isDirectory() 检查是否存在。

    【讨论】:

    • @Igor java.io.File.equals。我不明白你为什么需要比较文件。
    • 正如我所说,如果目录中有任何较旧的文件,那么我的比较不起作用。仅当来自 FTP 的文件与目录中的文件相同时才有效。所以这就是为什么我想将来自 FTP 的文件与目录中的每个文件进行比较
    【解决方案2】:

    如果您的 ftp 服务器支持 XCRC 命令,则可以比较本地和远程文件的校验和 (CRC32)。 您可以迭代文件夹中的所有文件并将其 crc 与本地文件进行比较。

    import java.io.File;
    import java.io.IOException;
    import java.net.SocketException;
    import java.util.Scanner;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.net.ftp.FTPClient;
    
    public class DownloadFile {
    
     private FTPClient client = new FTPClient();
    
     public void connect() throws SocketException, IOException {
      client.connect("127.0.0.1");
      client.login("user", "password");
     }
    
     public boolean hasXCRCSupport() throws IOException {
      client.sendCommand("feat");
      String response = client.getReplyString();
      Scanner scanner = new Scanner(response);
      while(scanner.hasNextLine()) {
       String line = scanner.nextLine();
       if(line.contains("XCRC")) {
        return true;
       }
      }
      return false;
     }
    
     public boolean isSameFile() throws IOException {
      if(hasXCRCSupport()) {
       File file = new File("D:/test.txt");
       String localCRC = Integer.toHexString((int) FileUtils.checksumCRC32(file)).toUpperCase();
       client.sendCommand("XCRC /test.txt");
       String response = client.getReplyString().trim();
       System.out.println(response);
       if(response.endsWith(localCRC)) {
        return true;
       }
      }
      return false;
     }
     public void logout() throws IOException {
      client.logout();
     }
    
     public static void main(String[] args) throws SocketException, IOException {
      DownloadFile downloadFile = new DownloadFile();
      downloadFile.connect();
      if(downloadFile.isSameFile()) {
       System.out.println("remote file is same as local");
      }
      downloadFile.logout();
     }
    }
    

    【讨论】:

      【解决方案3】:

      也许它对有同样问题的人有用。我用这种方法制作程序:

      package javaapplication2;
      
      import java.io.BufferedInputStream;
      import java.io.File;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import org.apache.commons.net.ftp.*;
      
      
      
      public class DLFile {
      
        public static void saveZIP() throws Exception {
      
              FTPClient client = new FTPClient();
              FileOutputStream new_file = null;
              String server = "server";
              String user = "user";
              String pass = "pass";
              String name = "";
              String downloadFolder = "download_folder";
              Boolean exists = null;
              int i=0;
              int j=0;
      
              client.connect(server);
              client.login(user,pass);
              client.changeWorkingDirectory("/rtr/");
      
      //read ftp content
                  String[] names = client.listNames();
                  File folder = new File(downloadFolder);
                  String[] filename = folder.list();
      
                  for (;i<names.length;i++) {
                      name = names[i];               
                      exists=false;
      
                          if (name.contains(".zip")) {
                              if (filename.length == 0) {
                                  new_file = new FileOutputStream(downloadFolder + name);
                                  client.retrieveFile(name, new_file);
                                  j++;
                                  exists=true;
                              } else {
      
      //CHECK IF FILE EXISTS                            
                                  if (!new File(downloadFolder + name).exists()) {
                                      new_file = new FileOutputStream(downloadFolder + name);
                                      client.retrieveFile(name, new_file);
                                      j++;
                                      exists=true;
                                  }
      
                               }//else
                          }//if contains .zip
                  }//for
      
                  if (exists = true) {
                      System.out.println("Downloading ZIP files: Downloaded " + j + " files");
                  } else System.out.println("Downloading ZIP files: Files already exist.");
      
                  client.logout();
      
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-02-01
        • 1970-01-01
        • 2013-06-23
        • 2018-06-21
        • 2011-11-16
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        相关资源
        最近更新 更多