ftpClient 记录
来源:互联网 发布:阿里巴巴用什么数据库 编辑:程序博客网 时间:2024/05/21 09:54
package com.ftp_copyFile;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import org.apache.commons.net.ftp.FTPClient;public class ftpMain{ public static void main(String[] args) { int ftpPort = 0; String ftpUserName = ""; String ftpPassword = ""; String ftpHost = ""; String ftpPath = ""; try { InputStream in = FTPUtil.class.getClassLoader().getResourceAsStream("ftp.properties"); if (in == null) { System.out.println("配置文件ftp.properties读取失败"); } else { Properties properties = new Properties(); properties.load(in); ftpUserName = properties.getProperty("ftpUserName"); ftpPassword = properties.getProperty("ftpPassword"); ftpHost = properties.getProperty("ftpHost"); ftpPort = Integer.valueOf(properties.getProperty("ftpPort")).intValue(); ftpPath = properties.getProperty("ftpPath"); ftpCopy(ftpUserName, ftpPassword, ftpPath, ftpHost, ftpPort, "a1.jpg"); } } catch (Exception e) { e.printStackTrace(); System.out.println(e.toString()); } } public static boolean ftpCopy(String ftpUserName, String ftpPassword, String ftpPath, String ftpHost, int ftpPort, String fileName) throws IOException { InputStream in = null; FTPClient ftpClient = null; boolean copyFalg = false; try { ftpClient = FTPUtil.getFTPClient(ftpHost, ftpPassword, ftpUserName, ftpPort);// ftpClient.setControlEncoding("UTF-8"); // 中文支持 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); ftpClient.setDefaultTimeout(2*60*1000); ftpClient.setSoTimeout(5*60*1000); ftpClient.setBufferSize(1024); ftpClient.changeWorkingDirectory(ftpPath); //获取输入流 in = ftpClient.retrieveFileStream(fileName); fileName = "new_" + fileName; // 调用完之后必须调用completePendingCommand释放,否则FTP会断开连接 if (!ftpClient.completePendingCommand()) { copyFalg = false; return copyFalg; } // 如果读取的文件流不为空则复制文件 if (in != null) { copyFalg = ftpClient.storeFile(fileName, in); // 关闭文件流 in.close(); if (!copyFalg) { return copyFalg; } } } catch (FileNotFoundException e) { System.out.println(e.toString()); } return copyFalg; }}
package com.ftp_copyFile;import java.io.IOException;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPReply;public class FTPUtil{ /** * 获取FTPClient对象 * * @param ftpHost FTP主机服务器 * @param ftpPassword FTP 登录密码 * @param ftpUserName FTP登录用户名 * @param ftpPort FTP端口 默认为21 * @return */ public static FTPClient getFTPClient(String ftpHost, String ftpPassword, String ftpUserName, int ftpPort) { FTPClient ftpClient = null; try { ftpClient = new FTPClient(); ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器 ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器 if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { ftpClient.disconnect(); } } catch (IOException e) { e.printStackTrace(); } return ftpClient; }}
ftp.properties
ftpUserName=rootftpPassword=134ftpHost=10.41.200.23ftpPort=21ftpPath=/home/123writeTempFielPath=e\://
研究半天没找到解决方法,先记录下来。
有种思路是:分别获取新旧文件的输入输出流,然后进行读写操作,阻碍是:FTP服务器上大文件的输入流没法获取。
-----------------------------------------
改进实施:
ftpClient2 = FTPUtil.getFTPClient(ftpHost, ftpPassword, ftpUserName, ftpPort); ftpClient2.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient2.enterLocalPassiveMode(); ftpClient2.setDefaultTimeout(2*60*1000); ftpClient2.setSoTimeout(5*60*1000); ftpClient2.setBufferSize(1024); ftpClient2.changeWorkingDirectory(ftpPath); out = ftpClient2.storeFileStream(fileName); try { byte[] buffer = new byte[1024]; int temp = 0; while (true) { temp = in.read(buffer, 0, buffer.length); if (temp == -1) { break; } out.write(buffer, 0, temp); } } catch(IOException e) { System.out.println(e.toString()); } finally { try { in.close(); out.close(); } catch(IOException e2) { System.out.println(e2.toString()); } }也可适用于不同的FTP服务器之间,大文件可以成功,项目中未实际使用。
- ftpClient 记录
- FTPClient
- FTPClient
- FtpClient
- FTPClient
- FTPClient
- FTPClient
- ftpclient
- FTPClient
- ftpClient
- FtpClient
- FTPClient类
- ftpclient(java)
- ftpClient.binary()
- FTPClient 简介
- FTPClient相关
- ftpClient ,httpClient
- FTPClient 上传
- C++解析得到的JSON数据
- 一个应届计算机毕业生的2012求职之路
- Android学习小应用案例---根据身高和性别计算标准体重
- postgreSQL在debian下安装、使用(SIL4—linux学习篇)
- 设计模式--学习笔记--代理模式Proxy--基础篇
- ftpClient 记录
- linux学习笔记
- 初创电商步步谈(一)- 前期准备的内容真不少
- GCC 字节对齐设置
- JDK6的安装
- gettid 和pthread_self的区别
- function-call stack
- (3)选择元素——(6)属性选择器(Attribute selectors)
- cocos2dx多线程以及线程同步