使用Java链接FTP服务器进行下载和上传

先说一下如何在eclipse里使用sun.net的包的方法


sun.net包里的,在eclipse里默认是不让用的。解决办法是自定义access rules  

在工程上右键->工程属性->java builder path->Libraries标签,点击JRE System Library里面的Access rules,add sun/** 为accessible,若是该项存在,就edit。


sun.net.ftp.FtpClient类中函数的说明

sun.net.ftp.FtpClient.,该类库主要提供了用于创建FTP链接的类。利用这些类的方法,编程人员能够远程登陆到FTP服务器,列举该服务器上的目录,设置传输协议,以及传送文件。FtpClient类涵盖了几乎全部FTP的功能,FtpClient的实例变量保存了有关创建"代理"的各类信息。下面给出了这些实例变量。

  public static boolean useFtpProxy

  这个变量用于代表FTP传输过程当中是否使用了一个代理,所以,它其实是一个标记,此标记若为TRUE,代表使用了一个代理主机。

  public static String ftpProxyHost

  此变量只有在变量useFtpProxy为TRUE时才有效,用于保存代理主机名。

  public static int ftpProxyPort

  此变量只有在变量useFtpProxy为TRUE时才有效,用于保存代理主机的端口地址。

  FtpClient有三种不一样形式的构造函数,以下所示:

  一、public FtpClient(String hostname,int port)

   此构造函数利用给出的主机名和端口号创建一条FTP链接。

  二、public FtpClient(String hostname)

  此构造函数利用给出的主机名创建一条FTP链接,使用默认端口号。

  三、FtpClient()

  此构造函数将建立一FtpClient类,但不创建FTP链接。这时,FTP链接能够用openServer方法创建。

  一旦创建了类FtpClient,就能够用这个类的方法来打开与FTP服务器的链接。类ftpClient提供了以下两个可用于打开与FTP服务器之间的链接的方法。

  public void openServer(String hostname)

  这个方法用于创建一条与指定主机上的FTP服务器的链接,使用默认端口号。

  public void openServer(String host,int port)

  这个方法用于创建一条与指定主机、指定端口上的FTP服务器的链接。

  打开链接以后,接下来的工做是注册到FTP服务器。这时须要利用下面的方法。

  public void login(String username,String password)

  此方法利用参数username和password登陆到FTP服务器。使用过Intemet的用户应该知道,匿名FTP服务器的登陆用户名为anonymous,密码通常用本身的电子邮件地址。

  下面是FtpClient类所提供的一些控制命令。

  public void cd(String remoteDirectory)

  该命令用于把远程系统上的目录切换到参数remoteDirectory所指定的目录。

  public void cdUp():该命令用于把远程系统上的目录切换到上一级目录。

  public String pwd():该命令可显示远程系统上的目录状态。

  public void binary():该命令可把传输格式设置为二进制格式。

  public void ascii():该命令可把传输协议设置为ASCII码格式。

  public void rename(String string,String string1)

  该命令可对远程系统上的目录或者文件进行重命名操做。

  除了上述方法外,类FtpClient还提供了可用于传递并检索目录清单和文件的若干方法。这些方法返回的是可供读或写的输入、输出流。下面是其中一些主要的方法。

  public TelnetInputStream list()

  返回与远程机器上当前目录相对应的输入流。

  public TelnetInputStream get(String filename)

  获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。

  public TelnetOutputStream put(String filename)

  以写方式打开一输出流,经过这一输出流把文件filename传送到远程计算机。 java

如下是使用 sun.net.ftp.FtpClient 进行上传和下载的例子 web

package com.gpower.web.trial;

import java.io.DataInputStream;   
import java.io.FileOutputStream;   
import java.io.IOException;   
import java.io.FileInputStream;   
import java.util.ArrayList;   
import java.util.Date;   
import java.util.List;   
import sun.net.*;   
import sun.net.ftp.FtpClient;

public class FtpUtil {
	
	FtpClient ftpClient;

	/**  
     * connectServer  
     * 链接ftp服务器  
     * @throws java.io.IOException  
     * @param path 文件夹,空表明根目录  
     * @param password 密码  
     * @param user    登录用户  
     * @param server 服务器地址  
     */   
  public void connectServer(String server, String user, String password,  String path)   
  throws IOException   
   {   
     // server:FTP服务器的IP地址;user:登陆FTP服务器的用户名   
     // password:登陆FTP服务器的用户名的口令;path:FTP服务器上的路径   
      ftpClient = new FtpClient();   
      ftpClient.openServer(server);   
      ftpClient.login(user, password);   
     //path是ftp服务下主目录的子目录   
     if (path.length() != 0)   ftpClient.cd(path);   
     //用2进制上传、下载   
      ftpClient.binary();        
}   
  
