gpt4 book ai didi

java - FTPClient 在有文件时显示空文件夹

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:12 46 4
gpt4 key购买 nike

我正在使用 Apache Commons net FTPClient 登录 FTP 服务器并读取文件。我成功登录,并且可以看到它登录成功,因为它在标题字符串中显示了工作目录路径。但是,当我使用 listFiles() 时,它没有显示任何文件。 (我也尝试过使用 listDirectories()listNames() 但没有成功)下面是一个片段:

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 存在,但客户端似乎无法读取任何文件。

最佳答案

尽量避免在循环中调用listFiles()。每个调用都将执行整个 FTP LIST 命令序列,因此最终,您将为每个调用添加不必要的流量。

你可以先尝试简化你的程序,如下所示:

private static  void ftpTest() {
FTPClient f = new FTPClient();
try {
f.connect("{UOUR FTP SERVER}");
f.login("{USER}", "{PASSWORD}");
FTPFile[] files = f.listFiles(".");
for (FTPFile fi: files) {
System.out.printf("f%s\n", fi.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
}

如果此程序无法为您提供服务器根目录中的文件列表,您可以尝试比较您的 FileZilla FTP 选项(特别是被动/主动模式):https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html#enterLocalPassiveMode()

如果这没有帮助,您可以尝试使用 WireShark 或 tcpdump 嗅探网络流量,并将命令集与 FTP 服务器进行比较。

关于java - FTPClient 在有文件时显示空文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31029349/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com