Como preservar a data modificada ao recuperar o arquivo usando o Apache FTPClient?

Eu estou usando org.apache.commons.net.ftp.FTPClient para recuperar arquivos de um servidor ftp. É fundamental que eu preserve o último registro de data e hora modificado no arquivo quando ele é salvo na minha máquina. Alguém tem uma sugestão de como resolver isso?

Foi assim que resolvi:

 public boolean retrieveFile(String path, String filename, long lastModified) throws IOException { File localFile = new File(path + "/" + filename); OutputStream outputStream = new FileOutputStream(localFile); boolean success = client.retrieveFile(filename, outputStream); outputStream.close(); localFile.setLastModified(lastModified); return success; } 

Eu gostaria que a equipe Apache implementasse esse recurso.

É assim que você pode usá-lo:

 List ftpFiles = Arrays.asList(client.listFiles()); for(FTPFile file : ftpFiles) { retrieveFile("/tmp", file.getName(), file.getTimestamp().getTime()); } 

Você pode modificar o registro de data e hora após o download do arquivo.

O registro de data e hora pode ser recuperado por meio do comando LIST ou do comando MDTM (não padrão).

Você pode ver aqui como modificar o registro de data e hora: que: http://www.mkyong.com/java/how-to-change-the-file-last-modified-date-in-java/

Quando a lista de download de arquivos, como todos os arquivos retornados por FTPClient.mlistDir ou FTPClient.listFiles , usa o registro de data e hora retornado com a listview para atualizar o timestemp dos arquivos baixados localmente:

 String remotePath = "/remote/path"; String localPath = "C:\\local\\path"; FTPFile[] remoteFiles = ftpClient.mlistDir(remotePath); for (FTPFile remoteFile : remoteFiles) { File localFile = new File(localPath + "\\" + remoteFile.getName()); OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(localFile)); if (ftpClient.retrieveFile(remotePath + "/" + remoteFile.getName(), outputStream)) { System.out.println("File " + remoteFile.getName() + " downloaded successfully."); } outputStream.close(); localFile.setLastModified(remoteFile.getTimestamp().getTimeInMillis()); } 

Ao fazer o download de um único arquivo específico, use FTPClient.mdtmFile para recuperar o registro de data e hora do arquivo remoto e atualizar o registro de data e hora do arquivo local baixado de acordo:

 File localFile = new File("C:\\local\\path\\file.zip"); FTPFile remoteFile = ftpClient.mdtmFile("/remote/path/file.zip"); if (remoteFile != null) { OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(localFile)); if (ftpClient.retrieveFile(remoteFile.getName(), outputStream)) { System.out.println("File downloaded successfully."); } outputStream.close(); localFile.setLastModified(remoteFile.getTimestamp().getTimeInMillis()); }