java - 从FTP下载时如何检查文件是否存在

标签 java ftp download file-exists

我正在从 FTP 服务器下载,但我不知道如何检查文件是否已经存在。我想要做的是从 FTP 服务器检索文件名,然后将其与文件夹中的所有文件进行比较。如果文件已经存在,则它将下一个 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

提前致谢。

最佳答案

如果您的 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();
 }
}

关于java - 从FTP下载时如何检查文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4302159/

相关文章:

java - 使用 Firebase 适配器填充 ListView

java - Swift AES 实现

java - Gson、枚举和尝试在空对象引用上调用虚拟方法 'java.lang.Class java.lang.Object.getClass()'

elasticsearch - 从 FTP 收集日志文件到 Logstash/Elasticsearch

php - 如何在不使用PHP的Google Analytics的情况下跟踪文件下载

java - 用于卡通化和着色的图像过滤器

java - 为什么 Java FTP 客户端的传输速率差异如此之大

bash - 通过 Cron 作业上传当天的备份而不是所有文件

html - 如何在 Windows IE 中单击时生成文件 'download'

java - 如何修复 java.io.IOException : An existing connection was forcibly closed by the remote host when downloading a file