Hi, Everybody!
Listed below is a method I have written that is designed to connect to my remote FTP server, change the working directory on the FTP server to to a certain subdirectory (ftpSrcPath) that contains files that I want to FTP to my local directory (targetPath). I want to get an array of FTPFiles and FTP only those whose names do not start with "x_" (previously sent files). The variables loginSuccess, rootDir, cwdSuccess, and workingDir are there only so that I can see their values when I am debugging in my
IDE.
When I run it through my debugger, I make the connection successfully (loginSuccess = true), my initial working directory on the remote FTP server is the root directory (rootDir = "/"), then I change the working directory successfully (cwdSuccess = true) and I can see the new working directory on the remote FTP server (workingDir = "/srcdir"). But when I try to get the array of FTPFile objects, the FTPClient.listFiles() method returns null.
What am I doing wrong? My initial suspicion is that the DefaultFTPFileListParser is not handling the names of the files in my source directory and that I need to make my own FTPFileListParser. But how? I've been able to find very little documentation on the web other than the API JavaDocs, and they don't say much about it.
Thanks in advance for your help!
Here's the code:
private void ftpFileTransfer()
throws DwhGenericException
{
try
{
FTPClient ftpClient = new FTPClient();
ftpClient.connect("99.999.9.999");
boolean loginSuccess = ftpClient.login(
"user",
"password");
String rootDir = ftpClient.printWorkingDirectory();
boolean cwdSuccess = ftpClient.changeWorkingDirectory(ftpSrcPath);
String workingDir = ftpClient.printWorkingDirectory();
// **** The following operation returns null. ****
FTPFile[] ftpFiles = ftpClient.listFiles();
for (int i = 0; i < ftpFiles.length; i++)
{
String fileName = ftpFiles[i].getName();
if (fileName.startsWith("x_"))
{
continue;
}
File newFile = new File(targetPath + "\\" + fileName);
FileOutputStream fos = new FileOutputStream (newFile);
ftpClient.retrieveFile(fileName,fos);
fos.close();
ftpClient.rename(fileName, "x_" + fileName);
}
ftpClient.logout();
ftpClient.disconnect();
ftpClient = null;
}
catch (Exception e)
{
JobLog.storeError(
"Error - ftpFileTransfer()",
e);
throw new DwhGenericException();
}
}