java实现ftp的几种方式
import sun.net.ftp.*;import sun.net.*;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ByteArrayOutputStream;import java.util.ArrayList;import java.util.StringTokenizer; /** FTP远程命令列表<br>USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br>PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br>ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br>REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br>QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br> 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n<br> ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令<br> ftpclient.readServerResponse一定要在sendServer后调用<br> nameList("/test")获取指目录下的文件列表<br> XMKD建立目录,当目录存在的情况下再次创建目录时报错<br> XRMD删除目录<br> DELE删除文件<br>* <p>Title: 使用JAVA操作FTP服务器(FTP客户端)</p>* <p>Description: 上传文件的类型及文件大小都放到调用此类的方法中去检测,比如放到前台JAVASCRIPT中去检测等* 针对FTP中的所有调用使用到文件名的地方请使用完整的路径名(绝对路径开始)。* </p>* <p>Copyright: Copyright (c) 2005</p>* <p>Company: 静靖工作室</p>* @author 欧朝敬 13873195792* @version 1.0*/ public class FtpUpfile { private FtpClient ftpclient; private String ipAddress; private int ipPort; private String userName; private String PassWord; /** * 构造函数 * @param ip String 机器IP * @param port String 机器FTP端口号 * @param username String FTP用户名 * @param password String FTP密码 * @throws Exception */ public FtpUpfile(String ip, int port, String username, String password) throws Exception { ipAddress = new String(ip); ipPort = port; ftpclient = new FtpClient(ipAddress, ipPort); //ftpclient = new FtpClient(ipAddress); userName = new String(username); PassWord = new String(password); } /** * 构造函数 * @param ip String 机器IP,默认端口为21 * @param username String FTP用户名 * @param password String FTP密码 * @throws Exception */ public FtpUpfile(String ip, String username, String password) throws Exception { ipAddress = new String(ip); ipPort = 21; ftpclient = new FtpClient(ipAddress, ipPort); //ftpclient = new FtpClient(ipAddress); userName = new String(username); PassWord = new String(password); } /** * 登录FTP服务器 * @throws Exception */ public void login() throws Exception { ftpclient.login(userName, PassWord); } /** * 退出FTP服务器 * @throws Exception */ public void logout() throws Exception { //用ftpclient.closeServer()断开FTP出错时用下更语句退出 ftpclient.sendServer("QUIT/r/n"); int reply = ftpclient.readServerResponse(); //取得服务器的返回信息 } /** * 在FTP服务器上建立指定的目录,当目录已经存在的情下不会影响目录下的文件,这样用以判断FTP * 上传文件时保证目录的存在目录格式必须以"/"根目录开头 * @param pathList String * @throws Exception */ public void buildList(String pathList) throws Exception { ftpclient.ascii(); StringTokenizer s = new StringTokenizer(pathList, "/"); //sign int count = s.countTokens(); String pathName = ""; while (s.hasMoreElements()) { pathName = pathName + "/" + (String) s.nextElement(); try { ftpclient.sendServer("XMKD " + pathName + "/r/n"); } catch (Exception e) { e = null; } int reply = ftpclient.readServerResponse(); } ftpclient.binary(); } /** * 取得指定目录下的所有文件名,不包括目录名称 * 分析nameList得到的输入流中的数,得到指定目录下的所有文件名 * @param fullPath String * @return ArrayList * @throws Exception */ public ArrayList fileNames(String fullPath) throws Exception { ftpclient.ascii(); //注意,使用字符模式 TelnetInputStream list = ftpclient.nameList(fullPath); byte[] names = new byte[2048]; int bufsize = 0; bufsize = list.read(names, 0, names.length); //从流中读取 list.close(); ArrayList namesList = new ArrayList(); int i = 0; int j = 0; while (i < bufsize /*names.length*/) { //char bc = (char) names; //System.out.println(i + " " + bc + " : " + (int) names); //i = i + 1; if (names[i] == 10) { //字符模式为10,二进制模式为13 //文件名在数据中开始下标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1 //System.out.write(names, j, i - j); //System.out.println(j + " " + i + " " + (i - j)); String tempName = new String(names, j, i - j); namesList.add(tempName); //System.out.println(temp); // 处理代码处 //j = i + 2; //上一次位置二进制模式 j = i + 1; //上一次位置字符模式 } i = i + 1; } return namesList; } /** * 上传文件到FTP服务器,destination路径以FTP服务器的"/"开始,带文件名、 * 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖 * @param source String * @param destination String * @throws Exception */ public void upFile(String source, String destination) throws Exception { buildList(destination.substring(0, destination.lastIndexOf("/"))); ftpclient.binary(); //此行代码必须放在buildList之后 TelnetOutputStream ftpOut = ftpclient.put(destination); TelnetInputStream ftpIn = new TelnetInputStream(new FileInputStream(source), true); byte[] buf = new byte[204800]; int bufsize = 0; while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) { ftpOut.write(buf, 0, bufsize); } ftpIn.close(); ftpOut.close(); } /** * JSP中的流上传到FTP服务器, * 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖 * 字节数组做为文件的输入流,此方法适用于JSP中通过 * request输入流来直接上传文件在RequestUpload类中调用了此方法, * destination路径以FTP服务器的"/"开始,带文件名 * @param sourceData byte[] * @param destination String * @throws Exception */ public void upFile(byte[] sourceData, String destination) throws Exception { buildList(destination.substring(0, destination.lastIndexOf("/"))); ftpclient.binary(); //此行代码必须放在buildList之后 TelnetOutputStream ftpOut = ftpclient.put(destination); ftpOut.write(sourceData, 0, sourceData.length);// ftpOut.flush(); ftpOut.close(); } /** * 从FTP文件服务器上下载文件SourceFileName,到本地destinationFileName * 所有的文件名中都要求包括完整的路径名在内 * @param SourceFileName String * @param destinationFileName String * @throws Exception */ public void downFile(String SourceFileName, String destinationFileName) throws Exception { ftpclient.binary(); //一定要使用二进制模式 TelnetInputStream ftpIn = ftpclient.get(SourceFileName); byte[] buf = new byte[204800]; int bufsize = 0; FileOutputStream ftpOut = new FileOutputStream(destinationFileName); while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) { ftpOut.write(buf, 0, bufsize); } ftpOut.close(); ftpIn.close(); } /** *从FTP文件服务器上下载文件,输出到字节数组中 * @param SourceFileName String * @return byte[] * @throws Exception */ public byte[] downFile(String SourceFileName) throws Exception { ftpclient.binary(); //一定要使用二进制模式 TelnetInputStream ftpIn = ftpclient.get(SourceFileName); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); byte[] buf = new byte[204800]; int bufsize = 0; while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) { byteOut.write(buf, 0, bufsize); } byte[] return_arraybyte = byteOut.toByteArray(); byteOut.close(); ftpIn.close(); return return_arraybyte; } /**调用示例 * FtpUpfile fUp = new FtpUpfile("192.150.189.22", 21, "admin", "admin"); * fUp.login(); * fUp.buildList("/adfadsg/sfsdfd/cc"); * String destination = "/test.zip"; * fUp.upFile("C://Documents and Settings//Administrator//My Documents//sample.zip",destination); * ArrayList filename = fUp.fileNames("/"); * for (int i = 0; i < filename.size(); i++) { * System.out.println(filename.get(i).toString()); * } * fUp.logout(); * @param args String[] * @throws Exception */ public static void main(String[] args) throws Exception { FtpUpfile fUp = new FtpUpfile("172.16.0.142", 22, "ivr", "ivr"); fUp.login(); /* fUp.buildList("/adfadsg/sfsdfd/cc"); String destination = "/test/SetupDJ.rar"; fUp.upFile( "C://Documents and Settings//Administrator//My Documents//SetupDJ.rar", destination); ArrayList filename = fUp.fileNames("/"); for (int i = 0; i < filename.size(); i++) { System.out.println(filename.get(i).toString()); } fUp.downFile("/sample.zip", "d://sample.zip"); */ FileInputStream fin = new FileInputStream( "d://wapPush.txt"); byte[] data = new byte[20480000]; fin.read(data, 0, data.length); fUp.upFile(data, "/home/cdr/wapPush.txt"); fUp.logout(); System.out.println("程序运行完成!"); /*FTP远程命令列表 USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT PASS PASV STOR REST CWD STAT RMD XCUP OPTS ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT */ /*在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令 ftpclient.readServerResponse一定要在sendServer后调用 nameList("/test")获取指目录下的文件列表 XMKD建立目录,当目录存在的情况下再次创建目录时报错 XRMD删除目录 DELE删除文件 */ }
分享到:
相关推荐
构建Java FTP服务器涉及到几个关键步骤: 1. **初始化服务器**:设置服务器监听的端口,通常为21号端口,并创建一个线程来处理每个连接请求。 2. **处理客户端请求**:当客户端连接时,服务器需要解析客户端发送的...
总的来说,Java 实现 FTP 功能需要理解 FTP 协议的基本概念,选择合适的库,并熟练掌握客户端 API 的使用。在编写代码时,考虑到异常处理、性能优化以及安全性的需求,以提供稳定和高效的服务。
本文将介绍几种使用 Java 实现 FTP 的方法,重点关注第三方库的使用。 1. **使用 Sun JDK 内置的 FTP 客户端**: Sun JDK 提供了一个简单的 FTP 客户端实现,位于 `sun.net.ftp` 包下。以下是一个基本的示例,展示...
以下是几种常见的 Java FTP 客户端库的比较: 表 1: Java FTP 客户端库比较 | 库名称 | 作者 | 版本 | 特点 | | --- | --- | --- | --- | | J-ftp | | 1.50 | 支持 FTP、SFTP、FTPS、TFTP 等协议 | | simpleftp |...
这个"JAVA实现FTP协议中的服务器和客户端(完善版).rar"压缩包文件,显然包含了一个使用Java编程语言实现FTP协议的完整项目。以下是关于FTP协议、Java编程以及如何实现FTP服务器和客户端的关键知识点: 1. FTP协议...
### 使用Java实现FTP服务器 #### 一、简介 在互联网技术的发展过程中,文件传输协议(File Transfer Protocol,简称FTP)是一种用于在网络上进行文件传输的标准服务和协议。它为用户提供了一种简单有效的方式来...
Java实现FTP上传下载是Java开发中常见的任务,主要用于在服务器和客户端之间传输文件。FTP(File Transfer Protocol)是一种用于在Internet上进行文件传输的标准协议。本篇将详细讲解如何使用Java来实现FTP的上传和...
Java实现FTP服务器端配套程序是一种将Java编程语言用于构建文件传输协议(FTP)服务端的应用。FTP是一种在互联网上广泛使用的标准协议,用于在客户端和服务器之间上传、下载文件。在Java中,我们可以利用标准库中的`...
在Java中连接到FTP服务器通常涉及以下几个步骤: - 初始化`FtpClient`对象。 - 使用`openServer()`方法打开与FTP服务器的连接。 - 调用`login()`方法登录FTP服务器,需要提供用户名和密码。 - 设置传输模式为ASCII或...
Java实现FTP客户端与服务器是网络编程中的一个重要环节,FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议。本文将详细讲解如何使用Java语言来构建FTP客户端和服务器,并重点介绍核心概念和...
### 用Java实现FTP批量大文件上传下载的关键技术与实践 #### 一、项目背景与需求分析 在本文中,作者介绍了一项基于Java技术实现的FTP批量大文件上传下载的功能,旨在解决大规模工程项目中涉及的大文件批量传输...
这个源代码项目提供了一种使用Java实现FTP上传功能的方法,使得开发者能够编写应用程序,将文件或数据有效地发送到FTP服务器。以下是关于这个Java FTP上传程序的一些关键知识点: 1. **Java FTP库**: Java标准库...
5. **工作模式**:FTP有几种工作模式,如主动模式和被动模式。主动模式中,服务器主动连接客户端,而被动模式下,客户端主动连接服务器。你可以使用FTPClient的enterLocalPassiveMode或enterLocalActiveMode方法切换...
在Java中实现FTP功能主要涉及以下几个关键知识点: 1. **Java FTP库**:Java标准库提供了一个名为`java.net.Socket`的类,可以用于建立TCP连接,但这并不直接支持FTP协议。为了实现FTP功能,开发者通常会使用Apache...
Java实现时,需要处理这两个连接的建立、保持和关闭,同时注意被动模式(PASV)和主动模式(PORT)的数据连接方式。 6. **异常处理与错误码** FTP协议规定了错误码系统,当发生错误时,服务器需要返回相应的错误码...
Java语言实现的简单FTP软件源代码提供了一个基础的FTP客户端应用示例,它利用了Java的网络编程功能来与FTP服务器进行通信。FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,广泛应用于Web...
本项目"基于Java的FTP客户端设计与实现"旨在利用Java语言构建一个能够连接到FTP服务器,实现登录、文件上传和下载等功能的客户端程序。 首先,要实现FTP客户端,我们需要理解FTP的工作原理。FTP基于TCP/IP协议,...
`javaftp.txt`可能是具体的FTP源码示例,你可以通过阅读和分析这个文件来了解FTP客户端的实现细节。 总的来说,理解和实现Java FTP需要对网络通信、文件I/O和异常处理有深入的理解,同时,熟悉FTP协议和使用相应的...
Java编写的FTP(File Transfer Protocol)源代码是用于在计算机之间传输文件的一种程序实现。FTP是一种基于TCP协议的应用层协议,常用于互联网上的文件上传和下载。在Java中实现FTP功能,开发者通常会利用Java的`...