java中ftp文件上传和中文乱码解决

来源:互联网 发布:网络上的白云先生是谁 编辑:程序博客网 时间:2024/06/05 00:30
1.定义实体类
package com.ftp;/** * ftp链接常量 * */public class Ftp {private String ipAddr;//ip地址private Integer port;//端口号private String userName;//用户名private String pwd;//密码private String path;//aaa路径public String getIpAddr() {return ipAddr;}public void setIpAddr(String ipAddr) {this.ipAddr = ipAddr;}public Integer getPort() {return port;}public void setPort(Integer port) {this.port = port;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}}

2.编写代码及测试。

package com.ftp;import java.io.File;  import java.io.FileInputStream;  import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import org.apache.commons.net.ftp.FTPClient;  import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;  import org.apache.log4j.Logger;  public class Test {    private static Logger logger=Logger.getLogger(Test.class);     private static  FTPClient ftp;        /**      *       * @param path 上传到ftp服务器哪个路径下         * @param addr 地址      * @param port 端口号      * @param username 用户名      * @param password 密码      * @return      * @throws Exception      */      private  boolean connect(String path,String addr,int port,String username,String password) throws Exception {            boolean result = false;            ftp = new FTPClient();            int reply;            ftp.connect(addr,port);            ftp.login(username,password);            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);            reply = ftp.getReplyCode();            if (!FTPReply.isPositiveCompletion(reply)) {                ftp.disconnect();                return result;            }            ftp.changeWorkingDirectory(path);            result = true;            return result;        }        /**      * @  new String(file.getName().getBytes("GBK"), "iso-8859-1")解决乱码     * @param file 上传的文件或文件夹      * @throws Exception      */      private void upload(File file) throws Exception{            if(file.isDirectory()){                     ftp.makeDirectory(new String(file.getName().getBytes("GBK"), "iso-8859-1"));                          ftp.changeWorkingDirectory(new String(file.getName().getBytes("GBK"), "iso-8859-1"));                String[] files = file.list();                       for (int i = 0; i < files.length; i++) {                    File file1 = new File(file.getPath()+"\\"+files[i] );                    if(file1.isDirectory()){                        upload(file1);                        ftp.changeToParentDirectory();                    }else{                                      File file2 = new File(file.getPath()+"\\"+files[i]);                        FileInputStream input = new FileInputStream(file2);                        ftp.storeFile(new String(file2.getName().getBytes("GBK"), "iso-8859-1") ,input);                        input.close();                                          }                           }            }else{                File file2 = new File(file.getPath());                FileInputStream input = new FileInputStream(file2);                ftp.storeFile(new String(file2.getName().getBytes("GBK"), "iso-8859-1"), input);                input.close();              }        }               public static void main(String[] args) throws Exception{       Test t = new Test();        t.connect("/xxtest", "123.123.126.13", 21, "wangyu", "123123");        File file = new File("E:/哈哈");        t.upload(file);       System.out.println("ok");         }  }  

项目源码下载:https://pan.baidu.com/s/1eSMpxqq


阅读全文
0 0