業務需要 需要將一個存儲的目標文件里的文件全部拷貝到另一個存儲里面去,保持文件結構。
目前采用 org.apache.commons.net.ftp包下相關類來達到ftp連接 獲取文件目錄信息,拷貝文件等功能
由於需要拷貝的存儲數據很多,會達到100W+的文件數量,在獲取文件目錄信息是遇到了問題。
在獲取目標文件夾下文件列表是 會遇到返回不到后者返回數據不對的情況,在數據量越大的文件 發生的可能性越高。
private FTPFile[] getFileListTryTimes(FTPClient ftpClient, String dir) throws Exception {
ftpClient.enterLocalPassiveMode();
FTPClientConfig ftpCfg = new FTPClientConfig("com.iflytek.ibk.file.transfer.util.ftp.UnixFTPEntryParser");
ftpClient.configure(ftpCfg);
FTPFile[] files = ftpClient.listFiles(dir);
if (files.length == 0) {
//重試多次次 偶現讀取文件夾讀取不到數據問題
for (int i = 0; i < 10; i++) {
ftpClient.enterLocalPassiveMode();
files = ftpClient.listFiles(dir);
log.error("獲取文件列表 目錄:{} ,長度為:{} ,重試次數:{}", dir, files.length, i);
if (files.length > 0) {
break;
}
}
}
if (files.length == 0) {
log.error("========== path:{} scan nothing ==========", dir);
}
return files;
}
第一次請求 重試6次返回結果 文件列表長度22
第二次請求 重試2次返回結果文件列表長度2
第三次請求 重試10次 都獲取不到文件列表數據
存在掃描錯誤/掃描不到結果的問題 導致對應傳輸結果少數據。
特此記錄。