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
- Java中实现FTP文件上传下载 涉及中文路径以及中文文件
- Java中FTP文件上传下载中文文件乱码问题
- java中ftp下载上传 解决中文文件上传下载中文乱码和文件上传失败下载文件为0kb
- java实现ftp文件上传下载
- Java实现FTP上传下载文件
- Java 实现ftp上传下载文件
- JAVA中FTP文件上传下载
- java实现ftp上传下载,中文不乱码
- FTP上传中文文件到中文路径
- JAVA实现FTP文件上传下载文件
- smartUpload上传下载文件以及中文乱码
- Java中实现FTP上传下载文件的功能,完整代码
- EDI中JAVA通过FTP工具实现文件上传下载
- Java中实现FTP上传下载文件的功能,完整代码
- Java中实现FTP上传下载文件的功能
- java ftp 文件上传下载
- java FTP上传下载文件
- java FTP上传下载文件
- Java中Synchronized的用法
- Mysql
- Apache Maven 入门篇 ( 上 )
- QTP 上传附件
- linux下常用命令
- Java中实现FTP文件上传下载 涉及中文路径以及中文文件
- Android Studio NDK开发--JNI编程
- 关于解决eclipse被墙无法下载一些插件和更新的问题
- java使用BufferedImage操作合成图片
- Cordova通过CordovaPlugin插件调用 Activity
- hadoop 里常用命令
- uboot启动参数设置分类及方法
- 写一个python脚本,实现简单的http服务器功能:
- 正则表达式