• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Paul Clapham
  • Ron McLeod
  • Tim Cooke
  • Junilu Lacar
Sheriffs:
  • Rob Spoor
  • Devaka Cooray
  • Jeanne Boyarsky
Saloon Keepers:
  • Jesse Silverman
  • Stephan van Hulst
  • Tim Moores
  • Carey Brown
  • Tim Holloway
Bartenders:
  • Jj Roberts
  • Al Hobbs
  • Piet Souris

FTP problem in commons.net.ftp.FTPClient

 
Greenhorn
Posts: 12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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();
}
}
 
Jerry Kreps
Greenhorn
Posts: 12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
As a PS to the above message:
I've put this message on the "Other Open Source APIs" forum, since I thought it might apply to that too. If this violates forum rules, I apologize and I will be more careful where to put my messages in the future.
 
Jerry Kreps
Greenhorn
Posts: 12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Well, I found my own work-around that gets the job done.
My code in the original message used the FTPClient.listFiles() method to retrieve the array of FTPFile objects and then looped through the array using the getName() method of each object to pass the file name to the FTPClient.retrieveFile() method. But the trouble was that the FTPClient.listFiles() method always returned null even though the working directory clearly contained files that I wanted to download.
So I decided to go through the back door.
I noticed that the FTPClient.listNames() method returned an array of string objects that were the names of all the files in the source directory that I wanted to download. So then just I looped through the string array and I passed each file name string to the FTPClient.retrieveFile() method and it worked like a charm.
The only question is: Why did the FTPClient.listFiles() method always return null when the FTPClient.listNames() method was able to identify the files I wanted?
Well, I hope this helps someone else who comes across the same problem. If any of you know that answer to my puzzle, please fill me in. Thanks!
I LOVE JavaRanch!!!
 
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I have been doing quite a bit of work with the FTPClient software. I am finding that different versions of the FTP software can result in different outcomes.
A majority of the time, when I use listFiles (), I would put the full path in the "()". For example, ftp.listFiles (/root/dir1/*.txt), and I would get back a list of all *.txt files.
 
Greenhorn
Posts: 11
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I just ran across this while looking for info on using the Commons FTP package. You may want to try setting your connection to passive. A lot of the issues that people have had getting info properly through the FTP connection have related to firewall issues, which can be (somewhat) circumvented by using a passive instead of active FTP connection.
 
You showed up just in time for the waffles! And this tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop
https://coderanch.com/wiki/718759/books/Building-World-Backyard-Paul-Wheaton
reply
    Bookmark Topic Watch Topic
  • New Topic