最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java讀取傳輸FTP文件實現示例

 更新時間:2023年04月27日 08:30:51   作者:Vainycos  
本文主要介紹了Java讀取傳輸FTP文件方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一.需求

FTP作為文件服務器,由提供服務方提供遠程連接地址,連接端口,賬號,密碼等信息。
根據以上信息可以建立客戶端連接,隨后對于建立好的連接可進行文件讀取,文件上傳等操作

二.依賴

<!-- FTP相關操作的依賴 -->
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.9.0</version>
</dependency>
<!-- IO工具類的依賴 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>
<!-- lombok依賴 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.26</version>
    <scope>provided</scope>
</dependency>

三.關鍵源碼

3.0 配置信息

ftp:
  config:
    host: ${env.ftp.config.host:10.1.1.1}
    port: ${env.ftp.config.port:12345}
    username: ${env.ftp.config.username:ftpUsername}
    password: ${env.ftp.config.password:ftpPwd}
    remote-dir-path: ${env.ftp.config.remote-dir-path:/}
/**
 * @author: Vainycos
 * @description ftp配置信息
 * @date: 2023/4/17 15:16
 */
@Data
@Component
@ConfigurationProperties("ftp.config")
public class FtpConfig {
    private String host;
    private int port;
    private String username;
    private String password;
    /** 初始讀取根目錄,當前默認/ */
    private String remoteDirPath;
}

3.1 獲取客戶端

/**
* 獲取ftp客戶端
* @return
*/
public FTPClient getFtpClient(){
    try {
        FTPClient ftpClient = new FTPClient();
        ftpClient.connect(ftpConfig.getHost() ,ftpConfig.getPort());
        // 10分鐘連接時間
        ftpClient.setConnectTimeout(600000);
        ftpClient.setDefaultTimeout(600000);
        ftpClient.login(ftpConfig.getUsername() ,ftpConfig.getPassword());
        // login后設置傳輸的模式
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        // login后設置被動模式
        ftpClient.enterLocalPassiveMode();
        // login后設置編碼
        String LOCAL_CHARSET = "GBK";
        // 開啟服務器對UTF-8的支持,如果服務器支持就用UTF-8編碼,否則就使用本地編碼(GBK).
        if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {
            LOCAL_CHARSET = "UTF-8";
        }
        ftpClient.setControlEncoding(LOCAL_CHARSET);
        if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
            log.error("未連接到FTP,用戶名或密碼錯誤!");
            ftpClient.disconnect();
        } else {
            log.info("FTP連接成功!");
        }
        // 切換從某個根目錄下開始掃描
        ftpClient.changeWorkingDirectory(ftpConfig.getRemoteDirPath());
        return ftpClient;
    }catch (IOException e) {
        log.error("ftp建立連接異常->{}", e);
    }
    return null;
}

3.2 獲取ftp文件

