【发布时间】:2015-09-10 19:41:28
【问题描述】:
我正在使用 Apache Commons net FTPClient 登录并从 FTP 服务器读取文件。我设法登录,我可以看到它成功登录,因为它在标题字符串中显示了工作目录路径。但是,当我使用listFiles() 时,它没有显示任何文件。 (我也尝试过使用listDirectories() 和listNames() 但没有成功)
下面是一个sn-p:
try {
client.connect(ftpHost);
} /*catch (SocketException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}*/ catch (IOException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
String header ="";
InputStream stream=null;
BufferedReader reader=null;
try{
client.login(ftpUser, ftpPass);
client.changeWorkingDirectory(targetWorkingDir);
header = client.printWorkingDirectory();
//client.setFileType(FTP.BINARY_FILE_TYPE);
for(int i=0; i<client.listFiles().length;i++){
header+=client.listFiles()[i].getName() +"\n";
}
}
catch (IOException ex){
ex.printStackTrace();
header="ERROR 1: " + ex.getMessage();
for(int i=0;i<ex.getStackTrace().length;i++){
header += "\n" + ex.getStackTrace()[i];
}
}
catch(NullPointerException e){
header = "ERROR 2: "+ e.getMessage()+"\n";
for(int i=0;i<e.getStackTrace().length;i++){
header+= e.getStackTrace()[i] + "\n";
}
}
finally{
if(reader!=null){
try{reader.close();}catch(IOException e){e.printStackTrace();}
try{stream.close();}catch(IOException e){e.printStackTrace();}
}
}
我也尝试过使用类似的东西来读取文件:
try {
stream = ftpClient.retrieveFileStream("klasa.csv");
reader = new BufferedReader(new InputStreamReader(stream));
header = reader.readLine();
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore){}
}
在这两种情况下,我都非常确定我在正确的目录中,并且我通过 FileZilla 确保我的文件在那里,但客户端似乎无法读取任何文件。
【问题讨论】:
-
应用程序可能是其他用户,没有权限查看文件...
-
但是应用程序获得了与 FileZilla 相同的用户名和密码,我可以在 FileZilla 中看到这个文件
标签: java ftp-client apache-commons-net