/**  
     * upload  
     * 上传文件  
     * @throws java.lang.Exception  
     * @return -1 文件不存在  
     *           -2 文件内容为空  
     *           >0 成功上传,返回文件的大小  
     * @param newname 上传后的新文件名  
     * @param filename 上传的文件  
     */   
public long upload(String filename,String newname) throws Exception   
{   
     long result = 0;   
      TelnetOutputStream os = null;   
      FileInputStream is = null;   
     try {            
          java.io.File file_in = new java.io.File(filename);   
         if (!file_in.exists()) return -1;   
         if (file_in.length()==0) return -2;   
          os = ftpClient.put(newname);   
          result = file_in.length();   
          is = new FileInputStream(file_in);   
         byte[] bytes = new byte[1024];   
         int c;   
         while ((c = is.read(bytes)) != -1) {   
               os.write(bytes, 0, c);   
          }   
      } finally {   
         if (is != null) {   
              is.close();   
          }   
         if (os != null) {   
             os.close();   
          }   
      }   
    return result;   
}   
/**  
     * upload  
     * @throws java.lang.Exception  
     * @return  
     * @param filename  
     */   
public long upload(String filename)   
throws Exception   
{   
    String newname = "";   
    if (filename.indexOf("/")>-1)   
     {   
        newname = filename.substring(filename.lastIndexOf("/")+1);   
     }else   
     {   
        newname = filename;   
     }   
    return upload(filename,newname);   
}   
  
/**  
     *   download  
     *   从ftp下载文件到本地  
     * @throws java.lang.Exception  
     * @return  
     * @param newfilename 本地生成的文件名  
     * @param filename 服务器上的文件名  
     */   
public long download(String filename,String newfilename)   
throws Exception   
{     
    long result = 0;   
     TelnetInputStream is = null;   
     FileOutputStream os = null;   
    try   
     {   
        is = ftpClient.get(filename);          
        java.io.File outfile = new java.io.File(newfilename);   
        os = new FileOutputStream(outfile);   
       byte[] bytes = new byte[1024];   
       int c;   
       while ((c = is.read(bytes)) != -1) {   
            os.write(bytes, 0, c);   
            result = result + c;   
        }   
     } catch (IOException e)   
     {   
        e.printStackTrace();   
     }   
    finally {   
         if (is != null) {   
              is.close();   
          }   
         if (os != null) {   
             os.close();   
          }   
      }   
     return result;   
}   
/**  
   * 取得某个目录下的全部文件列表  
   *  
   */   
public List getFileList(String path)   
{   
     List list = new ArrayList();   
    try   
     {   
        DataInputStream dis = new   DataInputStream(ftpClient.nameList(path));   
       String filename = "";   
       while((filename=dis.readLine())!=null)     
        {     
          list.add(filename);           
        }     
      
     } catch (Exception e)   
     {   
        e.printStackTrace();   
     }   
    return list;   
}   
  
/**  
     * closeServer  
     * 断开与ftp服务器的连接  
     * @throws java.io.IOException  
     */   
public void closeServer()   
throws IOException   
{      
   try   
    {   
      if (ftpClient != null)   
       {   
         ftpClient.closeServer();        
       }   
    } catch (IOException e) {   
       e.printStackTrace();   
    }   
}   
     
  public static void main(String [] args) throws Exception   
   {   
     FtpUtil ftp = new FtpUtil();   
    try {   
         //链接ftp服务器   
          ftp.connectServer("192.168.8.32", "admin", "123456", "201212");   
         /**   上传文件到 info2 文件夹下 */   
          System.out.println("filesize:"+ftp.upload("f:/download/Install.exe")+"字节");   
         /** 取得info2文件夹下的全部文件列表,并下载到 E盘下 */   
          List list = ftp.getFileList(".");   
         for (int i=0;i<list.size();i++)   
          {   
            String filename = (String)list.get(i);   
             System.out.println(filename);   
             ftp.download(filename,"E:/"+filename);   
          }   
     } catch (Exception e) {   
       ///   
     }finally   
     {   
        ftp.closeServer();   
     }   
   }
  
}
相关文章
相关标签/搜索