java - net - Apache Commons FTPClient.listFiles
java ftp connection (6)
Estoy usando org.apache.commons.net.ftp.FTPClient
en una de mis aplicaciones para trabajar con un servidor FTP. Soy capaz de connect
, login
, pwd
y cwd
. Sin embargo, cuando trato de list
los archivos, no devuelve la lista de archivos en ese directorio, donde sé con seguridad que hay archivos. Estoy utilizando el método FTPFile[] listFiles()
, devuelve una matriz vacía de FTPFile
.
Por favor encuentre abajo el fragmento de código donde estoy intentando esto:
String hostname = properties.getProperty("FTP_SERVER");
String user = properties.getProperty("FTP_USER");
String passwd = properties.getProperty("FTP_PASSWD");
FTPClient client = new FTPClient();
client.connect(hostname);
client.login(user, passwd);
String reply = client.getStatus();
System.out.println(reply);
client.enterRemotePassiveMode();
client.changeWorkingDirectory("/uploads");
FTPFile[] files = client.listFiles();
System.out.println(files.length);
for (FTPFile file : files) {
System.out.println(file.getName());
}
String[] fileNames = client.listNames();
if (fileNames != null) {
for (String file : fileNames) {
System.out.println(file);
}
}
client.disconnect();
Después de configurar el modo como PASV
está funcionando bien ahora! Gracias por todos sus esfuerzos y sugerencias!
Este parece ser el mismo problema que tuve (y resolví), vea esta respuesta:
Primero, asegúrese de que el listado funcione en otros programas. Si es así, una posibilidad es que la lista de archivos no se analice correctamente. Puede intentar especificar explícitamente el analizador para utilizarlo con initiateListParsing .
Solo una sugerencia tonta ... puedes hacer una lista en la carpeta / uploads usando un cliente FTP normal. Le pregunto esto porque algunos servidores FTP están configurados para no mostrar la lista de una carpeta de carga.
Tuve el mismo problema y resultó que no podía analizar lo que el servidor estaba devolviendo para una lista de archivos. I esta línea después de conectar al servidor ftp ftpClient.setParserFactory (nuevo MyFTPFileEntryParserFactory ());
public class MyFTPFileEntryParserFactory implements FTPFileEntryParserFactory {
private final static FTPFileEntryParser parser = new UnixFTPEntryParser() {
@Override public FTPFile parseFTPEntry(String entry) {
FTPFile ftpFile = new FTPFile();
ftpFile.setTimestamp(getCalendar(entry));
ftpFile.setSize(get(entry));
ftpFile.setName(getName(entry));
return ftpFile;
}
};
@Override public FTPFileEntryParser createFileEntryParser(FTPClientConfig config) throws ParserInitializationException {
return parser;
}
@Override public FTPFileEntryParser createFileEntryParser(String key) throws ParserInitializationException {
return parser;
}
}
client.enterLocalPassiveMode()
y funciona:
client.connect("xxx.com");
boolean login = client.login("xxx", "xxx");
client.enterLocalPassiveMode();