Salut,
J'utilise une librairie appelée edtftpj. Dans la version de base, il s'agit d'un open source; une version Pro existe (pour des transferts prenant en compte les protocoles ftps et sftp), regarder ici: http://www.enterprisedt.com/products/edtftpj/
Pour la partie basique: licence LGPL, donc possible de l'utiliser dans des projets commerciaux/d'entreprise. Tu trouveras de la doc (et des exemples) ici: http://www.enterprisedt.com/products/edtftpj/documentation.html Malheureusement uniquement en anglais...
Ci dessous, voici un bout de code montrant l'utilisation de edtftpj - comme tu peux le constater, l'API est claire et intuitive et le fait d'avoir les sources (et la javadoc avec) permet même de s'affranchir de la consultation de la doc hors IDE la plupart du temps:
private long performBackup(Daemon d) throws Exception {
// Connect to the ftp and retrieve the information
FTPClient ftpClient = new FTPClient();
long fileSize = 0;
try {
ftpClient.setRemoteHost(props.getProperty("ftp.ip"));
ftpClient.setRemotePort(Integer.parseInt(props.getProperty("ftp.port")));
ftpClient.setConnectMode(FTPConnectMode.ACTIVE);
ftpClient.connect();
ftpClient.login(props.getProperty("ftp.user"), props.getProperty("ftp.passwd"));
// 5 mins for the timeout
ftpClient.setTimeout(5 * 60 * 1000);
ftpClient.setType(FTPTransferType.BINARY);
//Date now = new Date();
String remoteFileName = props.getProperty("remote.file").toLowerCase();
String localFolderStr = props.getProperty("local.folder");
FTPFile[] dirList = ftpClient.dirDetails(".");
for (FTPFile file : dirList) {
if (file.getName().toLowerCase().startsWith(remoteFileName)) {
d.logger.debug("Ftp get of " + file.getName());
ftpClient.get(localFolderStr + "/" + file.getName(), file.getName());
fileSize += new File(localFolderStr + "/" + file.getName()).length();
d.logger.debug("Ftp get okay; Ftp delete of " + file.getName());
ftpClient.delete(file.getName());
}
}
// ftpClient.get(fileStr, remoteFileName);
// okay, file was saved - now clean a little
File localDir = new File(props.getProperty("local.folder"));
String[] files = localDir.list();
List<String> filesToDelete = new ArrayList<String>();
for (String fileName : files) {
if (fileName.toLowerCase().startsWith(remoteFileName)
&& new File(localFolderStr + "/" + fileName).lastModified() < (new Date().getTime() - Long.parseLong(props
.getProperty("retention.days")) * 24 * 3600 * 1000)) {
filesToDelete.add(localFolderStr + "/" + fileName);
}
}
for (Iterator iter = filesToDelete.iterator(); iter.hasNext();) {
String aFile = (String) iter.next();
new File(aFile).delete();
}
} catch (Exception exc) {
throw exc;
} finally {
try {
ftpClient.quit();
} catch (Exception e1) {
}
}
return fileSize;
}
hth,
+++