ITPub博客

首页 > 应用开发 > Java > JAVA实现FTP上传下载文件的功能

JAVA实现FTP上传下载文件的功能

原创 Java 作者:cxck 时间:2007-06-28 10:49:20 0 删除 编辑
通过SOCKET,JAVA能简单地实现FTP功能。[@more@]

这个例子实现了文件上传和文件下载的功能。

import java.io.*;
import java.net.*;

public class JAVAFTP {
  private static final int CTRLPORT  = 21; // ftp的端口
  private static Socket sSocket; 
  private static PrintWriter wOutput; 
  private static BufferedReader bInput; 
  private static byte[] localHost; //本地主机地址

  public static void main(String[] args) {
    try {
      String sHost = "192.168.1.1";
      String sloginName  = "user";
      String spassword  = "password";
      String sdir = "/home";
      String sfile = "testfile.txt";

      //连接FTP
      sSocket = new Socket(sHost, CTRLPORT);
      localHost = sSocket.getLocalAddress().getAddress();
      wOutput = new PrintWriter(sSocket.getOutputStream());
      bInput = new 
        BufferedReader(new InputStreamReader(sSocket.getInputStream()));
      //用户认证
      wOutput.println("USER " + sloginName );
      wOutput.flush();
      wOutput.println("PASS " + spassword );
      wOutput.flush();
      //转入指定目录
      wOutput.println("CWD " + sdir);
      wOutput.flush();
      //二进制模式(assic模式="TYPE A")
      wOutput.println("TYPE I");
      wOutput.flush();
      // 上传文件
      FileInputStream fis = new FileInputStream(sfile);
      Socket dataSocket = dataConnection("STOR " + sfile);//"RETR "下载文件
      OutputStream outstr = dataSocket.getOutputStream();
      int n;
      byte[] buff = new byte[1024];
      while ((n = fis.read(buff)) > 0) {
        outstr.write(buff,0,n);
      }
      dataSocket.close();
      fis.close();

      //关闭连接
      wOutput.close();
      bInput.close();
      sSocket.close();
    }catch (Exception e) {
      e.printStackTrace();
    }
  }
  
  //发送和接受数据
  private static Socket dataConnection(String scmd) 
      throws IOException,UnknownHostException {
    String cmd = "PORT ";
    ServerSocket sDtSocket= new ServerSocket(0,1);
    for (int i=0;i<4;i++) {
      cmd = cmd + ( localHost[i] & 0xff ) + ",";
    }
    cmd = cmd + ((( sDtSocket.getLocalPort())/256 ) & 0xff ) 
              + ","
              + (sDtSocket.getLocalPort() & 0xff );

    wOutput.println(cmd);
    wOutput.flush();
    wOutput.println(scmd);
    wOutput.flush();

    Socket dtSocket = sDtSocket.accept();
    sDtSocket.close();
    return dtSocket;
  }
}

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/174388/viewspace-921762/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: JAVA实现批处理
请登录后发表评论 登录
全部评论
  • 博文量
    38
  • 访问量
    74700