Java怎么實(shí)現(xiàn)FTP服務(wù)器的文件上傳和下載

這篇文章主要講解了“Java怎么實(shí)現(xiàn)FTP服務(wù)器的文件上傳和下載”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java怎么實(shí)現(xiàn)FTP服務(wù)器的文件上傳和下載”吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、南川網(wǎng)站維護(hù)、網(wǎng)站推廣。

前言

由于業(yè)務(wù)需求,需要實(shí)現(xiàn) ftp server 的文件上傳和下載功能。于是便借助了 apache 的一個工具包 commons-net。使用起來很簡單,但是有些細(xì)節(jié)比較坑,特此說明一下。

使用

第三方包的核心工具類是 FTPClient ,不管是文件上傳還是文件下載,都要進(jìn)行連接和登錄,具體會在代碼中體現(xiàn)出來。

準(zhǔn)備工作

引入 maven 依賴

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.6</version>
</dependency>

ftp 服務(wù)器的連接信息

  • 主機(jī)名

  • 端口

  • 用戶名

  • 密碼

如果需要自己搭建和配置文件服務(wù)器,請自行百度

常用命令
    rm -rf            目錄名稱
    mkdir 目錄名稱     創(chuàng)建目錄
    touch 文件名       新建文件
    cd 目錄名稱         切換目錄
    kill -9 進(jìn)程ID      殺死進(jìn)程
    chmod              配置權(quán)限

文件上傳

文件上傳其實(shí)就是把我們本地的文件,放到文件服務(wù)器指定的目錄下。 想象一下,如果我們此時在一臺 linux 服務(wù)器上新建一個文件夾和文件,該如何操作?

  1. 創(chuàng)建文件夾 mkdir 文件夾名稱

  2. 進(jìn)入到文件夾中 cd 文件夾名稱

  3. 新建文件 touch 文件名稱

其實(shí) FTPClient 實(shí)現(xiàn)文件上傳的代碼也是這個意思,其中用到的方法主要是:

  1. makeDirectory(path)

  2. changeWorkingDirectory(path)

  3. storeFile(remoteFilename, inputStream);

分別對應(yīng)上面的三個步驟。

以下是完整代碼,但是有幾個細(xì)節(jié)需要說明:

  1. 確保登錄用戶擁有足夠的權(quán)限,比如讀寫文件。

  2. makeDirectory 方法無法創(chuàng)建多級目錄,只能一層一層創(chuàng)建。

  3. 創(chuàng)建文件失敗可能是用戶沒有權(quán)限,也可能是目錄已存在。

  4. 中文亂碼問題看代碼

     public static void main(String[] args) {
         FTPClient ftpClient = new FTPClient();
         try {
     	    // 1. 連接登錄
     	    ftpClient.connect("主機(jī)名", 端口);
     	    boolean loginSuccessful = ftpClient.login("用戶名", "密碼!");
     	    System.out.println(loginSuccessful ? "登錄成功" : "登錄失敗");
    
     	    String remotePath = "中文目錄";// 上傳的文件所在目錄
     	    String remotePathAfterTransferCode = new String(remotePath.getBytes("utf-8"), "iso-8859-1");// 防止中文亂碼
     	    String localFile = "/Users/zzz/Desktop/ftp-server/perfect.txt";// 本地待上傳的文件
     	    String remoteFilename = "remoteFile.txt";// 上傳后 ftp server 的文件名稱
    
     	    // 2. 在 ftp server 上創(chuàng)建文件夾
     	    boolean makeDirSuccessful = ftpClient.makeDirectory(remotePathAfterTransferCode);
     	    System.out.println("創(chuàng)建文件夾是否成功? " + makeDirSuccessful);
    
     	    // 3. 切換目錄
     	    boolean changeWorkingDirectorySuccessful = ftpClient.changeWorkingDirectory(remotePathAfterTransferCode);
     	    System.out.println(changeWorkingDirectorySuccessful ? "切換目錄成功" : "切換目錄失敗");
    
     	    // 4. 上傳本地文件到 ftp server
     	    boolean uploadSuccessful = ftpClient.storeFile(remoteFilename, new FileInputStream(new File(localFile)));
     	    System.out.println(uploadSuccessful ? "上傳成功" : "上傳失敗");
    
     	    // 5. 退出登錄
     	    ftpClient.logout();
         } catch (Exception e) {
     	    e.printStackTrace();
         }
    }

文件下載

文件下載也是需要用戶先連接登錄,然后才能下載。

核心方法就是 retrieveFile("服務(wù)器文件地址", 輸出流);

具體代碼如下:

public static void main(String[] args) {
    FTPClient ftpClient = new FTPClient();
    // 指定本地下載目錄
    String localPath = "/Users/zzz/Desktop/ftp-server";
    try {
        ftpClient.connect("主機(jī)名", 21);
        boolean loginSuccess = ftpClient.login("用戶名", "密碼!");
        System.out.println(loginSuccess ? "登錄成功" : "登錄失敗");

        // 文件下載
        File localFile = new File(localPath + File.separatorChar + "ttt.txt");
        OutputStream os = new FileOutputStream(localFile);
        boolean downloadSuccessful = ftpClient.retrieveFile("test.txt", os);

        os.close();
        System.out.println(downloadSuccessful ? "下載成功!" : "下載失??!");

        ftpClient.logout();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

總結(jié)

FTPClient 實(shí)現(xiàn)文件上傳和下載的方法很簡單易懂,只是有些細(xì)節(jié)需要注意(常見的前面已經(jīng)提到),當(dāng)然上述的代碼只是 demo 版, 具體的需求還要去優(yōu)化,比如異常處理,如何創(chuàng)建多級文件夾之類的,最后就是需要定制配置 FTPClient ,比如編碼之類的, 具體 API 自行查閱資料。

感謝各位的閱讀,以上就是“Java怎么實(shí)現(xiàn)FTP服務(wù)器的文件上傳和下載”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java怎么實(shí)現(xiàn)FTP服務(wù)器的文件上傳和下載這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁題目:Java怎么實(shí)現(xiàn)FTP服務(wù)器的文件上傳和下載
鏈接URL:http://muchs.cn/article28/jcpjcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、微信公眾號云服務(wù)器、網(wǎng)站設(shè)計(jì)面包屑導(dǎo)航、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司