解決調(diào)用ftpClient.retrieveFileStream(String?remoteFilePath)第二次讀取為空問(wèn)題
描述:當(dāng)讀取一個(gè)文件夾時(shí),文件夾中又存在多個(gè)文件,循環(huán)讀取時(shí),第一次調(diào)用
InputStream inputStream = ftpClient.retrieveFileStream(String remoteFilePath)可以讀出數(shù)據(jù),當(dāng)再次調(diào)用時(shí),inputStream = null;
解決方法:在執(zhí)行完inputStream.close();方法之后,執(zhí)行ftpClient.completePendingCommand();
代碼:
public ResultData getFromFtpDataToDatabase(HttpServletRequest request){
ResultData resultData = new ResultData(Result_Code.SUCCESS);
String IP = Tools.processNull("***.***.***.***");
//ftp端口是21 使用WinSCP 采用的是SSH連接端口號(hào)是22
String PORT = Tools.processNull("21");
String userName= Tools.processNull("userName");
String passWord = Tools.processNull("passWord");
String directory = Tools.processNull("");
String upload = Tools.processNull("/upload/");
String history = Tools.processNull("/history/");
String filepath = "/test/";
String paths = null;
try {
paths = new String(filepath.getBytes(),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//創(chuàng)建FTPClient對(duì)象
FTPClient ftpClient = new FTPClient();
try{
//解決文件夾有中文是讀不出文件問(wèn)題
ftpClient.setAutodetectUTF8(true);
ftpClient.connect(IP, Integer.parseInt(PORT));
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BLOCK_TRANSFER_MODE);
ftpClient.login(userName, passWord);
//讀取文件夾下文件
FTPFile[] files = ftpClient.listFiles(paths);
//獲取文件名稱
String saveAsFileName = null;
for (int i = 0; i < files.length; i++) {
saveAsFileName=files[i].getName();
//文件路徑
String remoteFile = filepath+saveAsFileName;
// get output stream of the response
InputStream inputStream = ftpClient.retrieveFileStream(remoteFile);
int available = inputStream.available();
//將文件值轉(zhuǎn)為二進(jìn)制數(shù)據(jù)
byte[] bytesArray = new byte[available];
inputStream.read(bytesArray);
//插入到數(shù)據(jù)庫(kù)中,代碼未體現(xiàn)
inputStream.close();
//ftpClient.getReply();
//調(diào)用ftpClient.completePendingCommand()解決第二次讀取為空情況
ftpClient.completePendingCommand();}
}catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
// 注銷(xiāo)FTP客戶端
if(ftpClient!=null){
ftpClient.logout();
}
} catch (Exception e) {
// 如果FTP注銷(xiāo)失敗什么也不做,忽略掉異常。
}
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ex2) {
ex2.printStackTrace();
}
}
}
resultData.put("msg","操作成功");
return resultData;
}解決方案:
調(diào)用ftpClient.completePendingCommand(); <strong>注意:</strong>FTP Server只有在接受到InputStream?執(zhí)行close方法時(shí),才會(huì)返回。所以一定先要執(zhí)行close方法。不然在第一次下載一個(gè)文件成功之后,之后再次獲取inputStream 就會(huì)返回null
存在問(wèn)題:使用inputStream.available();進(jìn)行讀取數(shù)據(jù)時(shí),由于時(shí)網(wǎng)絡(luò)傳輸,可能會(huì)導(dǎo)致數(shù)據(jù)的丟失,讀取的數(shù)據(jù)長(zhǎng)度也會(huì)有限制,后續(xù)做改正.........
到此這篇關(guān)于解決調(diào)用ftpClient.retrieveFileStream(String remoteFilePath)第二次讀取為空問(wèn)題的文章就介紹到這了,更多相關(guān)ftpClient.retrieveFileStream(String remoteFilePath)讀取為空內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 判斷字符串a(chǎn)和b是否互為旋轉(zhuǎn)詞
本篇文章主要介紹了判斷字符串a(chǎn)和b是否互為旋轉(zhuǎn)詞的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05
Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法
這篇文章主要介紹了Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java Guava排序器Ordering原理及代碼實(shí)例
這篇文章主要介紹了Java Guava排序器Ordering原理及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊(cè)增刪改查功能的示例代碼
這篇文章主要介紹了Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊(cè)增刪改查功能的示例代碼,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Java final 修飾符知識(shí)點(diǎn)總結(jié)(必看篇)
下面小編就為大家?guī)?lái)一篇Java final 修飾符知識(shí)點(diǎn)總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
基于Java+SpringBoot實(shí)現(xiàn)人臉識(shí)別搜索
人臉識(shí)別搜索技術(shù)作為現(xiàn)代計(jì)算機(jī)視覺(jué)領(lǐng)域的重要研究方向之一,已經(jīng)在多個(gè)領(lǐng)域展現(xiàn)出巨大的應(yīng)用潛力,隨著信息技術(shù)的飛速發(fā)展,人臉識(shí)別搜索在多個(gè)領(lǐng)域得到了廣泛關(guān)注和應(yīng)用,本文旨在探討人臉識(shí)別搜索技術(shù)的背景、原理以及其在實(shí)際應(yīng)用中的意義和挑戰(zhàn)2023-08-08

