程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成FTP辦事器功效實例代碼

Java完成FTP辦事器功效實例代碼

編輯:關於JAVA

Java完成FTP辦事器功效實例代碼。本站提示廣大學習愛好者:(Java完成FTP辦事器功效實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是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辦事器功效實例代碼的相干常識,願望年夜家愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved