java中ftp下载上传 解决中文文件上传下载中文乱码和文件上传失败下载文件为0kb

时间:2022-11-30 21:00:27

 解决中文文件上传下载中文乱码和文件上传失败下载文件为0kb

/**

* @author xh 测试成功 可以下载中文文件  ftp默认的编码为gbk
* @param url
* @param port
* @param username
* @param password
* @param remotePath
* @param fileName
* @param localPath
* @return
*/
public static boolean downFtpFile(String url, int port, String username,  
            String password, String remotePath, String fileName,  
            String localPath) {  
        boolean success = false;  
        FTPClient ftp = new FTPClient();  
        try {  
            int reply;  
            ftp.connect(url, port);  
            // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
            ftp.login(username, password);// 登录  
            reply = ftp.getReplyCode();  
            if (!FTPReply.isPositiveCompletion(reply)) {  
                ftp.disconnect();  
                return success;  
            }  
            ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录  
            FTPFile[] fs = ftp.listFiles();  
            for (FTPFile ff : fs) {  
                String fname = new String(ff.getName().getBytes("iso-8859-1"),  
                        "gbk");  
                if (fname.equals(fileName)) {  
                    File localFile = new File(localPath+fname);  
                    OutputStream is = new FileOutputStream(localFile);  
                    ftp.retrieveFile(ff.getName(), is);  
                    is.close();  
                    break;  
                }  
            }  
            ftp.logout();  
            success = true;  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (ftp.isConnected()) {  
                try {  
                    ftp.disconnect();  
                } catch (IOException ioe) {  
                }  
            }  
        }  
        return success;  
    }  


/**
 * @author xh 测试成功 可以上传中文文件
 * @param url
 * @param port
 * @param username
 * @param password
 * @param path
 * @param filename
 * @param input
 * @return
 */
public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {
boolean success = false;
FTPClient ftp = new FTPClient();
  try {
   int reply;
   ftp.connect(url, port);//连接FTP服务器
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);//登录
reply = ftp.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
              }
ftp.changeWorkingDirectory(path);
ftp.setControlEncoding("ISO-8859-1");
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
  ftp.storeFile(new String(filename.getBytes("GBK"),"ISO-8859-1"), input); 
input.close();
ftp.logout();
success = true;


    } catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {}
}

}
  return success;
}