我有一个搜索ftp的bean,也是从网上down下来了,到现在还没有用过,看是否有用。package mshtang.ftp;
import java.io.*;
import java.net.*;
import java.util.*;
/**
 * <p>Title: FTPSearch</p>
 * <p>Description: 本类可以搜索某个FTP站点的内容,要求给出站点IP地址。</p>
 * <p>Company: 厦门一方软件公司</p>
 * @ 小唐蔡
 * @version 1.0
 */
public class FTPSearch extends Thread
{
  /**主机ip地址*/
  String _host;
  /**端口号*/
  static final int PORT = 21;
  ServerSocket ss;
  Socket _ds;
  Socket _sc;
  PrintStream _out ;
  String _hostAddress;
  BufferedReader _in ;
  BufferedReader _dataIn;
  /**一个临时存放从服务器读取的信息的变量*/
  String _reply;
  /**存放搜索日志*/
  protected StringBuffer _log = new StringBuffer(10000);
  /**存放搜索结果*/
  Vector _result;
  String _user;
  String _pass;
  /**构造函数。<br>参数:ip为远端主机ip地址,user为用户名,pass为口令。*/
  public FTPSearch(String ip,String user,String pass)
  {
    _host = ip;
    _user = user;
    _pass = pass;
    _result = new Vector();
  }  /**构造函数。<br>参数:ip为远端主机ip地址,匿名登录。*/
  public FTPSearch(String ip)
  {
    _host = ip;
    _user = "lq";
    _pass = "linquan";
    _result = new Vector();
  }  /**连接登录<br>Return:<br>true:登录成功;false:登录失败.*/
  protected boolean login()throws UnknownHostException,IOException
  {
    boolean successful = false;
    StringBuffer reply = new StringBuffer();
    _sc = new Socket(_host,PORT);
    _hostAddress = _sc.getLocalAddress().getHostAddress().replace('.',',');
    _sc.setSoTimeout(15000);
    _out = new PrintStream(_sc.getOutputStream(),true);
    _in  = new BufferedReader(new  InputStreamReader(_sc.getInputStream()));
    reply.append(readReply().trim());
    if(reply.toString().startsWith("220"))
    {
      if(comm("USER "+_user))
      {
        if(comm("PASS "+_pass))
        {
          successful = true;
        }
      }
    }
    comm("TYPE A");
    return successful;
  }  /**取得当前所在目录*/
  protected String getCurrentDir()throws IOException
  {
    String currentDir = null;
    if(comm("PWD"))
    {
      StringTokenizer st = new StringTokenizer(_reply);
      st.nextToken();
      StringBuffer rtDir = new StringBuffer(st.nextToken());
      currentDir = rtDir.substring(1,rtDir.length()-1);
    }
    return currentDir;
  }  /**列出站点中所有的目录、子目录和文件,存入_result属性变量,和一个名为“result.txt”的文件。
   *<br>并产生一个名为”Log.txt“日志文件。*/
  public void search()throws IOException,InterruptedException
  {
    try
    {
      for(int i = 0; i < 5; i++)
      {
        if(login())
        {
          break;
        }
        System.out.println("Wait 10 seconds to try again...");
        sleep(10000);
      }
      scan();
      logout();
    }
    catch(IOException ex)
    {    }
    finally
    {
      PrintStream out = new PrintStream(new FileOutputStream("Log.txt"));//会自动创建一个文件
      out.println(_log);
      out.close();
      printResult("result.txt");
    }  }
  protected void scan()throws IOException
  {
    Vector fileNames = new Vector();
    tellPort();
    comm("LIST -R");    //Get data_connection's InputStream.
    try
    {
      _ds = ss.accept();
      System.out.println(ss.toString());
    }
    catch(IOException ex)
    {
      ss.close();
    }
    _dataIn = new BufferedReader(new  InputStreamReader(_ds.getInputStream()));    System.out.println("Scanning now.Please waiting......");
    //Read directory content
    try
    {
      String temp="";
      do
      {
        temp = _dataIn.readLine();
        if(temp == null)
        {
          break;
        }
        fileNames.add(temp);
        //System.out.println(temp);
      }
      while(temp != null);
    }
    catch(InterruptedIOException ex)
    {
      System.out.println("Caught InterruptedIOException1:"+ex);//如果超时则继续
    }    //Read end infomation
    try
    {
      do
      {
        String temp = _in.readLine();
        _log.append(temp + "\r\n");
        System.out.println(temp);
      }
      while(_in.ready());
    }
    catch(InterruptedIOException ex)
    {
      System.out.println("Caught InterruptedIOException2:"+ex);//如果超时则继续
    }
    _result = fileNames;
  }

解决方案 »

  1.   

    版权申明:该bean不是本人所写,版权归原作者,但忘了作者是谁,请见谅。
    续:/**得到搜索结果向量。<br>记住要在执行search()方法后执行。*/
      public Vector getResult()
      {
        return _result;
      }  /**得到搜索日志。<br>记住要在执行search()方法后执行。*/
      public StringBuffer getLog()
      {
        return _log;
      }  /**分析得到的_result各成员,分辨目录、文件、及其他*/
      public static Vector parse()throws FileNotFoundException,IOException
      {
        Vector  result = new Vector();
        FileInputStream fileIn = new FileInputStream("result.txt");
        BufferedReader fReader = new BufferedReader(new InputStreamReader(fileIn));
        //int size=fileIn.available();
        //System.out.println(String.valueOf(size));
        String dir = "/";
        System.out.println("Parsing now.Please wait......");
        while(fReader.ready())
        {
          String temp = fReader.readLine();
          StringTokenizer tt = new StringTokenizer(temp);      if(tt.countTokens() == 1)
          {
            if(temp.startsWith("/"))
            {
              dir = temp.replace(':',' ').trim() + "/";
            }
            else
            {
              dir = "/"+temp.replace(':',' ').trim() + "/";
            }
            //parseResult.add(dir);
            continue;
          }
          if((!temp.equals("")) && (temp.startsWith("-") || temp.startsWith("b") || temp.startsWith("c") || temp.startsWith("l")))
            //是文件就加上dir加入parseResult.
          {
            for(int i = 0; i < 4; i++)
            {
              tt.nextToken();
            }
            String description="";
            for(int i = 0; i < 4; i++)
            {
              description = description+tt.nextToken()+" ";
            }
            String cont="";
            do
            {
              cont=cont+tt.nextToken()+" ";
            }
            while(tt.hasMoreTokens());
            result.add(new FileInfo(dir+cont.trim(),description.trim()));
            continue;
          }
          else if(temp.startsWith("d"))//是目录
          {
            for(int i=0;i<4;i++)
            {
              tt.nextToken();
            }
            String description="";
            for(int i=0;i<4;i++)
            {
              description=description+tt.nextToken()+" ";
            }
            String cont="";
            do
            {
              cont=cont+tt.nextToken()+" ";
            }
            while(tt.hasMoreTokens());
            result.add(new FileInfo(dir+cont.trim()+"/",description.trim()));
            continue;
          }
          else if(temp.equals(""))
          {
            continue;
          }
        }
        return result;
      }  protected void logout()throws IOException
      {
        comm("QUIT");
      }  protected void printResult(String resultFile)throws IOException
      {
        PrintStream out=new PrintStream(new FileOutputStream(resultFile));//会自动创建一个文件
        int len=_result.size();
        for (int i=0;i<len;i++)
        {
          out.println(_result.elementAt(i));
        }
        out.close();
      }
      protected boolean comm(String command)throws IOException
      {
        boolean success = false;
        _out.println(command);
        System.out.println("<COMMAND>"+command);
        _log.append("<COMMAND>"+command+"\r\n");
        _reply = readReply();
        if(command.startsWith("USER"))
        {
          success=_reply.startsWith("331")?true:false;
        }
        else if(command.startsWith("PASS"))
        {
          success=_reply.startsWith("230")?true:false;
          try
          {
            readReply();
          }
          catch(InterruptedIOException ex){}
        }
        else if(command.equals("TYPE A"))
        {
          success=_reply.startsWith("200")?true:false;
        }
        else if(command.startsWith("PORT"))
        {
          success=_reply.startsWith("200")?true:false;
        }
        else if(command.startsWith("LIST"))
        {
          success=_reply.startsWith("150")?true:false;
        }
        else if(command.startsWith("NLST"))
        {
          success=_reply.startsWith("150")?true:false;
        }
        else if(command.equals("PWD"))
        {
          success=_reply.startsWith("257")?true:false;
        }
        else if(command.startsWith("STAT"))
        {
          success=_reply.startsWith("211")?true:false;
        }
        else if(command.equals("SYST"))
        {
          success=_reply.startsWith("215")?true:false;
        }
        else if(command.startsWith("SITE"))
        {
          success=_reply.startsWith("214")?true:false;
        }
        else if(command.equals("QUIT"))
        {
          success=_reply.startsWith("221")?true:false;
        }
        return success;
      }
      /**把指定向量中的内容在标准输出打印出来。*/
      public static void printVector(Vector vct)
      {
        int size=vct.size();
        for(int i=0;i<size;i++)
        {
          System.out.println(vct.elementAt(i));
        }
      }
      protected String readReply()throws IOException, InterruptedIOException
      {
        StringBuffer reply=new StringBuffer();
        do
        {
          reply.append(_in.readLine()+"\r\n");
        }
        while(_in.ready());
        System.out.println(reply);
        _log.append(reply);
        _reply=reply.toString();
        return _reply;
      }  private int getDataPort()
      {
        int port=_sc.getLocalPort()+1;
        return port;
      }  private void tellPort()throws IOException
      {
        try
        {
          int port=getDataPort();
          System.out.println("Get data port:"+port);
          int x=(int) Math.round((port/256)-0.5);
          int y=port-x*256;
          try
          {
            ss=new ServerSocket(port);
          }
          catch(IOException ex)
          {
            System.out.println("IOException in Method tellPort() in Class ftpc--"+ex);
          }
          comm("PORT "+_hostAddress+","+x+","+y);
        }
        finally
        {
        }
      }
      public static void main(String arg[])//throws IOException,UnknownHostException,InterruptedException
      {
        try
        {
          FTPSearch client=new FTPSearch("192.168.0.33", "lq", "linquan");
          client.search();
          client.parse();
        }
        catch(Exception ex)//probably catch IOException,UnknownHostException,InterruptedException
        {
          System.out.println(ex);
        }
      }
    }
      

  2.   

    我有纯的java程序,不知道可以吗?
    从FTP服务器上下传一个文件
     void getButton_actionPerformed(ActionEvent e) {
    String server=serverEdit.getText();
        String user=userEdit.getText();
        String password=passwordEdit.getText();
        String path=pathEdit.getText();
        String filename=filenameEdit.getText();
       try {
       FtpClient ftpClient=new FtpClient();
       ftpClient.openServer(server);
       ftpClient.login(user, password);
           if (path.length()!=0) ftpClient.cd(path);
       ftpClient.binary();
       TelnetInputStream is=ftpClient.get(filename);
       File file_out=new File(filename);
           FileOutputStream os=new 
           FileOutputStream(file_out);
           byte[] bytes=new byte[1024];
       int c;
       while ((c=is.read(bytes))!=-1) {
          os.write(bytes,0,c);
       }
           is.close();
           os.close();
           ftpClient.closeServer();
        } catch (IOException ex) {;}
      }
    向FTP服务器上上传一个文件 void putButton_actionPerformed(ActionEvent e) {
    String server=serverEdit.getText();
        String user=userEdit.getText();
        String password=passwordEdit.getText();
        String path=pathEdit.getText();
        String filename=filenameEdit.getText();
       try {
       FtpClient ftpClient=new FtpClient();
       ftpClient.openServer(server);
       ftpClient.login(user, password);
           if (path.length()!=0) ftpClient.cd(path);
       ftpClient.binary();
       TelnetOutputStream os=ftpClient.put(filename);
       File file_in=new File(filename);
           FileInputStream is=new FileInputStream(file_in);
           byte[] bytes=new byte[1024];
       int c;
       while ((c=is.read(bytes))!=-1){
    os.write(bytes,0,c);}
           is.close();
           os.close();
           ftpClient.closeServer();
        } catch (IOException ex) {;}
      }
    }