/**
* 獲取對應目錄下的第一級目錄文件
* @param ftpClient client
* @throws IOException
*/
public void getFtpFirstDirectoryFiles(FTPClient ftpClient) throws IOException {
? ? log.info("ftpclient當前工作目錄->{}", ftpClient.printWorkingDirectory());
? ? if (ftpClient != null) {
? ? ? ? FTPFile[] files = ftpClient.listFiles();
? ? ? ? for (FTPFile file : files) {
? ? ? ? ? ? String fileName = file.getName();
? ? ? ? ? ? if (file.isDirectory()){
? ? ? ? ? ? ? ? // 每次從根目錄下查找第一級目錄
? ? ? ? ? ? ? ? String firstDirectory = ftpConfig.getRemoteDirPath() + "/" + fileName;
? ? ? ? ? ? ? ? ftpClient.changeWorkingDirectory(firstDirectory);
? ? ? ? ? ? ? ? log.info("當前目錄->{}, 開始掃描錄音文件", firstDirectory);
? ? ? ? ? ? ? ? // 切換目錄后直接遍歷第一級的文件,不遞歸第二級目錄
? ? ? ? ? ? ? ? dealFile(ftpClient);
? ? ? ? ? ? ? ? log.info("{}->目錄掃描結束", firstDirectory);
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
/**
?* 處理目錄下的文件
?* @param ftpClient
?* @throws IOException
?*/
public void dealFile(FTPClient ftpClient) throws IOException {
?? ?FTPFile[] files = ftpClient.listFiles();
? ? ? ? for (FTPFile file : files) {
?? ? ? ? ? ?String fileName = file.getName();
? ? ? ? ? ? if (file.isDirectory()) {
? ? ? ? ? ? ? ? log.info("{}->為目錄,跳過", fileName);
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? ? ? String rootWorkingDirectory = ftpClient.printWorkingDirectory();
? ? ? ? ? ? log.info("獲取到文件->{}, 開始獲取ftp文件流, ftpclient工作目錄->{}", fileName, ftpClient.printWorkingDirectory());
? ? ? ? ? ? // 開始獲取ftp文件流
? ? ? ? ? ? InputStream inputStream = ftpClient.retrieveFileStream(new String(fileName.getBytes("UTF-8"), FTP.DEFAULT_CONTROL_ENCODING));
? ? ? ? ? ? if (inputStream == null){
? ? ? ? ? ? ? ? log.error("文件不存在->{}", fileName);
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? byte[] data = IOUtils.toByteArray(inputStream);
? ? ? ? ? ? inputStream.close();
? ? ? ? ? ? // 關鍵代碼,如果不執(zhí)行該代碼,后續(xù)的ftpClient操作將會不生效
? ? ? ? ? ? ftpClient.completePendingCommand();
? ? ? ? ? ? // 省略...獲取到了inputStream 文件流進行后續(xù)處理
? ? ? ??? ?}
}

3.3 關閉ftp服務連接

/**
 * 關閉FTP服務連接
 * @param ftpClient
 */
public void disConnection(FTPClient ftpClient) {
    try{
        if(ftpClient.isConnected()){
            ftpClient.disconnect();
        }
    }catch(IOException e) {
        log.error("ftpClient.disconnect失敗->{}", e);
    }
}

四.總結

上述源碼僅供參考,具體需根據實際業(yè)務需求進行調整。主要注意點為讀取中文文件名的文件以及獲取ftpClient文件流之后的處理,已標注在注釋中,希望能夠幫助讀者少踩坑。

參考資料

基于ftp協議的文件變化主動監(jiān)聽
FTPSClient解決無法獲取文件問題(listFiles為空)
ftpClient.retrieveFileStream導致FTPClient的后面操作失敗

到此這篇關于Java讀取傳輸FTP文件實現示例的文章就介紹到這了,更多相關Java讀取傳輸FTP文件 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java設計模式之創(chuàng)建者模式詳解

    Java設計模式之創(chuàng)建者模式詳解

    這篇文章主要介紹了Java設計模式之創(chuàng)建者模式詳解,創(chuàng)建者模式,顧名思義,就是提供友好的創(chuàng)建對象的方式?,對象都是?new?出來的,但是在一些情況下,這種方式不是很友好,首先,它不夠直觀,需要的朋友可以參考下
    2023-08-08
  • springboot使用Mybatis-plus分頁插件的案例詳解

    springboot使用Mybatis-plus分頁插件的案例詳解

    這篇文章主要介紹了springboot使用Mybatis-plus分頁插件的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Java Collections.shuffle()方法案例詳解

    Java Collections.shuffle()方法案例詳解

    這篇文章主要介紹了Java Collections.shuffle()方法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • 關于SpringBoot配置文件application.properties的路徑問題

    關于SpringBoot配置文件application.properties的路徑問題

    這篇文章主要介紹了關于SpringBoot配置文件application.properties的路徑問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • JAVA文件掃描(遞歸)的實例代碼

    JAVA文件掃描(遞歸)的實例代碼

    這篇文章主要介紹了JAVA文件掃描(遞歸)的實例代碼 ,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • java省市級聯下拉菜單實例代碼

    java省市級聯下拉菜單實例代碼

    這篇文章主要為大家詳細介紹了java省市級聯實例代碼,具有一定的參考價值,感興趣的朋友可以參考一下
    2016-05-05
  • Java 自定義Spring框架與Spring IoC相關接口分析

    Java 自定義Spring框架與Spring IoC相關接口分析

    Spring框架是由于軟件開發(fā)的復雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務器端的開發(fā)
    2021-10-10
  • SpringBoot全局異常處理與定制404頁面的方法

    SpringBoot全局異常處理與定制404頁面的方法

    這篇文章主要介紹了SpringBoot全局異常處理與定制404頁面的相關資料,本文通過實例代碼圖文相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2007-09-09
  • Java中String類常用方法總結詳解

    Java中String類常用方法總結詳解

    String類是一個很常用的類,是Java語言的核心類,用來保存代碼中的字符串常量的,并且封裝了很多操作字符串的方法。本文為大家總結了一些String類常用方法的使用,感興趣的可以了解一下
    2022-08-08
  • MybatisPlus中saveBatch方法的使用

    MybatisPlus中saveBatch方法的使用

    本文介紹了MyBatisPlus中的saveBatch方法的使用及其實現原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11

最新評論

衡南县| 吐鲁番市| 堆龙德庆县| 集安市| 天气| 边坝县| 获嘉县| 宝兴县| 胶南市| 霍城县| 尚义县| 绍兴县| 舞阳县| 资中县| 隆德县| 台北县| 二连浩特市| 沂源县| 祁东县| 呼和浩特市| 福贡县| 香港| 巩留县| 察雅县| 桂林市| 涪陵区| 汉寿县| 九台市| 迁安市| 酒泉市| 仁布县| 简阳市| 台安县| 红桥区| 西宁市| 襄城县| 遵化市| 秭归县| 阜新市| 青河县| 泉州市|