使用jdk7用于连接和操作ftp服务器
package com.voiinnov.xingye.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import sun.net.ftp.FtpClient; import sun.net.ftp.FtpDirEntry; import sun.net.ftp.FtpProtocolException; public class FtpClientUtil { private FtpClient ftpClient; public FtpClient getFtpClient(){ return this.ftpClient; } /** * 连接FTP服务器 * @param ip ip地址 * @param port 端口号 * @param user 用户名 * @param password 密码 * @param path FTP的根目录 */ public void connectServer(String ip, int port, String user, String password, String path) { try { /* ******连接服务器的两种方法*******/ ftpClient = FtpClient.create(); try { SocketAddress addr = new InetSocketAddress(ip,port); ftpClient.connect(addr); ftpClient.login(user, password.toCharArray()); System.out.println("login success!"); //// 用2进制上传、下载 ftpClient.setBinaryType(); if (path!=null&&path.length() != 0){ //把远程系统上的目录切换到参数path所指定的目录 ftpClient.changeDirectory(path); } } catch (FtpProtocolException e) { e.printStackTrace(); } } catch (IOException ex) { ex.printStackTrace(); } } /** * 关闭连接 */ public void closeConnect() { try { ftpClient.close(); System.out.println("disconnect success"); } catch (IOException ex) { System.out.println("not disconnect"); ex.printStackTrace(); } } /** * 上传文件使用流 * @param localFile * @param remoteFile */ public void uploadStream(String localFile, String remoteFile){ FileInputStream is = null; File file_in = new File(localFile); try { is = new FileInputStream(file_in); ftpClient.putFile(remoteFile, is); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (FtpProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 上传文件 * @param localFile 本地文件 * @param remoteFile 远程文件 */ public void upload(String localFile, String remoteFile) { //this.localfilename = localFile; //this.remotefilename = remoteFile; OutputStream os = null; FileInputStream is = null; try { //将远程文件加入输出流中 try { os = ftpClient.putFileStream(remoteFile); } catch ( FtpProtocolException e) { e.printStackTrace(); } //获取本地文件的输入流 File file_in = new File(localFile); is = new FileInputStream(file_in); //创建一个缓冲区 byte[] bytes = new byte[1024]; int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } System.out.println("upload success"); } catch (IOException ex) { System.out.println("not upload"); ex.printStackTrace(); } finally{ try { if(is != null){ is.close(); } } catch (IOException e) { e.printStackTrace(); } finally { try { if(os != null){ os.close(); } } catch (IOException e) { e.printStackTrace(); } } } } /** * 下载文件 * @param remoteFile 远程文件路径(服务器端) * @param localFile 本地文件路径(客户端) */ public void download(String remoteFile, String localFile) { InputStream is = null; FileOutputStream os = null; try { //获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。 try { is = ftpClient.getFileStream(remoteFile); } catch (FtpProtocolException e) { e.printStackTrace(); } File file_in = new File(localFile); os = new FileOutputStream(file_in); byte[] bytes = new byte[1024]; int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } System.out.println("download success"); } catch (IOException ex) { System.out.println("not download"); ex.printStackTrace(); } finally{ try { if(is != null){ is.close(); } } catch (IOException e) { e.printStackTrace(); } finally { try { if(os != null){ os.close(); } } catch (IOException e) { e.printStackTrace(); } } } } /** * * @param remoteFile * @return */ public String downFile2String(String remoteFile){ InputStream is = null; StringBuffer sb = null; BufferedReader bufferReader = null; try { is = ftpClient.getFileStream(remoteFile); sb = new StringBuffer(); bufferReader = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = bufferReader.readLine()) != null) { System.out.println("读取的数据:"+line); sb.append(line+"\n"); } } catch (FtpProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return sb.toString(); } /** * 判断FTP服务器已经连接并且登陆 * @return */ private boolean isConAndLogin(){ boolean flag = false; flag =ftpClient.isLoggedIn()&&ftpClient.isConnected(); return flag ; } /** * 创建目录 * @param path 目录名 * <br/> * 如果需要一次性创建多个目录,可以使用这种字符串“test/test1/test2”直接创建多个目录 */ public void makeDir(String path){ try { if(isConAndLogin()){ ftpClient.makeDirectory(path); }else{ System.out.println("FTP没有连接成功"); } } catch (FtpProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 重命名 * @param sPath 源文件名 * @param dPath 目标文件名 */ public void renameDir(String sPath , String dPath ){ try { if(isConAndLogin()){ ftpClient.rename(sPath, dPath); }else{ System.out.println("FTP没有连接成功"); } } catch (FtpProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 递归删除文件夹 * @param path */ public void deleteDirs(String path) { try { Iterator<FtpDirEntry> dirEntryI =getFtpClient().listFiles(path); if(dirEntryI.hasNext()){ FtpDirEntry entry = null; while(dirEntryI.hasNext()){ entry = dirEntryI.next(); //System.out.println(entry.getType()+" "+entry.getName()); if(entry.getType()==FtpDirEntry.Type.DIR){ this.deleteDirs(path+File.separator+entry.getName()); getFtpClient().removeDirectory(path+File.separator+entry.getName()); }else{ getFtpClient().deleteFile(path+File.separator+entry.getName()); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 删除文件夹(删除的时候文件夹必须为空) * @param path */ public void delDir(String path){ try { if(isConAndLogin()){ ftpClient.removeDirectory(path); }else{ System.out.println("FTP没有连接成功"); } } catch (FtpProtocolException e) { System.out.println("没有连接"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 测试删除文件夹 */ public static void testDleDir(){ FtpClientUtil fu = new FtpClientUtil(); /* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器 */ fu.connectServer("127.0.0.1", 21, "test", "test", null); String path = "20140512_back"; fu.deleteDirs(path); fu.delDir(path); fu.closeConnect(); } /** * 测试重命名文件夹 */ public static void testRenameDir(){ FtpClientUtil fu = new FtpClientUtil(); /* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器 */ fu.connectServer("127.0.0.1", 21, "test", "test", null); String spath = "20150521"; String dpath = "20140512_back"; fu.renameDir(spath, dpath); fu.closeConnect(); } /** * 测试单个文件上传 */ public static void testSigleUplad(){ Date now = new Date(); SimpleDateFormat sDateFormat = new SimpleDateFormat(); sDateFormat.applyPattern("yyyyMMdd"); String dir = "/"+sDateFormat.format(now); FtpClientUtil fu = new FtpClientUtil(); /* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器 */ fu.connectServer("127.0.0.1", 21, "test", "test", null); dir=dir+"/xingyeblank"; //在FTP创建文件夹 fu.makeDir(dir); //本地文件 String localfile = "E:/test/ZXRZ_900201_TKSQ_20150521.txt"; //上传到ftp远程文件 String remotefile = dir+"/ZXRZ_900201_TKSQ_20150521.txt"; //上传 sDateFormat.applyPattern("yyyy-MM-dd hh:mm:ss"); System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间 fu.upload(localfile, remotefile); System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间 fu.closeConnect(); } /** * 测试单个文件上传 */ public static void testSigleUplad2(){ Date now = new Date(); SimpleDateFormat sDateFormat = new SimpleDateFormat(); sDateFormat.applyPattern("yyyyMMdd"); String dir = "/"+sDateFormat.format(now); FtpClientUtil fu = new FtpClientUtil(); /* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器 */ fu.connectServer("127.0.0.1", 21, "test", "test", null); dir=dir+"/xingyeblank"; //在FTP创建文件夹 fu.makeDir(dir); //本地文件 String localfile = "E:/test/ZXRZ_900201_TKSQ_20150521.txt"; //上传到ftp远程文件 String remotefile = dir+"/ZXRZ_900201_TKSQ_20150521.txt"; //上传 sDateFormat.applyPattern("yyyy-MM-dd hh:mm:ss"); System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间 fu.uploadStream(localfile, remotefile); System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间 fu.closeConnect(); } /** * 测试文件加载 */ public static void testDownFile(){ //下载到本地文件 String localfile = "E:/test/AESUtils副本3333.java"; //ftp远程文件 String remotefile = "20150521/xingyeblank/AESUtils111.java"; FtpClientUtil fu = new FtpClientUtil(); /* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器 */ fu.connectServer("127.0.0.1", 21, "test", "test", null); fu.download(remotefile, localfile); } public static void testDownFile2String(){ //ftp远程文件 String remoteFile = "20150521/xingyeblank/ZXRZ_900201_TKSQ_20150521.txt"; FtpClientUtil fu = new FtpClientUtil(); /* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器 */ fu.connectServer("127.0.0.1", 21, "test", "test", null); String str = fu.downFile2String(remoteFile); System.out.println(str); } /** * 测试创建文件夹 */ public static void testMakeDir(){ FtpClientUtil fu = new FtpClientUtil(); /* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器 */ fu.connectServer("127.0.0.1", 21, "test", "test", null); try { fu.getFtpClient().makeDirectory("20150521/test"); fu.getFtpClient().makeDirectory("20150521/test2"); fu.getFtpClient().makeDirectory("20150521/test3"); fu.getFtpClient().makeDirectory("20150521/test4"); fu.getFtpClient().makeDirectory("20150521/test5"); fu.closeConnect(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String agrs[]) { //testSigleUplad(); //testMakeDir(); //testRenameDir(); //testDleDir(); //testDownFile(); //testDownFile2String(); testSigleUplad2(); //---------------其他方法的说明---------------- //从FTP下载指定的文件到OutputStream下 //ftpClient.getFile(String remotePath, OutputStream); //如果是文件名列出文件信息,如果是目录则列出文件列表 //ftpClient.list(path); //列出指定目录内容 //ftpClient.nameList(path); } }
相关推荐
使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...
远程连接工具,支持SFTP,FTP 需要自带jdk环境 该平台类似于网页版的Xshell,基于cookie和json的方式存储登录信息无数据库更方便兼容每个用户的使用,支持SFTP和FTP两种登录方式,打破原有黑端显示命令行和文件名的...
另外,如果你需要在没有互联网连接的环境中安装JDK,可以考虑在一台有网络的机器上下载JDK7,然后通过USB驱动器或网络共享将文件传输到目标机器上。此外,还可以探索使用第三方镜像站点,但需注意保持软件的更新和...
JDK 1.6版本中提供了`java.net.FTPURLConnection`,它是`URLConnection`的一个子类,可以方便地处理FTP连接。不过,本压缩包中的实现可能是通过自定义的类和方法来封装FTP操作。 3. FTP命令: - `PUT`:上传文件到...
本文将详细介绍如何在CentOS 7环境下,通过离线方式安装JDK 1.8的tar.gz格式安装包。首先,我们需要准备的是一个名为“linux centos 下 jdk tar.gz 离线安装包”的文件,它通常是一个.7z压缩文件,包含了JDK的源代码...
在Java编程环境中,FTP(File Transfer Protocol)是一个用于在...这个过程涵盖了FTP连接、文件操作和压缩/解压缩技术,是Java中常见的文件处理任务。在实际应用中,还需要考虑错误处理、线程安全以及可能的性能优化。
2. 将下载的"jdk8的rpm包"传输到Linux服务器上,例如通过SCP或FTP。 3. 使用`rpm -ivh jdk-8.rpm`命令进行安装。请注意替换`jdk-8.rpm`为实际的文件名。 4. 安装完成后,设置环境变量。在`~/.bashrc`或`/etc/profile...
FinalShell是一款功能强大的一体化远程管理工具,集合了SSH客户端、FTP客户端和服务器管理等多种功能,深受IT管理员和开发者喜爱。它的主要特点包括多标签管理、命令行自动补全、文件同步、批量执行命令等,极大地...
本篇将详细介绍如何在CentOS 7系统下离线安装JDK 11,主要涉及的步骤包括下载JDK文件、上传至服务器以及执行安装脚本。 首先,你需要从Oracle官方网站或其他可信源下载JDK 11的Linux二进制文件,这里我们用的是"jdk...
"Chilkat-9.4.1-jdk7-win32.zip" 是一个软件开发工具包,主要用于Java开发者在Windows 32位环境下进行集成。Chilkat Software是一家知名的软件公司,提供各种API(应用程序接口)和服务,尤其在处理文件、加密、邮件...
《深入解析JDK6 API中文版》 JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件包,其中包含了Java运行环境、编译器、类库以及各种工具。JDK6作为Java发展历程中的一个重要版本,为开发者...
7. **新的反射API**:JDK 1.8提供了对反射API的增强,如MethodHandles、Lookup和MethodHandle类,提供了更高效和安全的方式来访问方法和字段。 8. ** Nashorn JavaScript引擎**:JDK 1.8引入了一个内置的Nashorn ...
- **方法二**: 使用SSH连接工具如PuTTY,并通过FTP方式上传文件。 **2.3 开始安装** - **步骤1**: 确保磁盘空间充足。 - **步骤2**: 如果JDK安装文件没有执行权限,可以通过命令`chmod a+x jdk-6u13-linux-i586....
FTP 协议使用 TCP 连接来传输文件,通常使用 21 号端口进行连接。 FTP 的工作模式 FTP 协议有两种工作模式:主动模式和被动模式。 主动模式(Active Mode):客户端打开一个随机端口,连接到服务器的 21 号端口,...
3. **事件驱动模型**:Ftpserver基于事件驱动模型工作,这提高了其性能和可扩展性,能够处理大量并发连接。 4. **安全性**:了解如何配置SSL/TLS以确保数据传输安全,以及如何设置权限和访问控制列表以保护服务器...
### 服务器CentOs6.6+ JDK1.7+Tomcat7+MySQL5.6安装部署记录 #### 一、安装CentOs6.6 **步骤解析:** 1. **下载与烧录ISO镜像:** - 首先需要下载好Linux (CentOs6.6mini) 的ISO文件,通过U盘制作工具如“大白菜...
1. **FTP连接**:使用`java.net.Socket`类建立与FTP服务器的TCP连接。FTP协议通常基于TCP的21号端口进行通信,控制连接在此端口上建立。 2. **FTP命令**:Java FTP客户端通过`java.net.Socket`发送FTP命令,如`USER...
通常,这可以通过SSH连接或使用FTP工具完成。下载后,将其放在一个合适的目录,例如 `/home/user/downloads/`。 接下来,我们需要解压这个压缩包。可以使用`tar`命令来完成: ```bash cd /home/user/downloads/ ...
throw new RuntimeException("断开FTP连接异常", e); } } } ``` **关键步骤解析**: 1. **连接FTP服务器**:通过`connect`方法指定服务器IP地址。 2. **登录FTP服务器**:使用`login`方法进行用户认证。 3. **...
5. **网络编程**:`java.net`包提供了网络通信的功能,如`Socket`和`ServerSocket`类用于TCP/IP连接,`URL`和`URLConnection`用于HTTP和FTP请求。 6. **Swing GUI**:`javax.swing`包包含用于构建图形用户界面(GUI...