• java ftp上载下传 遇到的问题


    1、下载文件中文乱码,和下载文件大小为0kb

     1 /**
     2      * Description: 从FTP服务器下载文件
     3      * 
     4      * @param url
     5      *            FTP服务器hostname
     6      * @param port
     7      *            FTP服务器端口
     8      * @param username
     9      *            FTP登录账号
    10      * @param password
    11      *            FTP登录密码
    12      * @param remotePath
    13      *            FTP服务器上的相对路径
    14      * @param fileName
    15      *            要下载的文件名
    16      * @param localPath
    17      *            下载后保存到本地的路径
    18      * @return
    19      */
    20     public static boolean downFile(String url, int port, String username,
    21             String password, String remotePath, String fileName,
    22             String localPath) {
    23         boolean success = false;
    24         FTPClient ftp = new FTPClient();
    25         try {
    26             int reply;
    27             ftp.connect(url, port);
    28             // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
    29             ftp.login(username, password);// 登录
    30             reply = ftp.getReplyCode();
    31             if (!FTPReply.isPositiveCompletion(reply)) {
    32                 ftp.disconnect();
    33                 return success;
    34             }
    35             //这里的remotePath一定要转码:remotePath = new String("/统计预报文件夹".getBytes("GBK"),"ISO-8859-1");
    36             ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
    37 
    38             FTPFile[] fs = ftp.listFiles();
    39             for (FTPFile ff : fs) {
    40                 ftp.setControlEncoding("gbk");
    41                 String f = new String(ff.getName().getBytes("iso-8859-1"),"gbk");
    42                 if (f.equals(fileName)) {
    43                     File localFile = new File(localPath + File.separatorChar + f);
    44                     OutputStream os = new FileOutputStream(localFile);
    45                     ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    46                     //设置文件名为编码,如果写:ftp.retrieveFile(f, os); 下载中文文件时大小为0kb
    47                     ftp.retrieveFile(new String(f.getBytes("gbk"),"iso-8859-1"), os);
    48                     os.close();
    49                     success = true;
    50                 }
    51             }
    52 
    53             ftp.logout();
    54         } catch (IOException e) {
    55             e.printStackTrace();
    56         } finally {
    57             if (ftp.isConnected()) {
    58                 try {
    59                     ftp.disconnect();
    60                 } catch (IOException ioe) {
    61                 }
    62             }
    63         }
    64         return success;
    65     }

    2、文件上传ftp服务器,没有上传到指定 目录

     FTP服务器保存目录:path不能有:/,如果有就上传到根目录
     1 /**
     2      * Description: 向FTP服务器上传文件
     3      * 
     4      * @Version 1.0
     5      * @param url
     6      *            FTP服务器hostname
     7      * @param port
     8      *            FTP服务器端口
     9      * @param username
    10      *            FTP登录账号
    11      * @param password
    12      *            FTP登录密码
    13      * @param path
    14      *            FTP服务器保存目录:path不能有:/,如果有就上传到根目录
    15      * @param filename
    16      *            上传到FTP服务器上的文件名
    17      * @param input
    18      *            输入流
    19      * @return 成功返回true,否则返回false *
    20      */
    21     public static boolean uploadFile(String url,// FTP服务器hostname
    22             int port,// FTP服务器端口
    23             String username, // FTP登录账号
    24             String password, // FTP登录密码
    25             String path, // FTP服务器保存目录
    26             String filename, // 上传到FTP服务器上的文件名
    27             InputStream input // 输入流
    28     ) {
    29         boolean success = false;
    30         FTPClient ftp = new FTPClient();
    31         ftp.setControlEncoding("GBK");
    32         try {
    33             int reply;
    34             ftp.connect(url, port);// 连接FTP服务器
    35             // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
    36             ftp.login(username, password);// 登录
    37             reply = ftp.getReplyCode();
    38             if (!FTPReply.isPositiveCompletion(reply)) {
    39                 ftp.disconnect();
    40                 return success;
    41             }
    42             ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    43             ftp.makeDirectory(path);
    44             ftp.changeWorkingDirectory(path);
    45             ftp.storeFile(filename, input);
    46 
    47             input.close();
    48             ftp.logout();
    49             success = true;
    50         } catch (IOException e) {
    51             e.printStackTrace();
    52         } finally {
    53             if (ftp.isConnected()) {
    54                 try {
    55                     ftp.disconnect();
    56                 } catch (IOException ioe) {
    57                 }
    58             }
    59         }
    60         return success;
    61     }
  • 相关阅读:
    Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理
    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析
    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战
    超硬核Java学习路线图+学习资源+实战项目汇总,看完以后不用再问我怎么学Java了!
    还没使用过消息队列?这一份书单值得你好好看看!
    学习Spring,看这几本书就够了
    这份书单,想要晋级高级Java工程师的朋友值得一看!
    搞定JVM基本原理和面试题,看看这几本书妥妥够了!
    《自拍教程16》cmd的常用技巧
    《自拍教程15》命令行软件的通用技巧
  • 原文地址:https://www.cnblogs.com/kingxiaozi/p/4708305.html
Copyright © 2020-2023  润新知