JFTP是一个用JAVA写的FTP客户端程序。功能强大不仅支持FTP,还支持其它协议如SMB, SFTP, NFS, HTTP等。在传输文件的同时还可以浏览FTP服务器上的资源,也可以浏览局域网上的Windows共享资源等
由于项目需要用到ftp的类库,比较了很多觉得JFTP不错,简单实用。
上传:
java 代码
- import net.sf.jftp.net.ConnectionHandler;
- import net.sf.jftp.net.ConnectionListener;
- import net.sf.jftp.net.DataConnection;
- import net.sf.jftp.net.FtpConnection;
- import net.sf.jftp.net.BasicConnection;
- import net.sf.jftp.config.Settings;
- import java.io.*;
- import org.apache.commons.lang.StringUtils;
- /**
- * See FtpDownload.java for comments.
- */
- public class FtpUpload implements ConnectionListener
- {
- private boolean isThere = false;
- private ConnectionHandler handler = new ConnectionHandler();
- private String host;
- private int port = 21;
- private String user;
- private String passwd;
- public FtpUpload(String host, String user, String passwd){
- this.host = host;
- this.user = user;
- this.passwd = passwd;
- }
- public FtpUpload(String host, int port, String user, String passwd){
- this.host = host;
- this.port = port;
- this.user = user;
- this.passwd = passwd;
- }
- public int upload(String dir, String file){
- FtpConnection con = new FtpConnection(host, port, "/");
- con.addConnectionListener(this);
- con.setConnectionHandler(handler);
- con.login(user, passwd);
- while(!isThere)
- {
- try { Thread.sleep(10); }
- catch(Exception ex) { ex.printStackTrace(); }
- }
- //make dirs
- String path = "";
- String[] paths = StringUtils.split(dir, "/");
- for(int i = 0; i < paths.length; i++){
- path += "/" + paths[i];
- if(!con.chdir(path)){ con.mkdir(path); }
- }
- con.chdir(dir);
- return con.upload(file);
- }
- public static void main(String argv[])
- {
- if(argv.length == 3)
- {
- FtpUpload f = new FtpUpload(argv[0], argv[2], argv[1]);
- }
- else
- {
- FtpUpload g =
- new FtpUpload("192.168.1.10", 2009, "test","test");
- g.upload("/", "C:/test.jpg");
- }
- }
- public void updateRemoteDirectory(BasicConnection con)
- {
- System.out.println("new path is: " + con.getPWD());
- }
- public void connectionInitialized(BasicConnection con)
- {
- isThere = true;
- }
- public void updateProgress(String file, String type, long bytes) {}
- public void connectionFailed(BasicConnection con, String why) {System.out.println("connection failed!");}
- public void actionFinished(BasicConnection con) {}
- }
下载:
java 代码
- import net.sf.jftp.net.ConnectionHandler;
- import net.sf.jftp.net.ConnectionListener;
- import net.sf.jftp.net.DataConnection;
- import net.sf.jftp.net.FtpConnection;
- import net.sf.jftp.net.BasicConnection;
- import net.sf.jftp.config.Settings;
- import java.io.*;
- public class FtpDownload implements ConnectionListener
- {
- // is the connection established?
- private boolean isThere = false;
- public static long time = 0;
- // connection pool, not necessary but you should take a look at this class
- // if you want to use multiple event based ftp transfers.
- private ConnectionHandler handler = new ConnectionHandler();
- private String host;
- private int port = 21;
- private String user;
- private String passwd;
- public FtpDownload(String host, int port, String user, String passwd){
- this.host = host;
- this.port = port;
- this.user = user;
- this.passwd = passwd;
- }
- //creates a FtpConnection and downloads a file
- public byte[] downloadToBinary(String file)
- {
- // the ftp client default is very small, you may want to increase this
- Settings.bufferSize = 16384;
- long current = System.currentTimeMillis();
- //System.out.println("1) "+(System.currentTimeMillis()-current)+"ms.");
- // create a FtpConnection - note that it does *not* connect instantly
- FtpConnection con = new FtpConnection(host);
- // set updatelistener, interface methods are below
- con.addConnectionListener(this);
- // set handler
- con.setConnectionHandler(handler);
- // connect and login. this is from where connectionFailed() may be called for example
- con.login(user, passwd);
- // login calls connectionInitialized() below which sets isThere to true
- while(!isThere)
- {
- try { Thread.sleep(10); }
- catch(Exception ex) { ex.printStackTrace(); }
- }
- // get download input stream
- byte[] bytes = null;
- try{
- InputStream is = con.getDownloadInputStream(file);
- ByteArrayOutputStream bais = new ByteArrayOutputStream();
- int bit = 0;
- while((bit = is.read()) != -1){
- bais.write(bit);
- }
- bytes = bais.toByteArray();
- }catch(Exception e){}
- time = (System.currentTimeMillis()-current);
- System.out.println("Download took "+time+"ms.");
- return bytes;
- }
- // download welcome.msg from sourceforge or any other given file
- public static void main(String argv[])
- {
- FtpDownload f = new FtpDownload("192.168.1.10", 2009, "test","test");
- byte[] bs = f.downloadToBinary("/aaa.jpg");
- }
- // ------------------ needed by ConnectionListener interface -----------------
- // called if the remote directory has changed
- public void updateRemoteDirectory(BasicConnection con)
- {
- System.out.println("new path is: " + con.getPWD());
- }
- // called if a connection has been established
- public void connectionInitialized(BasicConnection con)
- {
- isThere = true;
- }
- // called every few kb by DataConnection during the trnsfer (interval can be changed in Settings)
- public void updateProgress(String file, String type, long bytes) {}
- // called if connection fails
- public void connectionFailed(BasicConnection con, String why) {System.out.println("connection failed!");}
- // up- or download has finished
- public void actionFinished(BasicConnection con) {}
- }
顺便宣传一下我们的项目:
www.youmonitor.us
提供免费网站监测服务,有兴趣的朋友可以去看看。