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. 打造好用的C++ IDE环境

    https://www.jianshu.com/p/1aa989808e15 这哥们说的也是极好,也可以这部分直接看他的示例! mingw-w64应该可以算是mingw的改进版本吧,mingw系列编译 ...

  2. python正则表达式(4)--search方法

    1.re.search函数 re.search 扫描整个字符串并返回第一个成功的匹配,如果匹配失败search()就返回None. (1)函数语法: re.search(pattern, string ...

  3. Opencv 初探 常用API

    一.介绍 OpenCV是计算机视觉领域应用最广泛的开源工具包,基于C/C++,支持Linux/Windows/MacOS/Android/iOS,并提供了Python,Matlab和Java等语言的接 ...

  4. reactNative 获取组件高、宽、位置等信息

    import {findNodeHandle, UIManager} from 'react-native' layout(ref) { const handle = findNodeHandle(r ...

  5. Implementing the Singleton Pattern in C#

    Table of contents (for linking purposes...) Introduction Non-thread-safe version Simple thread safet ...

  6. Longest Common Substring II SPOJ - LCS2 (后缀自动机)

    Longest Common Substring II \[ Time Limit: 236ms\quad Memory Limit: 1572864 kB \] 题意 给出\(n\)个子串,要求这\ ...

  7. Cloud-init原理

    Ubuntu修改主机名后,重启自动恢复原来的主机名? 这是因为Ubuntu18.10上,默认安装并启动了cloud-init, 需要停止它的四个服务进程,才可以使用传统的方式修改主机名. cloud- ...

  8. Flume 实战,将多台机器日志直接收集到 Kafka

    目前我们使用的一个 b 端软件的报错日志分散在集群各处,现在想把它收集到一个地方然后统一丢进 Kafka 提供给下游业务进行消费. 我想到了 flume,之前让同事搭建的这次自己想多了解一些细节于是就 ...

  9. DDD 全称 “Domain-Driven Design”,领域驱动设计

    大型软件项目的最复杂之处不是实现,而是软件所服务的真正的领域. 领域驱动设计就是用来处理这些高度复杂领域的理想和途径,使得领域本身成为项目关注的焦点,从而达到维护能深刻反映领域的软件模型的目的. 通过 ...

  10. AttributeError: module 'pytest' has no attribute 'allure'

    解决 pip3 uninstall pytest-allure-adaptor pip3 install allure-pytest 参考: https://www.cnblogs.com/lansa ...