基于 Apache Commons Net 实现javaFTP上传.docx
- 文档编号:12090393
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:9
- 大小:18.03KB
基于 Apache Commons Net 实现javaFTP上传.docx
《基于 Apache Commons Net 实现javaFTP上传.docx》由会员分享,可在线阅读,更多相关《基于 Apache Commons Net 实现javaFTP上传.docx(9页珍藏版)》请在冰豆网上搜索。
基于ApacheCommonsNet实现javaFTP上传
复杂的地方体现在文件夹的上传。
在前面层用ApacheCommonsNet工具包实现了JavaFTP单个文件的上传下载功能,这次,实现的是对一个本地目录的上传,实现费了很大劲,虽然实现了,但是感觉还是对此封装不是非常满意,改用了其他的FTP客户端工具。
将这个半成品放出来供各位研究吧。
package woxingwosu;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.Properties;
import java.util.TreeSet;
import mons.io.FileUtils;
import .ftp.FTP;
import .ftp.FTPClient;
import .ftp.FTPClientConfig;
import .ftp.FTPFile;
import .ftp.FTPReply;
/**
*其实JDK里面也有支持FTP操作的包【jre/lib下的rt.jar】,但是SUN的DOC里面并没有提供相应文档,
*因为这里面的包,不被官方支持,建议不要使用。
我们可以使用第三方提供的包mons。
*mons的包,都有文档,方便使用
*另外IBM也有提供一个ftp包,我没有用过,有兴趣的可以去研究一下
*@commons-net:
*@jakarta-oro:
*@commons-io:
* @author 我行我素
*@2007-08-03
*/
public class MiniFtp{
private static Stringusername;
private static Stringpassword;
private static Stringip;
private static int port;
private static Propertiesproperty=null;//配置
private static StringconfigFile;//配置文件的路径名
private static FTPClientftpClient=null;
private static SimpleDateFormatdateFormat=new SimpleDateFormat("yyyy-MM-ddhh:
mm");
private static final String[]FILE_TYPES={"文件","目录","符号链接","未知类型"};
public static void main(String[]args){
setConfigFile("woxingwosu.properties");//设置配置文件路径
connectServer();
listAllRemoteFiles();//列出所有文件和目录
changeWorkingDirectory("webroot");//进入文件夹webroot
listRemoteFiles("*.jsp");//列出webroot目录下所有jsp文件
setFileType(FTP.BINARY_FILE_TYPE);//设置传输二进制文件
uploadFile("woxingwosu.xml","myfile.xml");//上传文件woxingwosu.xml,重新命名为myfile.xml
renameFile("viewDetail.jsp", "newName.jsp");//将文件viewDetail.jsp改名为newName.jsp
deleteFile("UpdateData.class");//删除文件UpdateData.class
loadFile("UpdateData.java","loadFile.java");//下载文件UpdateData.java,并且重新命名为loadFile.java
closeConnect();//关闭连接
}
/**
*上传文件
* @param localFilePath--本地文件路径
* @param newFileName--新的文件名
*/
public static void uploadFile(StringlocalFilePath,StringnewFileName){
connectServer();
//上传文件
BufferedInputStreambuffIn=null;
try{
buffIn=new BufferedInputStream(new FileInputStream(localFilePath));
ftpClient.storeFile(newFileName,buffIn);
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(buffIn!
=null)
buffIn.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
/**
*下载文件
* @param remoteFileName--服务器上的文件名
* @param localFileName--本地文件名
*/
public static void loadFile(StringremoteFileName,StringlocalFileName){
connectServer();
//下载文件
BufferedOutputStreambuffOut=null;
try{
buffOut=new BufferedOutputStream(new FileOutputStream(localFileName));
ftpClient.retrieveFile(remoteFileName,buffOut);
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(buffOut!
=null)
buffOut.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
/**
*列出服务器上所有文件及目录
*/
public static void listAllRemoteFiles(){
listRemoteFiles("*");
}
/**
*列出服务器上文件和目录
* @param regStr--匹配的正则表达式
*/
@SuppressWarnings("unchecked")
public static void listRemoteFiles(StringregStr){
connectServer();
try{
FTPFile[]files=ftpClient.listFiles(regStr);
if(files==null||files.length==0)
System.out.println("Therehasnotanyfile!
");
else{
TreeSet
new Comparator(){
//先按照文件的类型排序(倒排),然后按文件名顺序排序
public int compare(ObjectobjFile1,ObjectobjFile2){
if(objFile1==null)
return -1;
else if(objFile2==null)
return 1;
else{
FTPFilefile1=(FTPFile)objFile1;
FTPFilefile2=(FTPFile)objFile2;
if(file1.getType()!
=file2.getType())
return file2.getType()-file1.getType();
else
return file1.getName().compareTo(file2.getName());
}
}
}
);
for(FTPFilefile:
files)
fileTree.add(file);
System.out.printf("%-35s%-10s%15s%15s\n","名称","类型","修改日期","大小");
for(FTPFilefile:
fileTree){
System.out.printf("%-35s%-10s%15s%15s\n",iso8859togbk(file.getName()),FILE_TYPES[file.getType()]
,dateFormat.format(file.getTimestamp().getTime()),FileUtils.byteCountToDisplaySize(file.getSize()));
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*关闭连接
*/
public static void closeConnect(){
try{
if(ftpClient!
=null){
ftpClient.logout();
ftpClient.disconnect();
}
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*设置配置文件
* @param configFile
*/
public static void setConfigFile(StringconfigFile){
MiniFtp.configFile = configFile;
}
/**
*设置传输文件的类型[文本文件或者二进制文件]
* @param fileType--BINARY_FILE_TYPE、ASCII_FILE_TYPE
*/
public static void setFileType(int fileType){
try{
connectServer();
ftpClient.setFileType(fileType);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*扩展使用
* @return
*/
protected static FTPClientgetFtpClient(){
connectServer();
return ftpClient;
}
/**
*设置参数
* @param configFile--参数的配置文件
*/
private static void setArg(StringconfigFile){
property=new Properties();
BufferedInputStreaminBuff=null;
try{
inBuff=new BufferedInputStream(new FileInputStream(configFile));
property.load(inBuff);
username=property.getProperty("username");
password=property.getProperty("password");
ip=property.getProperty("ip");
port=Integer.parseInt(property.getProperty("port"));
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(inBuff!
=null)
inBuff.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
/**
*连接到服务器
*/
public static void connectServer(){
if (ftpClient == null){
int reply;
try {
setArg(configFile);
ftpClient=new FTPClient();
ftpClient.setDefaultPort(port);
ftpClient.configure(getFtpConfig());
ftpClient.connect(ip);
ftpClient.login(username,password);
ftpClient.setDefaultPort(port);
System.out.print(ftpClient.getReplyString());
reply = ftpClient.getReplyCode();
if (!
FTPReply.isPositiveCompletion(reply)){
ftpClient.disconnect();
System.err.println("FTPserverrefusedconnection.");
}
} catch (Exceptione){
System.err.println("登录ftp服务器【"+ip+"】失败");
e.printStackTrace();
}
}
}
/**
*进入到服务器的某个目录下
* @param directory
*/
public static void changeWorkingDirectory(Stringdirectory){
try{
connectServer();
ftpClient.changeWorkingDirectory(directory);
}catch(IOExceptionioe){
ioe.printStackTrace();
}
}
/**
*返回到上一层目录
*/
public static void changeToParentDirectory(){
try{
connectServer();
ftpClient.changeToParentDirectory();
}catch(IOExceptionioe){
ioe.printStackTrace();
}
}
/**
*删除文件
*/
public static void deleteFile(Stringfilename){
try{
connectServer();
ftpClient.deleteFile(filename);
}catch(IOExceptionioe){
ioe.printStackTrace();
}
}
/**
*重命名文件
* @param oldFileName--原文件名
* @param newFileName--新文件名
*/
public static void renameFile(StringoldFileName,StringnewFileName){
try{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Apache Commons Net 实现javaFTP上传 实现 javaFTP 上传