2013-07-03 53 views
-1

所以我通過Java將文件上傳到FTP。當我在項目的源位置上載文件時,我沒有問題,但是當我想在我的桌面上上傳文件時,它不會上傳。Java在不在源位置時不能使用文件

client.connect("REMOVED"); 
client.login("REMOVED", "REMOVED"); 

String filename = "Icon.png"; 
fis = new FileInputStream(filename); 

client.storeFile(filename, fis); 
client.logout(); 

如果我不喜歡它,它會工作,但如果我將其更改爲

String filename = "C:\\Users\\username\\Desktop\\Icon.png"; 

我會得到一個錯誤,該文件是存在的,如果我將名稱更改爲類似

String filename = "C:\\Users\\username\\Desktop\\asdf.png"; 

這並不存在我會得到一個錯誤,但是當我做一個這樣做時,它不會給出錯誤,但文件不會上傳。有任何想法嗎?

+0

什麼是你得到的錯誤? –

+0

我沒有收到錯誤,但文件只是不上傳。 – user2526311

+2

嘗試在'storeFile'中使用一個合理的文件名(不是路徑名)。 – Ingo

回答

1

FileInputStream應該明確關閉。我不認爲FTPClient這樣做。

client.storeFile(filename, fis); 
fis.close(); 

client.logout(); 
client.disconnect(); 

因爲,您上傳的圖片還將文件類型設置爲二進制。

client.setFileType(FTPClient.BINARY_FILE_TYPE); 


編輯:(首先由@Ingo發現)

雖然,這似乎給大家,不應該有指定一個絕對路徑的問題,因爲

String filename = "C:\\Users\\username\\Desktop\\Icon.png"; 

我們大多數人都錯過了,看到相同的文件名正在傳遞給

client.storeFile(filename, fis); 

由於絕對路徑不能用作遠程文件名,因此失敗了。要去除上面的絕對路徑的目錄,並只保留文件名,我們可以使storeFile()調用作爲

client.storeFile(filename.substring(filename.lastIndexOf("\\") + 1), fis); // Icon.png 
+0

我不需要fis.close();它已經不在那裏了。另外我想保留它,以便以防萬一,我可以上傳其他文件。 – user2526311

+0

@ user2526311如果您未設置文件類型;當你再次下載同一個文件時,它會被破壞。你可以通過比較文件大小來檢查。它們會因您的本地和您上傳爲ASCII而不同。 (但是,這不完全是你的程序無法正常工作的原因。) –

+0

不會下載文件,但我會添加並注意這一點。謝謝,如果你看到有一個解決方案。 – user2526311

相關問題