ftpjava代碼實(shí)現(xiàn)的簡(jiǎn)單介紹

如何用java代碼實(shí)現(xiàn)ftp文件上傳

import java.io.File;

創(chuàng)新互聯(lián)公司服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過十年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對(duì)網(wǎng)站進(jìn)行網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

import java.io.FileInputStream;

import org.apache.commons.net.;

import org.apache.commons.net.;

public class test {

private FTPClient ftp;

/**

*

* @param path 上傳到ftp服務(wù)器哪個(gè)路徑下

* @param addr 地址

* @param port 端口號(hào)

* @param username 用戶名

* @param password 密碼

* @return

* @throws Exception

*/

private boolean connect(String path,String addr,int port,String username,String password) throws Exception {

boolean result = false;

ftp = new FTPClient();

int reply;

;

;

;

reply = ;

if (!FTPReply.isPositiveCompletion(reply)) {

;

return result;

}

;

result = true;

return result;

}

/**

*

* @param file 上傳的文件或文件夾

* @throws Exception

*/

private void upload(File file) throws Exception{

if(file.isDirectory()){

(file.getName());

(file.getName());

String[] files = file.list();

for (int i = 0; i files.length; i++) {

File file1 = new File(file.getPath()+"\\"+files[i] );

if(file1.isDirectory()){

upload(file1);

;

}else{

File file2 = new File(file.getPath()+"\\"+files[i]);

如何用Java實(shí)現(xiàn)FTP服務(wù)器

FTP(File Transfer Protocol 文件傳輸協(xié)議)是Internet 上用來傳送文件的協(xié)議。在Internet上通過FTP 服務(wù)器可以進(jìn)行文件的上傳(Upload)或下載(Download)。FTP是實(shí)時(shí)聯(lián)機(jī)服務(wù),在使用它之前必須是具有該服務(wù)的一個(gè)用戶(用戶名和口令),工作時(shí)客戶端必須先登錄到作為服務(wù)器一方的計(jì)算機(jī)上,用戶登錄后可以進(jìn)行文件搜索和文件傳送等有關(guān)操作,如改變當(dāng)前工作目錄、列文件目錄、設(shè)置傳輸參數(shù)及傳送文件等。使用FTP可以傳送所有類型的文件,如文本文件、二進(jìn)制可執(zhí)行文件、圖象文件、聲音文件和數(shù)據(jù)壓縮文件等。

FTP 命令

FTP 的主要操作都是基于各種命令基礎(chǔ)之上的。常用的命令有:

設(shè)置傳輸模式,它包括ASCⅡ(文本) 和BINARY 二進(jìn)制模式;

目錄操作,改變或顯示遠(yuǎn)程計(jì)算機(jī)的當(dāng)前目錄(cd、dir/ls 命令);

連接操作,open命令用于建立同遠(yuǎn)程計(jì)算機(jī)的連接;close命令用于關(guān)閉連接;

發(fā)送操作,put命令用于傳送文件到遠(yuǎn)程計(jì)算機(jī);mput 命令用于傳送多個(gè)文件到遠(yuǎn)程計(jì)算機(jī);

獲取操作,get命令用于接收一個(gè)文件;mget命令用于接收多個(gè)文件。

?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635

import java.net.Socket;import org.apache.log4j.Logger;/** * 角色——服務(wù)器A * @author Leon * */public class ServerA{ public static void main(String[] args){ final String F_DIR = "c:/test";//根路徑 final int PORT = 22;//監(jiān)聽端口號(hào) 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 ){ //接受客戶端請(qǐng)求 Socket client = s.accept(); //創(chuàng)建服務(wù)線程 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;//日志對(duì)象 private String dir;//絕對(duì)路徑 private String pdir = "/";//相對(duì)路徑 private final static Random generator = new Random();//隨機(jī)數(shù) 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;//登錄狀態(tài) final String LOGIN_WARNING = "530 Please log in with USER and PASS first."; String str = "";//命令內(nèi)容字符串 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+"執(zhí)行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+"執(zhí)行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.");

如何用JAVA實(shí)現(xiàn)FTP訪問

在主函數(shù)中,完成服務(wù)器端口的偵聽和服務(wù)線程的創(chuàng)建。我們利用一個(gè)靜態(tài)字符串變量initDir 來保存服務(wù)器線程運(yùn)行時(shí)所在的工作目錄。服務(wù)器的初始工作目錄是由程序運(yùn)行時(shí)用戶輸入的,缺省為C盤的根目錄。

具體的代碼如下:

public class ftpServer extends Thread{

private Socket socketClient;

private int counter;

private static String initDir;

public static void main(String[] args){

if(args.length != 0) {

initDir = args[0];

}else{ initDir = "c:";}

int i = 1;

try{

System.out.println("ftp server started!");

//監(jiān)聽21號(hào)端口

ServerSocket s = new ServerSocket(21);

for(;;){

//接受客戶端請(qǐng)求

Socket incoming = s.accept();

//創(chuàng)建服務(wù)線程

new ftpServer(incoming,i).start();

i++;

}

}catch(Exception e){}

}

java 實(shí)現(xiàn)ftp上傳如何創(chuàng)建文件夾?

準(zhǔn)備條件:java實(shí)現(xiàn)ftp上傳用到了commons-net-3.3.jar包

首先建立ftphost連接

public?boolean?connect(String?path,?String?addr,?int?port,?String?username,?String?password)?{

try?{

//FTPClient?ftp?=?new?FTPHTTPClient(addr,?port,?username,?password);

ftp?=?new?FTPClient();

int?reply;

;

System.out.println("連接到:"?+?addr?+?":"?+?port);

System.out.print();

reply?=?;

if?(!FTPReply.isPositiveCompletion(reply))?{

;

System.err.println("FTP目標(biāo)服務(wù)器積極拒絕.");

System.exit(1);

return?false;

}else{

(username,?password);

;

;

;

System.out.println("已連接:"?+?addr?+?":"?+?port);

return?true;

}

}?catch?(Exception?ex)?{

ex.printStackTrace();

System.out.println(ex.getMessage());

return?false;

}

}

然后再利用ftpclient的makeDirectory方法創(chuàng)建文件夾

public?void?createDir(String?dirname){

try{

;

System.out.println("在目標(biāo)服務(wù)器上成功建立了文件夾:?"?+?dirname);

}catch(Exception?ex){

System.out.println(ex.getMessage());

}

}

斷開host連接

public?void?disconnect(){

try?{

;

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

最后是程序的調(diào)用方法

public?static?void?main(String[]?args)?{

FtpUploadTest?ftpupload?=?new?FtpUploadTest();

if(ftpupload.connect("",?"172.39.8.x",?20,?"administrator",?"abc@123")){

ftpupload.createDir("/UPLOAD");

ftpupload.disconnect();

}

}

當(dāng)前標(biāo)題:ftpjava代碼實(shí)現(xiàn)的簡(jiǎn)單介紹
本文URL:http://muchs.cn/article42/dohsghc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司網(wǎng)站導(dǎo)航、面包屑導(dǎo)航、關(guān)鍵詞優(yōu)化、做網(wǎng)站、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站