Java实现FTP服务器功能实例代码

FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议。在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download)。FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录、列文件目录、设置传输参数及传送文件等。使用FTP可以传送所有类型的文件,如文本文件、二进制可执行文件、图象文件、声音文件和数据压缩文件等。

FTP 命令

  FTP 的主要操作都是基于各种命令基础之上的。常用的命令有:
   设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式;
   目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令);
   连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;
   发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机;
   获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。

import java.net.Socket;
import org.apache.log4j.Logger;
/**
 * 角色——服务器A
 * @author Leon
 *
 */
public class ServerA{
  public static void main(String[] args){
    final String F_DIR = "c:/test";//根路径
    final int PORT = 22;//监听端口号
    Logger.getRootLogger();
    Logger logger = Logger.getLogger("com");
    try{
      ServerSocket s = new ServerSocket(PORT);
      logger.info("Connecting to server A...");
      logger.info("Connected Successful! Local Port:"+s.getLocalPort()+". Default Directory:'"+F_DIR+"'.");
      while( true ){
        //接受客户端请求
        Socket client = s.accept();
        //创建服务线程
        new ClientThread(client, F_DIR).start();
      }
    } catch(Exception e) {
      logger.error(e.getMessage());
      for(StackTraceElement ste : e.getStackTrace()){
        logger.error(ste.toString());
      }
    }
  }
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.util.Random;
import org.apache.log4j.Logger;
/**
 * 客户端子线程类
 * @author Leon
 *
 */
public class ClientThread extends Thread {
  private Socket socketClient;//客户端socket
  private Logger logger;//日志对象
  private String dir;//绝对路径
  private String pdir = "/";//相对路径
  private final static Random generator = new Random();//随机数
  public ClientThread(Socket client, String F_DIR){
    this.socketClient = client;
    this.dir = F_DIR;
  }
  @Override
  public void run() {
    Logger.getRootLogger();
    logger = Logger.getLogger("com");
    InputStream is = null;
    OutputStream os = null;
    try {
      is = socketClient.getInputStream();
      os = socketClient.getOutputStream();
    } catch (IOException e) {
      logger.error(e.getMessage());
      for(StackTraceElement ste : e.getStackTrace()){
        logger.error(ste.toString());
      }
    }
    BufferedReader br = new BufferedReader(new InputStreamReader(is,
        Charset.forName("UTF-8")));
    PrintWriter pw = new PrintWriter(os);
    String clientIp = socketClient.getInetAddress().toString().substring(1);//记录客户端IP
    String username = "not logged in";//用户名
    String password = "";//口令
    String command = "";//命令
    boolean loginStuts = false;//登录状态
    final String LOGIN_WARNING = "530 Please log in with USER and PASS first.";
    String str = "";//命令内容字符串
    int port_high = 0;
    int port_low = 0;
    String retr_ip = "";//接收文件的IP地址
    Socket tempsocket = null;
    //打印欢迎信息
    pw.println("220-FTP Server A version 1.0 written by Leon Guo");
    pw.flush();
    logger.info("("+username+") ("+clientIp+")> Connected, sending welcome message...");
    logger.info("("+username+") ("+clientIp+")> 220-FTP Server A version 1.0 written by Leon Guo");
    boolean b = true;
    while ( b ){
      try {
        //获取用户输入的命令
        command = br.readLine();
        if(null == command) break;
      } catch (IOException e) {
        pw.println("331 Failed to get command");
        pw.flush();
        logger.info("("+username+") ("+clientIp+")> 331 Failed to get command");
        logger.error(e.getMessage());
        for(StackTraceElement ste : e.getStackTrace()){
          logger.error(ste.toString());
        }
        b = false;
      }
      /*
       * 访问控制命令
       */
      // USER命令
      if(command.toUpperCase().startsWith("USER")){
        logger.info("(not logged in) ("+clientIp+")> "+command);
        username = command.substring(4).trim();
        if("".equals(username)){
          pw.println("501 Syntax error");
          pw.flush();
          logger.info("(not logged in) ("+clientIp+")> 501 Syntax error");
          username = "not logged in";
        }
        else{
          pw.println("331 Password required for " + username);
          pw.flush();
          logger.info("(not logged in) ("+clientIp+")> 331 Password required for " + username);
        }
        loginStuts = false;
      } //end USER
      // PASS命令
      else if(command.toUpperCase().startsWith("PASS")){
        logger.info("(not logged in) ("+clientIp+")> "+command);
        password = command.substring(4).trim();
        if(username.equals("root") && password.equals("root")){
          pw.println("230 Logged on");
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> 230 Logged on");
//         logger.info("客户端 "+clientIp+" 通过 "+username+"用户登录");
          loginStuts = true;
        }
        else{
          pw.println("530 Login or password incorrect!");
          pw.flush();
          logger.info("(not logged in) ("+clientIp+")> 530 Login or password incorrect!");
          username = "not logged in";
        }
      } //end PASS
      // PWD命令
      else if(command.toUpperCase().startsWith("PWD")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
//         logger.info("用户"+clientIp+":"+username+"执行PWD命令");
          pw.println("257 /""+pdir+"/" is current directory");
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> 257 /""+pdir+"/" is current directory");
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end PWD
      // CWD命令
      else if(command.toUpperCase().startsWith("CWD")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          str = command.substring(3).trim();
          if("".equals(str)){
            pw.println("250 Broken client detected, missing argument to CWD. /""+pdir+"/" is current directory.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 250 Broken client detected, missing argument to CWD. /""+pdir+"/" is current directory.");
          }
          else{
            //判断目录是否存在
            String tmpDir = dir + "/" + str;
            File file = new File(tmpDir);
            if(file.exists()){//目录存在
              dir = dir + "/" + str;
              if("/".equals(pdir)){
                pdir = pdir + str;
              }
              else{
                pdir = pdir + "/" + str;
              }
//             logger.info("用户"+clientIp+":"+username+"执行CWD命令");
              pw.println("250 CWD successful. /""+pdir+"/" is current directory");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 250 CWD successful. /""+pdir+"/" is current directory");
            }
            else{//目录不存在
              pw.println("550 CWD failed. /""+pdir+"/": directory not found.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 550 CWD failed. /""+pdir+"/": directory not found.");
            }
          }
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end CWD
      // QUIT命令
      else if(command.toUpperCase().startsWith("QUIT")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        b = false;
        pw.println("221 Goodbye");
        pw.flush();
        logger.info("("+username+") ("+clientIp+")> 221 Goodbye");
        try {
          Thread.currentThread();
          Thread.sleep(1000);
        } catch (InterruptedException e) {
          logger.error(e.getMessage());
          for(StackTraceElement ste : e.getStackTrace()){
            logger.error(ste.toString());
          }
        }
      } //end QUIT
      /*
       * 传输参数命令
       */
      //PORT命令,主动模式传输数据
      else if(command.toUpperCase().startsWith("PORT")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          try {
            str = command.substring(4).trim();
            port_low = Integer.parseInt(str.substring(str.lastIndexOf(",")+1));
            port_high = Integer.parseInt(str.substring(0, str.lastIndexOf(","))
                .substring(str.substring(0, str.lastIndexOf(",")).lastIndexOf(",")+1));
            String str1 = str.substring(0, str.substring(0, str.lastIndexOf(",")).lastIndexOf(","));
            retr_ip = str1.replace(",", ".");
            try {
              //实例化主动模式下的socket
              tempsocket = new Socket(retr_ip,port_high * 256 + port_low);
//             logger.info("用户"+clientIp+":"+username+"执行PORT命令");
              pw.println("200 port command successful");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 200 port command successful");
            } catch (ConnectException ce) {
              pw.println("425 Can't open data connection.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 425 Can't open data connection.");
              logger.error(ce.getMessage());
              for(StackTraceElement ste : ce.getStackTrace()){
                logger.error(ste.toString());
              }
            } catch (UnknownHostException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            } catch (IOException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
          } catch (NumberFormatException e) {
            pw.println("503 Bad sequence of commands.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
            logger.error(e.getMessage());
            for(StackTraceElement ste : e.getStackTrace()){
              logger.error(ste.toString());
            }
          }
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end PORT
      //PASV命令,被动模式传输数据
      else if(command.toUpperCase().startsWith("PASV")) {
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          ServerSocket ss = null;
          while( true ){
            //获取服务器空闲端口
            port_high = 1 + generator.nextInt(20);
            port_low = 100 + generator.nextInt(1000);
            try {
              //服务器绑定端口
              ss = new ServerSocket(port_high * 256 + port_low);
              break;
            } catch (IOException e) {
              continue;
            }
          }
//         logger.info("用户"+clientIp+":"+username+"执行PASV命令");
          InetAddress i = null;
          try {
            i = InetAddress.getLocalHost();
          } catch (UnknownHostException e1) {
            e1.printStackTrace();
          }
          pw.println("227 Entering Passive Mode ("+i.getHostAddress().replace(".", ",")+","+port_high+","+port_low+")");
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> 227 Entering Passive Mode ("+i.getHostAddress().replace(".", ",")+","+port_high+","+port_low+")");
          try {
            //被动模式下的socket
            tempsocket = ss.accept();
            ss.close();
          } catch (IOException e) {
            logger.error(e.getMessage());
            for(StackTraceElement ste : e.getStackTrace()){
              logger.error(ste.toString());
            }
          }
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end PASV
      //RETR命令
      else if(command.toUpperCase().startsWith("RETR")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          str = command.substring(4).trim();
          if("".equals(str)){
            pw.println("501 Syntax error");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 501 Syntax error");
          }
          else {
            try {
              pw.println("150 Opening data channel for file transfer.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 150 Opening data channel for file transfer.");
              RandomAccessFile outfile = null;
              OutputStream outsocket = null;
              try {
                //创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称
                outfile = new RandomAccessFile(dir+"/"+str,"r");
                outsocket = tempsocket.getOutputStream();
              } catch (FileNotFoundException e) {
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              } catch (IOException e) {
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              }
              byte bytebuffer[]= new byte[1024];
              int length;
              try{
                while((length = outfile.read(bytebuffer)) != -1){
                  outsocket.write(bytebuffer, 0, length);
                }
                outsocket.close();
                outfile.close();
                tempsocket.close();
              }
              catch(IOException e){
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              }
//             logger.info("用户"+clientIp+":"+username+"执行RETR命令");
              pw.println("226 Transfer OK");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 226 Transfer OK");
            } catch (Exception e){
              pw.println("503 Bad sequence of commands.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
          }
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      }//end RETR
      //STOR命令
      else if(command.toUpperCase().startsWith("STOR")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          str = command.substring(4).trim();
          if("".equals(str)){
            pw.println("501 Syntax error");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 501 Syntax error");
          }
          else {
            try {
              pw.println("150 Opening data channel for file transfer.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 150 Opening data channel for file transfer.");
              RandomAccessFile infile = null;
              InputStream insocket = null;
              try {
                infile = new RandomAccessFile(dir+"/"+str,"rw");
                insocket = tempsocket.getInputStream();
              } catch (FileNotFoundException e) {
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              } catch (IOException e) {
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              }
              byte bytebuffer[] = new byte[1024];
              int length;
              try{
                while((length =insocket.read(bytebuffer) )!= -1){
                  infile.write(bytebuffer, 0, length);
                }
                insocket.close();
                infile.close();
                tempsocket.close();
              }
              catch(IOException e){
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              }
//             logger.info("用户"+clientIp+":"+username+"执行STOR命令");
              pw.println("226 Transfer OK");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 226 Transfer OK");
            } catch (Exception e){
              pw.println("503 Bad sequence of commands.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
          }
        } else {
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end STOR
      //NLST命令
      else if(command.toUpperCase().startsWith("NLST")) {
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          try {
            pw.println("150 Opening data channel for directory list.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 150 Opening data channel for directory list.");
            PrintWriter pwr = null;
            try {
              pwr= new PrintWriter(tempsocket.getOutputStream(),true);
            } catch (IOException e1) {
              e1.printStackTrace();
            }
            File file = new File(dir);
            String[] dirstructure = new String[10];
            dirstructure= file.list();
            for(int i=0;i<dirstructure.length;i++){
              pwr.println(dirstructure[i]);
            }
            try {
              tempsocket.close();
              pwr.close();
            } catch (IOException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
//           logger.info("用户"+clientIp+":"+username+"执行NLST命令");
            pw.println("226 Transfer OK");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 226 Transfer OK");
          } catch (Exception e){
            pw.println("503 Bad sequence of commands.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
            logger.error(e.getMessage());
            for(StackTraceElement ste : e.getStackTrace()){
              logger.error(ste.toString());
            }
          }
        }else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end NLST
      //LIST命令
      else if(command.toUpperCase().startsWith("LIST")) {
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          try{
            pw.println("150 Opening data channel for directory list.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 150 Opening data channel for directory list.");
            PrintWriter pwr = null;
            try {
              pwr= new PrintWriter(tempsocket.getOutputStream(),true);
            } catch (IOException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
            FtpUtil.getDetailList(pwr, dir);
            try {
              tempsocket.close();
              pwr.close();
            } catch (IOException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
//           logger.info("用户"+clientIp+":"+username+"执行LIST命令");
            pw.println("226 Transfer OK");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 226 Transfer OK");
          } catch (Exception e){
            pw.println("503 Bad sequence of commands.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
            logger.error(e.getMessage());
            for(StackTraceElement ste : e.getStackTrace()){
              logger.error(ste.toString());
            }
          }
        } else {
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end LIST
      // 输入非法命令
      else{
        logger.info("("+username+") ("+clientIp+")> "+command);
        pw.println("500 Syntax error, command unrecognized.");
        pw.flush();
        logger.info("("+username+") ("+clientIp+")> 500 Syntax error, command unrecognized.");
      }
    } //end while
    try {
      logger.info("("+username+") ("+clientIp+")> disconnected.");
//     logger.info("用户"+clientIp+":"+username+"退出");
      br.close();
      socketClient.close();
      pw.close();
      if(null != tempsocket){
        tempsocket.close();
      }
    } catch (IOException e) {
      logger.error(e.getMessage());
      for(StackTraceElement ste : e.getStackTrace()){
        logger.error(ste.toString());
      }
    }
  }
}
import java.io.File;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * FTP工具类
 * @author Leon
 *
 */
public class FtpUtil {
  public static void getDetailList(PrintWriter pw, String path){
    File dir = new File(path);
    if (!dir.isDirectory()) {
      pw.println("500 No such file or directory./r/n");
    }
    File[] files = dir.listFiles();
    String modifyDate;
    for (int i = 0; i < files.length; i++) {
      modifyDate = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss")
          .format(new Date(files[i].lastModified()));
      if (files[i].isDirectory()) {
        pw.println("drwxr-xr-x ftp   ftp      0 "
            + modifyDate + " " + files[i].getName());
      } else {
        pw.println("-rw-r-r--1 ftp   ftp      "
            + files[i].length() + " " + modifyDate + " "
            + files[i].getName());
      }
      pw.flush();
    }
    pw.println("total:" + files.length);
  }
}
### set log levels ###
log4j.logger.com =debug,stdout,D,E
### 输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
## 输出DEBUG级别以上的日志
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=c:/logs/logs.log
log4j.appender.D.Append =true
## 输出DEBUG级别以上的日志
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 保存异常信息到单独文件 ###
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.E.File=c:/logs/errors.log
log4j.appender.E.Append=true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 

以上内容是小编给大家介绍的Java实现FTP服务器功能实例代码的相关知识,希望大家喜欢。

(0)

相关推荐

  • Java通过FTP服务器上传下载文件的方法

    对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav

  • Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录名及文件名中的中文显示为"??". 原因: FTP协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码. 解决方案: 1.将中文的目录或文件名转为iso-8859-1编码的字符.参考代码: 复制代码 代码如下: String name="目录名或文件名"; name=new String(name.getBytes(&qu

  • JAVA中使用FTPClient实现文件上传下载实例代码

    在java程序开发中,ftp用的比较多,经常打交道,比如说向FTP服务器上传文件.下载文件,本文给大家介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件. 一.上传文件 原理就不介绍了,大家直接看代码吧 /** * Description: 向FTP服务器上传文件 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建 * @param url F

  • java使用ftp上传文件示例分享

    复制代码 代码如下: import java.io.ByteArrayInputStream;  import java.io.FileOutputStream;  import java.io.IOException;  import java.net.SocketException;  import java.text.SimpleDateFormat;  import java.util.Date; import org.apache.commons.io.IOUtils;  import

  • Java语言实现简单FTP软件 FTP上传下载管理模块实现(11)

    本文为大家分享了FTP上传下载管理模块的实现方法,供大家参考,具体内容如下 1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传的文件或文件夹,点击"上传"按钮,会触发com.oyp.ftp.panel.local.UploadAction类的actionPerformed(ActionEvent e)方法,其主要代码如下 /** * 上传

  • java操作ftp下载文件示例

    复制代码 代码如下: /**     *      * JAVA操作 FTP 下载     * 文件下载.     *     */    private void ftpDownload()    {        FTPClient ftpClient = null;        InputStream input = null;        boolean loginFlag = false;        List<String> list = new ArrayList<S

  • Java FtpClient 实现文件上传服务

    一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /bin/bash uftp 3.设置用户密码 sudo useradd -d /home/uftp -s /bin/bash uftp 4.创建用户目录 sudo mkdir /home/uftp 5.设置用户密码 sudo passwd uftp 6.设置/etc/vsftpd.conf配置文件 s

  • Java使用FTPClient类读写FTP

    本文实例为大家分享了Java使用FTPClient类读写FTP的具体代码,供大家参考,具体内容如下 1.首先先导入相关jar包 2.创建一个连接FTP的工具类FTPUtil.java package com.metarnet.ftp.util; import java.io.IOException; import java.io.InputStream; import java.net.SocketException; import java.util.Properties; import or

  • Java FTPClient实现文件上传下载

    在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件. 所用到的jar包有:  commons-net-1.4.1.jar  jakarta-oro.jar  一.上传文件 文件上传源代码 /** * Description: 向FTP服务器上传文件 * @Version1.0 * @param url FTP服务器hostname * @param

  • JAVA技术实现上传下载文件到FTP服务器(完整)

    具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

随机推荐