java实现FTP上传有2种方式,一种是org.apache.commons.net.ftp.FTPClient这个jar包,一种是sun.net.ftp.FtpClient。不知道为什么,在使用前一种方式时,在遇到大批量的上传文件时总会抛出异常,我却找不出原因,所以使用的是后者。sun的FtpClient就在自带的system library中,如果程序找不到,Remove一下system library,再重新添加一次就好。
这边我套用的是别人封装好的方法进行上传的,只不过稍加修改,再上传之前计算了一下所选文件(夹)的总大小,然后单独开了一个线程每隔一段时间计算总的上传量,然后刷新swing界面UI。这边直接贴上FtpClient封装好后的类的代码:
java实现FTP上传有2种方式,一种是org.apache.commons.net.ftp.FTPClient这个jar包,一种是sun.net.ftp.FtpClient。不知道为什么,在使用前一种方式时,在遇到大批量的上传文件时总会抛出异常,我却找不出原因,所以使用的是后者。
sun的FtpClient就在自带的system library中,如果程序找不到,Remove一下system,再重新添加一遍就好。
下面主要贴上封装好的FtpUtils类的代码:
package com.fisee.ftp;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
/**
* ftp上传,下载
*
* @author why 2009-07-30
*
*/
public class FtpUtils {
private String ip = "";
private String username = "";
private String password = "";
private int port = -1;
private String path = "";
FtpClient ftpClient = null;
OutputStream os = null;
FileInputStream is = null;
public static long trans = 0;//已传输文件大小
public static long totalSize = 0;//文件总大小
public FtpUtils(String serverIP, int port, String username, String password) {
this.ip = serverIP;
this.username = username;
this.password = password;
this.port = port;
trans = 0;
}
/**
* 连接ftp服务器
*
* @throws IOException
*/
public boolean connectServer() {
ftpClient = new FtpClient();
try {
if (this.port != -1) {
ftpClient.openServer(this.ip, this.port);
} else {
ftpClient.openServer(this.ip);
}
ftpClient.login(this.username, this.password);
if (this.path