FTP使用sun.net.ftp包下的api,
package jing.upfile;
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 == 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.168.0.1", 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("192.150.189.22", 21, "admin", "admin");
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(
"C:\\AAA.TXT");
byte[] data = new byte[20480];
fin.read(data, 0, data.length);
fUp.upFile(data, "/test/BBB.exe");
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删除文件
*/
}
}
发表评论
-
使用 apache的 common FTPClient 操作ftp
2009-01-05 09:41 1771import java.io.File; import ja ... -
sun.net.ftp.FtpClient类
2008-12-29 22:52 1865sun.net.ftp.FtpClient.,该类库主要提供了 ... -
Map类的使用
2008-10-08 09:57 2316Map以按键/数值对的形式 ... -
Excel 读写操作
2008-09-18 15:42 972package trans; import java.io.B ... -
Oracle数据导入导出imp/exp命令
2008-09-09 13:05 872Oracle数据导入导出imp/exp就相当于oracle数据 ... -
Java实用经验总结--日期、数字篇
2008-08-25 16:48 1186Java实用经验总结--日期、数字篇1. 日期部分对于像日 ... -
ORACLE SQL and SQL*PLUS
2008-08-15 10:16 1330四、从多个表里选取数据记录 1. 数据表间的连接 简单的连接语 ... -
常用的SQL语法和数据对象
2008-08-14 12:16 833控制语句 (DML) 部分 1.INSERT (往数据表里 ... -
Oracle 排序中常用的NULL值处理方法
2008-08-14 12:10 11651、缺省处理Oracle在Order by 时缺省认为null ... -
加密
2008-04-03 09:28 1437import javax.crypto.Cipher;impo ... -
获得星期信息
2008-04-03 09:20 996String str = "2008-03-03&q ...
相关推荐
3. **设置工作模式**:根据需求,可以切换到二进制或文本模式,使用`FTPClient.setFileType(FTP.BINARY_FILE_TYPE)`或`FTP.ASCII_FILE_TYPE`。 4. **上传文件**:调用`FTPClient.storeFile(String remote, ...
sun.net.ftp.FtpClient,it.sauronsoftware.ftp4j.FTPClient,org.apache.commons.net.ftp.FTPClient三种不同的方式操作FTP
因为开发一个项目要用到FTP上传功能,用的是.NET平台,当时找了半天也没有关于FTP...找了很多资料,并参考了一下Java的sun.net.FtpClient类,总算可以拿出来用,所以就迫不及待的传上来给大家共享,相对性能方面还可以。
ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 设置文件传输模式为二进制 } catch (IOException e) { e.printStackTrace(); } ``` 上传文件: ```java File localFile = new File("path/to/local/file"); ...
但是需要注意的是,`sun.net.ftp` 包是 Sun JDK 的非公开 API,使用它可能存在兼容性和稳定性问题,不推荐在生产环境中使用。 2. **使用 Commons Net 库**: Apache Commons Net 是一个流行的 Java FTP 客户端库...
删除文件使用`FTPClient.deleteFile()`方法,而删除目录则需先改变到该目录,然后使用`FTPClient.removeDirectory()`。 7. **被动模式与主动模式** FTP的主动模式中,服务器发起数据连接到客户端,而在被动模式下...
本文将详细介绍如何使用Java实现文件下载功能,并重点讲解如何解决中文文件名乱码的问题。 #### 一、基本原理与步骤 1. **读取文件**:首先需要将要下载的文件读取到内存中。 2. **设置响应头**:为了正确地告知...
ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 设置文件传输模式为二进制 // 文件上传 File localFile = new File("/path/to/local/file"); ftpClient.storeFile("remote/path", new FileInputStream(local...
jdk1.7以上专用FTP工具类,本人花了半天时间调试通过,拿来即用,具体用法详见main函数。
TestFtpUpload 为示例工程 依赖的jar 里面都有 倒入到...1. 通过sun :sun.net.ftp.FtpClient 2. 通过apache:org.apache.commons.net.ftp.FTPClient 3. 通过edtftp: com.enterprisedt.net.ftp.FileTransferClient
在Java中,实现FTP客户端功能有多种方法,包括使用Java内置的`sun.net.ftp`包以及第三方库如Apache Commons Net等。 以下是一个简单的FTP客户端实现示例,基于Java内置的`sun.net.ftp`包: ```java import sun.net...
Java开发FTP客户端涉及的核心知识点包括FTP协议的基本原理、FTP客户端的设计模式、以及JBuilder9中提供的FTP库——sun.net.ftp.FtpClient的使用。以下是对这些知识点的详细说明: 1. FTP协议基础: FTP(File ...
在提供的代码示例中,可以看到使用了`sun.net.ftp.FtpClient`类来实现FTP客户端的功能。然而,值得注意的是,`sun.net.ftp.FtpClient`并不是标准的Java API,而是Oracle JRE的一个私有实现,这意味着它可能在不同的...
import sun.net.ftp.FtpClient; public class ftptest { FtpClient ftpClient; private String localfilename; private String remotefilename; static String a = new String(); static int b; static ...
- 使用`sun.net.ftp.FtpClient`类创建一个FTP客户端对象,并通过调用`openServer()`方法连接到指定的服务器。 - 登录服务器,通过调用`login()`方法,传入用户名和密码。 - 如果提供了路径,则使用`cd()`方法切换到...
本文档介绍了一种利用Java标准库中的`sun.net.ftp.FtpClient`类实现FTP上传与下载功能的方法。此方法适用于JDK版本1.7及以上的环境。 #### 代码解析 ##### 包结构与导入包 首先,定义了一个名为`com.pifeng.util`...
尽管`sun.net.NetworkClient`类中的`encoding`属性可以设置FTP的编码,但由于它是受保护的,无法直接访问。为了解决这个问题,我们可以创建一个自定义的`FtpClient`子类,如`CustomFtpClient`,通过继承并设置这个...
在这个特定的代码段中,开发者使用了`sun.net.ftp.*`包中的类来实现FTP客户端的功能,这是一个内部使用的非公开API,可能在不同JVM版本中不可用或不稳定。尽管如此,我们仍然可以了解这个例子的基本思路和一般Java ...
本代码示例展示了使用 `sun.net.ftp` 包来实现 FTP 客户端功能,包括连接、断开、切换目录、创建目录、删除文件、上传文件、下载文件以及获取文件列表等操作。需要注意的是,`sun.net.ftp` 包是 Sun Microsystems ...