- 浏览: 47877 次
- 性别:
- 来自: 上海
文章分类
最新评论
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 FTPConnectorBK { 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 FTPConnectorBK(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 FTPConnectorBK(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 { FTPConnector fUp = new FTPConnector( " 218.206.76.252 " , 21 , " ftpuser " , " abc123 " ); 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:\\OrdSub_20061115133821_401517.xml " ); byte [] data = new byte [ 20480000 ]; fin.read(data, 0 , data.length); fUp.upFile( " d:/OrdSub_20061115133821_401517.xml " , " /OrdSub_20061115133821_401517.xml " ); 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删除文件 */ } }
相关推荐
javaFTP目录、文件操作。
JAVA FTP帮助类,包括FTP连接、文件的上传、下载、目录的创建、删除
本项目提供了一套完整的Java实现FTP操作的代码示例,包括上传、下载、删除服务器上的指定文件以及断点续传功能。以下是对这些功能的详细解释: 1. **FTP连接与登录**: 在进行任何FTP操作之前,首先需要建立一个...
以上就是关于"java实现ftp上传jar包"的相关知识点,涵盖了FTP协议、相关库的使用、JAR文件的处理以及基本的Java FTP操作。在实际项目中,你可能还需要考虑其他因素,如连接超时、重试策略、文件权限管理等。
Java FTP操作文件主要涉及到Java对FTP(File Transfer Protocol)协议的支持,这通常通过第三方库来增强Java标准库的功能。在给定的描述中,开发者提到遇到了Java标准库在不同版本间实现差异的问题,因此选择了...
Java FTP操作: 在Java中,我们可以使用`java.net.Socket`类和`java.io`流来实现FTP功能,但更常见的是使用Apache Commons Net库提供的FTPClient类,它简化了FTP操作的复杂性。首先,需要在项目中引入Apache Commons...
6. **FtpOp.java**:这个文件可能是实现FTP操作的Java类。在这个类中,可能会有如下的方法: - `connect(String server, int port, String user, String pass)`: 连接FTP服务器。 - `login()`: 使用用户名和密码...
首先,Java FTP操作的核心依赖是`java.net`和`org.apache.commons.net.ftp`这两个库。`java.net`是Java标准库,提供了基本的网络通信功能;`org.apache.commons.net.ftp`是Apache Commons Net项目的一部分,提供了更...
这篇博客"java FTP 上传 下载 (中文) 文件"提供了关于如何在Java中实现FTP操作的中文指南。在Java中,我们可以使用`java.net.Socket`和低级别的FTP命令来实现这一功能,但更常见的是使用Apache的Commons Net库,...
首先,要进行FTP操作,我们需要一个Java FTP客户端库。Java标准库并不直接支持FTP,但提供了`java.net.Socket`类,可以通过它构建低级别的FTP连接。然而,为了方便起见,开发者通常会使用第三方库,如Apache Commons...
以下是一个简单的Java FTP操作示例代码: ```java import org.apache.commons.net.ftp.*; public class FTPExample { public static void main(String[] args) { FTPClient ftp = new FTPClient(); try { ftp....
Java FTP Server的开发为程序员提供了一个灵活、可扩展的平台,可以在各种操作系统上运行,因为Java具有“一次编写,到处运行”的特性。 在Java中实现FTP服务器,通常会用到Java的Socket编程、多线程以及文件I/O等...
接下来,我们关注Java中的FTP操作。Apache Commons Net库提供了一个FTPClient类,它是实现FTP功能的核心。以下是一个简单的FTP自动下载步骤: 1. **导入依赖**:在项目中添加Apache Commons Net库,通常通过Maven或...
Java FTP(文件传输协议)是Java编程中用于与FTP服务器进行...例如,`ftptest1`可能是一个示例程序,演示了如何使用Java FTP进行文件传输或其他FTP操作。通过分析这个程序,可以进一步了解Java FTP客户端的实现细节。
首先,Java中的FTP操作通常依赖于`java.net`和`java.io`库,但为了更方便地处理FTP连接和操作,开发者经常会选择使用第三方库,如Apache Commons Net。这个压缩包可能包含了此类库的jar包,使得开发者可以直接将其...
这个库包含了FTPClient和FTPServer类,提供了许多预定义的方法来处理FTP操作,如登录、上传、下载、删除文件等,大大减少了手动实现FTP协议的复杂性。 在编写Java FTP程序时,需要注意错误处理和异常处理,确保在...
FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,而Java提供了一系列API来支持FTP操作,如`java.net.FTPClient`类。在这个场景下,我们需要实现从FTP服务器下载文件,并在下载完成后可能...
Apache Commons Net提供了更高级别的抽象,使得Java FTP操作变得简单。以下是使用该库的基本步骤: 1. **引入依赖**:在项目中添加Apache Commons Net库,通常通过Maven或Gradle。 2. **创建FTPClient实例**:`...
本文将深入探讨如何使用Java进行FTP操作,以及如何创建和删除文件。 FTP操作首先需要建立一个FTP连接。在Java中,我们可以通过`FTPClient`类的`connect()`方法连接到FTP服务器,然后使用`login()`方法登录,如下所...
总的来说,使用Java FTP连接池能够提高FTP操作的效率,减少系统负载,而且通过合理的配置,还能确保服务的稳定性和响应速度。在开发过程中,结合`commons-pool`这样的成熟库,可以简化实现过程,让开发者更专注于...