连接ftp服务器 JDK 1.7

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import org.apache.log4j.Logger;

import com.zhiwei.core.util.AppUtil;

import java.net.InetSocketAddress;

import java.net.SocketAddress;

import sun.net.TelnetInputStream;

import sun.net.TelnetOutputStream;

import sun.net.ftp.FtpClient;

import sun.net.ftp.FtpProtocolException;

public class  FtpUtils {

protected static Logger LOG=Logger.getLogger(FtpUtils.class);

private  FtpClient ftpClient=null;

/**

* 连接ftp服务器 JDK 1.7

*

* @param url

* @param port

* @param username

* @param password

* @return FtpClient

* @throws FtpProtocolException

* @throws IOException

*/

public  FtpClient connect(String url, int port, String username,

String password) { // 创建ftp

try {

// 创建地址

SocketAddress addr = new InetSocketAddress(url, port);

// 连接

ftpClient = FtpClient.create();

ftpClient.setConnectTimeout(6000000);

ftpClient.connect(addr);

// 登陆

ftpClient.login(username, password.toCharArray());

ftpClient.setBinaryType();

System.out.println("------------------------------ftp服务器已连接----------------------");

} catch (FtpProtocolException e) {

LOG.error("ftp连接服务器出错,出错原因\r\n", e);

} catch (IOException e) {

LOG.error("ftp连接服务器出错,出错原因", e);

}

return ftpClient;

}

/**

* 切换目录

*

* @param ftp

* @param path

*/

public  void cd(String path) {

try {

ftpClient.changeDirectory(path);

LOG.info("切换目录"+ftpClient.getWorkingDirectory());

// System.out.println(ftpClient.getWorkingDirectory());

} catch (FtpProtocolException e) {

LOG.error("切换目录出错",e);

} catch (IOException e) {

LOG.error("切换目录出错",e);

}

}

//上传创建的文件夹或文件

public void uploadDirectory(String directory,boolean bl,String nameFtp,String n,String serverIp,String username,String password)throws IOException, FtpProtocolException{

if (ftpClient==null) {

Integer ss = Integer.valueOf(n);

connect(serverIp, ss,username , password);

}

File file=new File(directory);

String name=null;//待上传文件名

boolean result;

if(file.isDirectory()){

String dir = file.getName();

if(bl){

dir = nameFtp;

bl = false;

}

result=isDirExist(ftpClient,dir);

if (!result) {

LOG.error(dir+"----------该文件夹已存在");

}

try {

ftpClient.changeDirectory(dir);

ftpClient.setBinaryType();

} catch (FtpProtocolException e) {

LOG.error("------进入"+dir+"文件夹失败--------",e);

}

String[] files = file.list();

for (int i = 0; i < files.length; i++) {

File tmpFile = new File(file.getPath()+"\\"+files[i] );

if(tmpFile.isDirectory()){

uploadDirectory(tmpFile.getAbsolutePath(),bl,nameFtp, n, serverIp, username, password);

}else{

name=tmpFile.getName();

upload(directory+"/"+name, n, serverIp, username, password);

}

}

ftpClient.changeToParentDirectory();

}else{   //文件上传

upload(directory,file.getName(), n, serverIp, username, password);

}

}

//文件上传

public void upload(String srcFile,String n,String serverIp,String username,String password)throws IOException{

File file=new File(srcFile);

FileInputStream fin=new FileInputStream(srcFile);

TelnetOutputStream tos = null;

try {

tos = (TelnetOutputStream) ftpClient.putFileStream(file.getName(), true);

if(file.getName().equals("spring.xml")){

InputStreamReader ie=new InputStreamReader(fin, "utf-8");

BufferedReader reader = new BufferedReader(ie);

String line = null;

while ((line = reader.readLine()) != null) {

if(line.indexOf("serverIp")!=-1){

line=line.replaceAll("serverIp", serverIp);

line=line.replaceAll("dataName", n);

}

if(line.indexOf("datausername")!=-1){

line=line.replaceAll("datausername", username);

}

if(line.indexOf("datapassword")!=-1){

line=line.replaceAll("datapassword", password);

}

tos.write(line.getBytes("utf-8"));

}

reader.close();

ie.close();

}else{

int readLength = 0;

byte[] buf = new byte[1024];

while ( (readLength = fin.read(buf)) != -1) {

tos.write(buf, 0, readLength);

}

}

fin.close();

tos.close();

} catch (Exception e) {

//System.out.println("--------获取远程文件输出流失败---");

LOG.error("--------获取远程文件输出流失败---",e );

}

}

public void upload(String srcFile,String destFile,String n,String serverIp,String username,String password)throws IOException{

upload(srcFile, n, serverIp, username, password);

File file=new File(srcFile);

//文件重命名 打开 上传 zip文件会报错 先关闭

// ftpClient.rename(file.getName(), destFile);

}

public void close(){

try {

ftpClient.close();

} catch (IOException e) {

LOG.error("关闭输出流失败",e);

}

}

/**

* @param directory  上传文件在服务器上的存放路径

* @param srcFilePath  要上传文件的存放路径

* svn:songwj

* 创建文件夹、调用上传方法进行上传

* @throws FtpProtocolException

*/

public void swjUploadDirectory(String directory,String srcFilePath,boolean bl,String nameFtp,String n,String serverIp,String username,String password,String dirStr)throws IOException, FtpProtocolException{

System.out.println("服务器上要创建文件夹路径-------------"+dirStr);

boolean result;

//1 创建各个节点的文件夹

if(!"".equals(dirStr)){

String dir =dirStr;

String url[] = dir.split("/");

for(int i = 0;i<url.length;i++){

try {

result=isDirExist(ftpClient,url[i]);

if (result) {

LOG.info("创建"+url[i]+"成功");

}else {

LOG.info(url[i]+"已存在");

}

ftpClient.changeDirectory(url[i]);

ftpClient.setBinaryType();

} catch (FtpProtocolException e) {

LOG.error("------创建文件夹失败-----", e);

}

}

}

//2 调用上传方法上传文件

swjUpload(srcFilePath,directory, n, serverIp, username, password);

}

/** 判断Ftp目录是否存在

* @throws FtpProtocolException */

public boolean isDirExist(FtpClient ftpClient, String dir) {

try{

ftpClient.makeDirectory(dir);

} catch (FtpProtocolException  e1){

return false;

}catch (IOException e) {

return false;

}

return true;

}

/**

* 文件上传代码

* @param srcFile  要上传文件的路径

* @param fileToServerPath  上传文件存放在服务器上的位置

* @param n

* @param serverIp

* @param username

* @param password

* @throws IOException

*/

public void swjUpload(String srcFile,String fileToServerPath,String n,String serverIp,String username,String password)throws IOException{

//创建一个文件(服务器上对应的文件)

File serverFile = new File(fileToServerPath);

//创建选择要上传的文件对象

File srFile=new File(srcFile);

//把上传的文件对象放入文件流中

FileInputStream fin=new FileInputStream(srcFile);

LOG.info("上传到服务器地址==="+fileToServerPath);

//System.out.println("fileToServerPath==="+fileToServerPath);

//打开ftp上的文件 准备接收

TelnetOutputStream tos = null;

try {

tos = (TelnetOutputStream) ftpClient.putFileStream(serverFile.getName(), true);

if(srFile.getName().equals("spring.xml")){

InputStreamReader ie=new InputStreamReader(fin, "utf-8");

BufferedReader reader = new BufferedReader(ie);//读取要上传的 文件

String line = null;

while ((line = reader.readLine()) != null) {

if(line.indexOf("serverIp")!=-1){

line=line.replaceAll("serverIp", serverIp);

line=line.replaceAll("dataName", n);

}

if(line.indexOf("datausername")!=-1){

line=line.replaceAll("datausername", username);

}

if(line.indexOf("datapassword")!=-1){

line=line.replaceAll("datapassword", password);

}

tos.write(line.getBytes("utf-8"));

}

reader.close();

ie.close();

}else{

int readLength = 0;

byte[] buf = new byte[1024];

while ( (readLength = fin.read(buf)) != -1) {

tos.write(buf, 0, readLength);//把要上传文件流写入服务器的文件中

}

}

tos.close();

} catch (Exception e) {

LOG.error("上传文件到服务器失败", e);

}

fin.close();

}

/**

* Ftp 服务器文件下载单个文件

* svn:songwj

* @param srcStr  要下载文件的路径

* @param disStr  下载文件存放的路径

*/

public  void  ftpDownFile(String srcStr,String disStr) {

// 读取配置文件读取ftp ip地址 端口号  账户  密码

String ip = AppUtil.getFtpIp();

String us = AppUtil.getFtpUsName();//帐号

String ps = AppUtil.getFtpPss();//密码

int port = Integer.valueOf(AppUtil.getFtpPort());//端口 默认为 21

connect(ip, port, us, ps);

TelnetInputStream is = null;

FileOutputStream os = null;

System.out.println("srcStr--------------------"+srcStr);

System.out.println("disStr--------------------"+disStr);

try {

//获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。

ftpClient.changeDirectory(srcStr);

is = (TelnetInputStream) ftpClient.getFileStream(srcStr);

System.out.println("os--------------------"+os.toString());

byte[] bytes = new byte[2048];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

}

System.out.println("----------------下载成功----------------");

} catch (IOException ex) {

//System.out.println("下载失败");

LOG.error("---------------下载失败--------------", ex);

throw new RuntimeException(ex);

} catch (FtpProtocolException e) {

LOG.error("----------------下载失败----------------", e);

} finally{

try {

if(is != null){

is.close();

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if(os != null){

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 删除ftp服务器上指定的文件

* @param fileName

*/

public String  removeFile(String deleteFilePath){

System.out.println("---------进入到删除方法中");

String resultStr = "";

if(ftpClient!= null){

try {

ftpClient.deleteFile(deleteFilePath);

//ftpClient.deleteFile("D:/sendMessagePicture.png");

//ftpClient.deleteFile( "D:\\sendMessagePicture.png");

resultStr = ftpClient.getLastResponseString();

//FtpReplyCode lastReplyCode = ftpClient.getLastReplyCode();

System.out.println("status----------------"+resultStr);

} catch (Exception e) {

LOG.error("删除失败", e);

}

}else{

resultStr = "FAIL";

}

return resultStr;

}

}

上一篇:jackson使用示例


下一篇:【转】oracle中rowid的用法 (全面)