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;

}

}

连接ftp服务器 JDK 1.7的更多相关文章

  1. 【FTP】C# System.Net.FtpClient库连接ftp服务器(上传文件)

    如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...

  2. 【FTP】C# System.Net.FtpClient库连接ftp服务器(下载文件)

    如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...

  3. java 无法连接ftp服务器(500 OOPS: cannot change directory)

    在使用java连接ftp服务器时可能会出现无法连接的情况,检查代码是没有错误的,这时就应该考虑一下服务器端的情况了: 首先用在本地打开命令窗口,输入:ftp ftp服务器IP,窗口会提示你输入用户名密 ...

  4. linux下常用FTP命令 1. 连接ftp服务器

    1. 连接ftp服务器 格式:ftp [hostname| ip-address] a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密 ...

  5. linux下常用FTP命令 1. 连接ftp服务器[转]

    1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...

  6. 【VS2019】Web项目发布时提示无法连接FTP服务器

    使用 Visual Studio 2019 时出现的问题 环境:win10 ltsc 场景 发布Web项目到FTP时 失败,并提示 _无法打开网站"ftp://...".未安装与 ...

  7. MFC连接ftp服务器

    CInternetSession* m_pInetSession; CFtpConnection*   m_pFtpConnection; //连接服务器的函数 BOOL CftpClientDlg: ...

  8. 常用FTP命令 1. 连接ftp服务器

    1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...

  9. 通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等

    记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...

随机推荐

  1. Windows & Ubuntu 双系统完美卸载Ubuntu(不残留,无污染)

    双系统卸载Ubuntu时,如若直接从Windows磁盘管理里格式化Ubuntu分区,由于Ubuntu的引导盘的原因,会导致电脑启动时出现问题,所以不建议这样的操作. 卸载Ubuntu前需要区分BIOS ...

  2. saas系统多租户数据隔离的实现(一)数据隔离方案

    0. 前言 前几天跟朋友聚会的时候,朋友说他们公司准备自己搞一套saas系统,以实现多个第三方平台的业务接入需求.聊完以后,实在手痒难耐,于是花了两天时间自己实现了两个saas系统多租户数据隔离实现方 ...

  3. Python时间模块。

    python中时间的表示方式 unix时间戳,字符串时间,格式化时间 时间模块有,time,datetime,calendar #time模块 import time #获取本地时间戳,返回浮点数 p ...

  4. python正则表达式(8)--分组、后向引用、前(后)向断言

    无名.有名分组 (1)正则表达式—无名分组 从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推. 需要注意的是,有一个隐含的全局分组(就是索引号为 ...

  5. 手抄吧1:windows web server

    字母写的他妈的 太恶心了  以后努力改  天天敲代码  好恶心的字体

  6. 修复wecenter移动版description首页描述一样问题

    因网友要求,wecenter移动版description首页描述一样,所以在此写个教程,希望帮助大家! 修改方法 打开app/m/main.php TPL::output('m/question'); ...

  7. python案例-判断素数

    from math import sqrt def is_prime(num): for rea in range(2,int(sqrt(num)+1)): if num%rea==0: return ...

  8. hive Hive 2.0函数大全(中文版)(转)

    转自:https://www.cnblogs.com/MOBIN/p/5618747.html#1 摘要 Hive内部提供了很多函数给开发者使用,包括数学函数,类型转换函数,条件函数,字符函数,聚合函 ...

  9. MySQL利用LOCATE,CONCAT查询

    SELECT * FROM table t WHERE 1=1 AND LOCATE(#{searchParams},CONCAT(t.account,IFNULL(t.id,''),IFNULL(t ...

  10. 不用图片做的三角语言框效果,纯样式编写,css三角样式写法

      2010-07-05 19:57:28 博主 回复 用户昵称 在秋日真的有轻柔吧. 上边效果与理想的有误差,代码布不上去,下边是源代码,另行保存后查看真正效果,下图是真正效果,区别在三角处,里面颜 ...