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. kuangbin专题专题四 Silver Cow Party POJ - 3268

    题目链接:https://vjudge.net/problem/POJ-3268 题意:点X处开办排队,其他点的牛到X点去参加派对,然后从X点回到各自的点,通路是单向的,所有牛都要走最短路, 求出所有 ...

  2. 接口自动化--requests库封装

    前言 不管是自动化大佬还是自动化小白,都知道我们用python写接口自动化测试肯定是要用requests库来封装请求类的,下面就简单介绍下requests这个库 安装 一般都是直接采用pip命令安装: ...

  3. Tomcat管理

    Tomcat日志 /data/env/tomcat8546/logs/catalina.out echo "" > catalina.out Tomcat配置文件 /data ...

  4. Spring Boot 2实现分布式锁——这才是实现分布式锁的正确姿势!

    参考资料 网址 Spring Boot 2实现分布式锁--这才是实现分布式锁的正确姿势! http://www.spring4all.com/article/6892

  5. C#中集合ArrayList与Hashtable的使用

    C#中集合ArrayList与Hashtable的使用 http://blog.csdn.net/linukey/article/details/42506819 ArrayList: 一. 注意事项 ...

  6. python Tkinter的Text组件中创建x轴和y轴滚动条

    #!/usr/bin/python #coding: utf-8 from Tkinter import * root = Tk() root.title("记事本") root. ...

  7. spring、springMvc、springBoot和springCloud的联系与区别

    spring和springMvc: 1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc).业务层(Ioc) ...

  8. flux沉思录:面向store和通信机制的前端框架

    一.综述 Flux 被用来描述“单向”的数据流,且包含某些特殊的事件和监听器. 响应式编程是一种面向数据流和变化传播的编程范式 flux是响应式编程的一种? Flux 在本质上采用了模型-视图-控制器 ...

  9. 学习:Windows数据类型

    WINDOWS API中出现的常见的数据类型有以下几种: 1.DWORD:DWORD用于表示无符号整型的数据类型,实际名为double word,32位 2.HANDLE:HANDLE为32位的数据类 ...

  10. (尚033)Vue_案例_slot(组件间的通信4:slot)

    1.组件间的通信4:slot(slot:插槽,就是一个占位) slot用于标签反复使用很多次 1.1理解 此方式用于父组件向子组件传递标签数据, 其他为数据通信 外面组件向里面组件传递标签进去,直接拿 ...