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? Any suggestions? Thanks in advance.
Here is my code:
private void ftpFileTransfer()
throws DwhGenericException
{
try
{
// Make ftp connection to the ndrftp server.
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();
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();
}
}