连接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; } } |
连接ftp服务器 JDK 1.7的更多相关文章
- 【FTP】C# System.Net.FtpClient库连接ftp服务器(上传文件)
如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...
- 【FTP】C# System.Net.FtpClient库连接ftp服务器(下载文件)
如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...
- java 无法连接ftp服务器(500 OOPS: cannot change directory)
在使用java连接ftp服务器时可能会出现无法连接的情况,检查代码是没有错误的,这时就应该考虑一下服务器端的情况了: 首先用在本地打开命令窗口,输入:ftp ftp服务器IP,窗口会提示你输入用户名密 ...
- linux下常用FTP命令 1. 连接ftp服务器
1. 连接ftp服务器 格式:ftp [hostname| ip-address] a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密 ...
- linux下常用FTP命令 1. 连接ftp服务器[转]
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
- 【VS2019】Web项目发布时提示无法连接FTP服务器
使用 Visual Studio 2019 时出现的问题 环境:win10 ltsc 场景 发布Web项目到FTP时 失败,并提示 _无法打开网站"ftp://...".未安装与 ...
- MFC连接ftp服务器
CInternetSession* m_pInetSession; CFtpConnection* m_pFtpConnection; //连接服务器的函数 BOOL CftpClientDlg: ...
- 常用FTP命令 1. 连接ftp服务器
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
- 通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等
记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...
随机推荐
- Windows & Ubuntu 双系统完美卸载Ubuntu(不残留,无污染)
双系统卸载Ubuntu时,如若直接从Windows磁盘管理里格式化Ubuntu分区,由于Ubuntu的引导盘的原因,会导致电脑启动时出现问题,所以不建议这样的操作. 卸载Ubuntu前需要区分BIOS ...
- saas系统多租户数据隔离的实现(一)数据隔离方案
0. 前言 前几天跟朋友聚会的时候,朋友说他们公司准备自己搞一套saas系统,以实现多个第三方平台的业务接入需求.聊完以后,实在手痒难耐,于是花了两天时间自己实现了两个saas系统多租户数据隔离实现方 ...
- Python时间模块。
python中时间的表示方式 unix时间戳,字符串时间,格式化时间 时间模块有,time,datetime,calendar #time模块 import time #获取本地时间戳,返回浮点数 p ...
- python正则表达式(8)--分组、后向引用、前(后)向断言
无名.有名分组 (1)正则表达式—无名分组 从正则表 达式的左边开始看,看到的第一个左括号“(”表示表示第一个分组,第二个表示第二个分组, 依次类推. 需要注意的是,有一个隐含的全局分组(就是索引号为 ...
- 手抄吧1:windows web server
字母写的他妈的 太恶心了 以后努力改 天天敲代码 好恶心的字体
- 修复wecenter移动版description首页描述一样问题
因网友要求,wecenter移动版description首页描述一样,所以在此写个教程,希望帮助大家! 修改方法 打开app/m/main.php TPL::output('m/question'); ...
- python案例-判断素数
from math import sqrt def is_prime(num): for rea in range(2,int(sqrt(num)+1)): if num%rea==0: return ...
- hive Hive 2.0函数大全(中文版)(转)
转自:https://www.cnblogs.com/MOBIN/p/5618747.html#1 摘要 Hive内部提供了很多函数给开发者使用,包括数学函数,类型转换函数,条件函数,字符函数,聚合函 ...
- MySQL利用LOCATE,CONCAT查询
SELECT * FROM table t WHERE 1=1 AND LOCATE(#{searchParams},CONCAT(t.account,IFNULL(t.id,''),IFNULL(t ...
- 不用图片做的三角语言框效果,纯样式编写,css三角样式写法
2010-07-05 19:57:28 博主 回复 用户昵称 在秋日真的有轻柔吧. 上边效果与理想的有误差,代码布不上去,下边是源代码,另行保存后查看真正效果,下图是真正效果,区别在三角处,里面颜 ...