解決調(diào)用ftpClient.retrieveFileStream(String?remoteFilePath)第二次讀取為空問題
描述:當(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{ //解決文件夾有中文是讀不出文件問題 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ù)庫中,代碼未體現(xiàn) inputStream.close(); //ftpClient.getReply(); //調(diào)用ftpClient.completePendingCommand()解決第二次讀取為空情況 ftpClient.completePendingCommand();
} }catch (IOException ex) { ex.printStackTrace(); } finally { try { // 注銷FTP客戶端 if(ftpClient!=null){ ftpClient.logout(); } } catch (Exception e) { // 如果FTP注銷失敗什么也不做,忽略掉異常。 } 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
存在問題:使用inputStream.available();進(jìn)行讀取數(shù)據(jù)時(shí),由于時(shí)網(wǎng)絡(luò)傳輸,可能會(huì)導(dǎo)致數(shù)據(jù)的丟失,讀取的數(shù)據(jù)長度也會(huì)有限制,后續(xù)做改正.........
到此這篇關(guān)于解決調(diào)用ftpClient.retrieveFileStream(String remoteFilePath)第二次讀取為空問題的文章就介紹到這了,更多相關(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à)值。下面跟著小編一起來看下吧2017-05-05Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法
這篇文章主要介紹了Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Java Guava排序器Ordering原理及代碼實(shí)例
這篇文章主要介紹了Java Guava排序器Ordering原理及代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊(cè)增刪改查功能的示例代碼
這篇文章主要介紹了Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊(cè)增刪改查功能的示例代碼,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Java final 修飾符知識(shí)點(diǎn)總結(jié)(必看篇)
下面小編就為大家?guī)硪黄狫ava final 修飾符知識(shí)點(diǎn)總結(jié)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09基于Java+SpringBoot實(shí)現(xiàn)人臉識(shí)別搜索
人臉識(shí)別搜索技術(shù)作為現(xiàn)代計(jì)算機(jī)視覺領(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