693579551 发表于 2015-5-26 10:55:35

使用J-FTP上传下载

  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;
[*]            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, argv, argv);   
[*]      }
[*]      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
提供免费网站监测服务,有兴趣的朋友可以去看看。


[*]j-ftp-1.50.tar.gz (3.6 MB)
[*]描述: 如果jar包里的log4j与你自己的有冲突,可以直接把jar包里删掉或者下载我改好的
[*]下载次数: 915


[*]jftp_without_Log4j.jar (2 MB)
[*]下载次数: 88
页: [1]
查看完整版本: 使用J-FTP上传下载