2015-04-02 122 views
-1

以下是我的代碼,用於讀取文件並在之後對其進行重命名。我使用apache commons.net 3.0.1重命名ftp文件夾中的文件時出錯Java

client.connect(localhost); 
boolean login = client.login("username", "password"); 
if(login){ 
    System.out.println("login successful"); 
    boolean chdir = client.changeWorkingDirectory("/home/folder1/child/"); 
    String url = client.printWorkingDirectory(); // EDIT 
    FTPFile[] result = client.listFiles(url, filter); 
    if (result != null && result.length > 0) { 
     for (FTPFile aFile : result) { 
      try{ 
       String filename = aFile.getName(); 
       InputStream is= client.retrieveFileStream(filename); 
       br = new BufferedReader(new InputStreamReader(is)); 
        while((line = br.readLine()) != null){ 
         System.out.println("the line is"+line); 
        } 
       } 
       finally{ 
        if(br!=null){ 
         try{ 
          br.close(); 
          String oldFilename =url + "/" +aFile.getName(); 
          String newFilename = "PRO"+aFile.getName(); 
          boolean rename = client.rename(oldFilename, newFilename); 
          if(rename){ 
            System.out.println("renamed"); 
          } 
          else{ 
            System.out.println("Error in renaming"); 
           } 

          } 

文件deosn't獲得改名和程序打印

錯誤重命名文件(CZ布爾更名= FALSE)。

我已經討論過不同的例子。但似乎都表現出同樣的問題。 該文件在篩選器後被選中並且沒有任何問題地被讀取。

如果有人能指出我在這裏做錯了什麼,那會非常有幫助。

這裏,urlString url = client.printWorkingDirectory();

我有兩個相對路徑和絕對路徑嘗試。並給予完整路徑只有oldFilename和只是newFilename filname。兩者都不起作用。

編輯

改變目錄之前,將URL /這是根。 更改目錄後,網址將爲/home/folder1/child/。這是文件存在的地方。

+0

你得到任何異常?如果是,請添加堆棧跟蹤。 – Jens 2015-04-02 05:57:41

+0

@Jens似乎沒有例外。 – 2015-04-02 06:16:53

+0

在你的代碼中打印重命名文件(cz布爾重命名= false)。錯誤? – Jens 2015-04-02 06:18:11

回答

1

InputStream retrieveFileStream(String remote):該方法返回一個InputStream,我們可以使用該方法從遠程文件中讀取字節。該方法使我們能夠更好地控制如何讀取和寫入數據。但使用此方法時有兩個重要的要點:

必須隨後調用方法completePendingCommand()以完成文件傳輸並檢查其返回值以驗證下載是否實際上已成功完成。

boolean success = ftpclient.completePendingCommand(); 
if (success){ 
     System.out.println("File #2 has been downloaded successfully."); 
} 

我們必須明確地關閉InputStream。

is.close(); //is = InputStream

SOURCE