SFTP伺服器檔案拷貝
阿新 • • 發佈:2018-11-14
專案中用到了SFTP相關的一些東西,之前用到了FTP,個人感覺SFTP和FTP使用起來差不多,網上關於SFTP和FTP的文章很多,這裡就不說了。在這裡說一下我遇到的一些問題。
在專案的要求中,需要讀取檔案的MD5值,進行對比,如果不相同,則進行同步操作。通過ChannelSftp的get方法獲取檔案流,通過put方法將檔案寫到指定位置。而在執行中,程式碼執行到put便停止住,而SFTP服務則一直處於連線狀態。程式碼如下:
//複製檔案 public void copyfile(ChannelSftp tChannelSftp ,String src) throws SftpException, IOException { InputStream tInputStream = null; //建立要拷貝到的資料夾 tChannelSftp.mkdir(路徑); //獲取檔案流 tInputStream = tChannelSftp.get(src); //將讀取到的檔案流寫到指定路徑處 tChannelSftp.put(tInputStream, 路徑); tInputStream.close(); }
檢查伺服器上的檔案後,發現檔案已經正確複製,可是程式碼並不繼續執行。經過多次修改之後,發現是InputStream的問題,而將InputStream拷貝之後再使用,問題便成功解決。
//複製檔案 public void copyfile(ChannelSftp tChannelSftp ,String src) throws SftpException, IOException { InputStream tInputStream = null; tChannelSftp.mkdir(路徑); tInputStream = tChannelSftp.get(src); //拷貝讀取到的檔案流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = tInputStream.read(buffer)) > -1 ) { baos.write(buffer, 0, len); } baos.flush(); InputStream nInputStream = new ByteArrayInputStream(baos.toByteArray()); tChannelSftp.put(nInputStream, 路徑); nInputStream.close(); baos.close(); tInputStream.close(); }
雖然問題解決了,但是其中的原因卻不知道,如果哪位知道原因,歡迎留言。
小白第一次寫部落格,寫的不好,請各位多多見諒,如果幫到了遇到相同問題的你,那真是再好不過了。