簡體   English   中英

FTP客戶端子目錄創建

[英]FTP client subdirectory creation

我正在使用FTPClient在FTP服務器中創建子目錄。 我想在“Root”下創建一個目錄“Archive”。我使用以下函數創建子目錄。

boolean s = ftNew.makeDirectory("/"+folderName+"/Archive"); 

但它返回false並且無法創建子目錄“Archive”。 怎么解決這個?

  1. 用戶可能沒有創建目錄的權限(至少在此特定位置)。
  2. 是否存在“folderName”描述的目錄? 如果沒有,那么在單次調用中創建整個目錄層次結構(即/ {folderName} / Archive)會遇到一些困難。 確保“folderName”存在或在單獨的步驟中創建它。

FTPClient的makeDirectory返回true或false,它不是非常有用且結果很模糊。 幸運的是,您可以改進代碼以報告精確的FTP狀態消息。

這就是你需要的:

private static void showServerReply(FTPClient ftpClient) {
    String[] replies = ftpClient.getReplyStrings();
    if (replies != null && replies.length > 0) {
        for (String aReply : replies) {
            System.out.println("SERVER: " + aReply);
        }
    }
}

在每個FTPClient方法之后調用它,例如:

package apachenet.ftp;

import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;

public class App {
    public static void main( String[] args ) {
        FTPClient client = new FTPClient(); 
        FileInputStream fis = null;
        try {
            client.connect("127.0.0.1");
            showServerReply(client);
            client.login("pwyrwinski", "secret");
            showServerReply(client);
            System.out.println("Current working directory is: " + client.printWorkingDirectory());
            String someDirectory = "nonexistentDir";
            client.makeDirectory("/" + someDirectory + "/Archive");
            showServerReply(client);

            client.logout();
            showServerReply(client);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
                client.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void showServerReply(FTPClient ftpClient) {
        // ... 
    }
}

結果在我的機器上:

SERVER: 220 (vsFTPd 2.3.5)
SERVER: 230 Login successful.
Current working directory is: "/home/pwyrwinski"
SERVER: 550 Create directory operation failed.
SERVER: 221 Goodbye.

當我將String someDirectory更改為“home / pwyrwinski”時:

SERVER: 220 (vsFTPd 2.3.5)
SERVER: 230 Login successful.
Current working directory is: "/home/pwyrwinski"
SERVER: 257 "/home/pwyrwinski/Archive" created
SERVER: 221 Goodbye.

550是允許或訪問被拒絕的代碼,這個和其他代碼很容易google。
我希望這能幫到您。

你應該逐步創建目錄。否則,你將獲得創建目錄false。這里有一個例子。 http://www.codejava.net/java-se/networking/ftp/creating-nested-directory-structure-on-a-ftp-server

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM