How to copy a file on the FTP server to a directory on the same server in Java?

前端 未结 4 906
长情又很酷
长情又很酷 2020-12-05 08:25

I\'m using Apache Commons FTP to upload a file. Before uploading I want to check if the file already exists on the server and make a backup from it to a backup directory on

4条回答
  •  粉色の甜心
    2020-12-05 08:45

    If you are using apache commons net FTPClient, there is a direct method to move a file from one location to another location (if the user has proper permissions).

    ftpClient.rename(from, to);
    

    or, If you are familiar with ftp commands, you can use something like

    ftpClient.sendCommand(FTPCommand.yourCommand, args);
    if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
         //command successful;
    } else {
         //check for reply code, and take appropriate action.
    }
    

    If you are using any other client, go through the documentation, There wont be much changes between client implementations.

    UPDATE:

    Above approach moves the file to to directory, i.e, the file won't be there in from directory anymore. Basically ftp protocol meant to be transfer the files from local <-> remote or remote <-> other remote but not to transfer with in the server.

    The work around here, would be simpler, get the complete file to a local InputStream and write it back to the server as a new file in the back up directory.

    to get the complete file,

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    ftpClient.retrieveFile(fileName, outputStream);
    InputStream is = new ByteArrayInputStream(outputStream.toByteArray());
    

    now, store this stream to backup directory. First we need to change working directory to backup directory.

    // assuming backup directory is with in current working directory
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//binary files
    ftpClient.changeWorkingDirectory("backup");
    //this overwrites the existing file
    ftpClient.storeFile(fileName, is);
    //if you don't want to overwrite it use storeUniqueFile
    

    Hope this helps you..

提交回复
热议问题