Java中实现FTP文件上传下载 涉及中文路径以及中文文件

来源:互联网 发布:sql select count 1 编辑:程序博客网 时间:2024/06/06 03:36
// 引用三个jar包  commons-net-1.4.1.jar   jakarta-oro-2.0.8.jar  log4j-1.2.17.jar
Ftp实例
<pre name="code" class="java">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;}}


<pre name="code" class="java">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.FTPClientConfig;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;import org.apache.log4j.Logger;public class FtpUtil {private static Logger logger=Logger.getLogger(FtpUtil.class);private static FTPClient ftp;/** * 获取FTP连接 * @param f * @return * @throws Exception */public static boolean connectFtp(Ftp f) throws Exception{ftp=new FTPClient();boolean flag=false;int reply;if (f.getPort()==null) {ftp.connect(f.getIpAddr(),21);}else{ftp.connect(f.getIpAddr(),f.getPort());}ftp.login(f.getUserName(), f.getPwd());ftp.setFileType(FTPClient.BINARY_FILE_TYPE);reply = ftp.getReplyCode();          if (!FTPReply.isPositiveCompletion(reply)) {                ftp.disconnect();                return flag;          }          ftp.changeWorkingDirectory(f.getPath());          flag = true;          return flag;}/** * 关闭FTP连接 */public static void closeFtp(){if (ftp!=null && ftp.isConnected()) {try {ftp.logout();ftp.disconnect();} catch (IOException e) {e.printStackTrace();}}}/** * ftp上传文件 * @param f * @throws Exception */public static void upload(File f) throws Exception{if (f.isDirectory()) {ftp.makeDirectory(f.getName());ftp.changeWorkingDirectory(f.getName());String[] files=f.list();for(String fstr : files){File file1=new File(f.getPath()+"/"+fstr);if (file1.isDirectory()) {upload(file1);ftp.changeToParentDirectory();}else{File file2=new File(f.getPath()+"/"+fstr);FileInputStream input=new FileInputStream(file2);ftp.storeFile(file2.getName(),input);input.close();}}}else{File file2=new File(f.getPath());FileInputStream input=new FileInputStream(file2);ftp.storeFile(file2.getName(),input);input.close();}}/** * 下载连接配置 * @param f * @param localBaseDir 本地目录• * @param remoteBaseDir 远程目录• * @throws Exception */public static void startDown(Ftp f,String localBaseDir,String remoteBaseDir ) throws Exception{if (FtpUtil.connectFtp(f)) {        try {             FTPFile[] files = null;             boolean changedir = ftp.changeWorkingDirectory(remoteBaseDir);             if (changedir) {             ftp.setControlEncoding("iso-8859-1");//注意编码格式            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);            conf.setServerLanguageCode("zh");//中文                files = ftp.listFiles();                 for (int i = 0; i < files.length; i++) {                     try{                                             downloadFile(files[i], localBaseDir, remoteBaseDir);                     }catch(Exception e){                     logger.error(e);                     logger.error("<"+files[i].getName()+"下载失败");                     }                 }             }         } catch (Exception e) {         logger.error(e);         logger.error("下载过程中出现异常");         } }else{logger.error("连接失败!");}}/**      *      * 下载FTP文件      * 当你需要下载FTP文件的时候,调用此方法      * 根据--获取的文件名,本地地址,远程地址--进行下载      * @param ftpFile      * @param relativeLocalPath      * @param relativeRemotePath  * @throws Exception      */     private  static void downloadFile(FTPFile ftpFile, String relativeLocalPath,String relativeRemotePath) throws Exception {                         if (ftpFile.isFile()) {        String filename=new String(ftpFile.getName().getBytes("iso-8859-1"), "utf-8");//涉及到中文文件System.out.println(filename);            if (ftpFile.getName().indexOf("?") == -1) {                 OutputStream outputStream = null;                 try {                     File locaFile= new File(relativeLocalPath+ filename);                     //若文件已存在则返回                    if(locaFile.exists()){                     System.out.println("提示:目标文件已存在!!!!");                        return;                     }else{                         outputStream = new FileOutputStream(relativeLocalPath+ filename);                                                ftp.retrieveFile(ftpFile.getName(), outputStream);                         outputStream.flush();                         outputStream.close();                     }                 } catch (Exception e) {                     logger.error(e);                } finally {                     try {                         if (outputStream != null){                             outputStream.close();                         }                    } catch (IOException e) {                        logger.error("输出文件流异常");                     }                 }             }         } else {             String newlocalRelatePath = relativeLocalPath + ftpFile.getName();             String newRemote = new String(relativeRemotePath+ ftpFile.getName().toString());             File fl = new File(newlocalRelatePath);             if (!fl.exists()) {                 fl.mkdirs();             }             try {                 newlocalRelatePath = newlocalRelatePath + '/';                 newRemote = newRemote + "/";                 String currentWorkDir = ftpFile.getName().toString();                 boolean changedir = ftp.changeWorkingDirectory(currentWorkDir);                 if (changedir) {                     FTPFile[] files = null;                     files = ftp.listFiles();                     for (int i = 0; i < files.length; i++) {                         downloadFile(files[i], newlocalRelatePath, newRemote);                     }                 }                 if (changedir){                ftp.changeToParentDirectory();                 }             } catch (Exception e) {                 logger.error(e);            }         }     } public static void main(String[] args) throws Exception{  Ftp f=new Ftp();//ip地址€f.setIpAddr("36.110.85.10");//ftp用户名f.setUserName("p_center");//ftp密码f.setPwd("ea65db2fa7f45672");//端口号f.setPort(21);//FtpUtil.connectFtp(f);//File file = new File("F:/test/com/test/Testng.java");  //FtpUtil.upload(file);//String local = "f:/";String remote ="/大连华讯/邮币卡";String remoteUrl = new String(remote.getBytes("utf-8"), "iso-8859-1");//涉及到中文问题 根据系统实际编码改变FtpUtil.startDown(f, local,  remoteUrl);System.out.println("ok");   }  }


                                             
0 0
原创粉丝点击