panda.net.ftp.FTPFileEntryParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of panda-core Show documentation
Show all versions of panda-core Show documentation
Panda Core is the core module of Panda Framework, it contains commonly used utility classes similar to apache-commons.
package panda.net.ftp;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.List;
/**
* FTPFileEntryParser defines the interface for parsing a single FTP file listing and converting
* that information into an {@link panda.net.ftp.FTPFile} instance. Sometimes you will want to parse
* unusual listing formats, in which case you would create your own implementation of
* FTPFileEntryParser and if necessary, subclass FTPFile.
*
* Here are some examples showing how to use one of the classes that implement this interface.
*
* The first example uses the FTPClient.listFiles()
API to pull the whole list from the
* subfolder subfolder
in one call, attempting to automatically detect the parser type.
* This method, without a parserKey parameter, indicates that autodection should be used.
*
*
* FTPClient f = FTPClient();
* f.connect(server);
* f.login(username, password);
* FTPFile[] files = f.listFiles("subfolder");
*
*
* The second example uses the FTPClient.listFiles()
API to pull the whole list from
* the current working directory in one call, but specifying by classname the parser to be used. For
* this particular parser class, this approach is necessary since there is no way to autodetect this
* server type.
*
*
* FTPClient f = FTPClient();
* f.connect(server);
* f.login(username, password);
* FTPFile[] files = f.listFiles("panda.net.ftp.parser.EnterpriseUnixFTPFileEntryParser", ".");
*
*
* The third example uses the FTPClient.listFiles()
API to pull a single file listing
* in an arbitrary directory in one call, specifying by KEY the parser to be used, in this case,
* VMS.
*
*
* FTPClient f = FTPClient();
* f.connect(server);
* f.login(username, password);
* FTPFile[] files = f.listFiles("VMS", "subfolder/foo.java");
*
*
* For an alternative approach, see the {@link FTPListParseEngine} class which provides iterative
* access.
*
* @version $Id: FTPFileEntryParser.java 1697293 2015-08-24 01:01:00Z sebb $
* @see panda.net.ftp.FTPFile
* @see panda.net.ftp.FTPClient#listFiles()
*/
public interface FTPFileEntryParser {
/**
* Parses a line of an FTP server file listing and converts it into a usable format in the form
* of an FTPFile
instance. If the file listing line doesn't describe a file,
* null
should be returned, otherwise a FTPFile
instance
* representing the files in the directory is returned.
*
* @param listEntry A line of text from the file listing
* @return An FTPFile instance corresponding to the supplied entry
*/
FTPFile parseFTPEntry(String listEntry);
/**
* Reads the next entry using the supplied BufferedReader object up to whatever delemits one
* entry from the next. Implementors must define this for the particular ftp system being
* parsed. In many but not all cases, this can be defined simply by calling
* BufferedReader.readLine().
*
* @param reader The BufferedReader object from which entries are to be read.
* @return A string representing the next ftp entry or null if none found.
* @exception IOException thrown on any IO Error reading from the reader.
*/
String readNextEntry(BufferedReader reader) throws IOException;
/**
* This method is a hook for those implementors (such as VMSVersioningFTPEntryParser, and
* possibly others) which need to perform some action upon the FTPFileList after it has been
* created from the server stream, but before any clients see the list. The default
* implementation can be a no-op.
*
* @param original Original list after it has been created from the server stream
* @return Original list as processed by this method.
*/
List preParse(List original);
}
/*
* Emacs configuration Local variables: ** mode: java ** c-basic-offset: 4 ** indent-tabs-mode: nil
* ** End: **
*/