Reputation: 3382
Can anyone explain me what's wrong with the following code? I tried different hosts, FTPClientConfigs, it's properly accessible via firefox/filezilla... The problem is I always get empty filelist without any exceptions (files.length == 0). I use commons-net-2.1.jar installed with Maven.
FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_L8);
FTPClient client = new FTPClient();
client.configure(config);
client.connect("c64.rulez.org");
client.login("anonymous", "anonymous");
client.enterRemotePassiveMode();
FTPFile[] files = client.listFiles();
Assert.assertTrue(files.length > 0);
Upvotes: 41
Views: 45768
Reputation: 847
For me it worked when I used ftpClient.enterLocalPassiveMode()
just before calling ftpClient.listFiles()
.
Here is the full code:
final List<String> files = new ArrayList<>();
try {
ftpClient.enterLocalPassiveMode();
String[] f = null;
if (parentDir.isEmpty()) {
f = ftpClient.listNames();
}else{
f = ftpClient.listNames(parentDir);
}
for (String s :f ) {
files.add(s);
}
} catch (IOException e) {
e.printStackTrace();
postError(e.getMessage()!= null?e.getMessage():e.toString());
}
Upvotes: 0
Reputation: 469
Only using enterLocalPassiveMode()
did not work for me.
I used following code, which worked.
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
ftpsClient.type(FTP.BINARY_FILE_TYPE);
Complete example is as below,
FTPSClient ftpsClient = new FTPSClient();
ftpsClient.connect("Host", 21);
ftpsClient.login("user", "pass");
ftpsClient.enterLocalPassiveMode();
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
ftpsClient.type(FTP.BINARY_FILE_TYPE);
FTPFile[] files = ftpsClient.listFiles();
for (FTPFile file : files) {
System.out.println(file.getName());
}
Upvotes: 14
Reputation: 3888
Found it!
The thing is you want to enter passive mode after you connect, but before you log in. Your code returns nothing for me, but this works for me:
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPFile;
public class BasicFTP {
public static void main(String[] args) throws IOException {
FTPClient client = new FTPClient();
client.connect("c64.rulez.org");
client.enterLocalPassiveMode();
client.login("anonymous", "");
FTPFile[] files = client.listFiles("/pub");
for (FTPFile file : files) {
System.out.println(file.getName());
}
}
}
Gives me this output:
c128 c64 c64.hu incoming plus4
Upvotes: 101
Reputation: 189
usually the annonymous user doesn't need a password, try
client.login("anonymous", "");
Upvotes: 3