當前位置:首頁 » 文件管理 » ftp客戶端代碼java

ftp客戶端代碼java

發布時間: 2024-03-09 06:54:46

java ftp客戶端主動模式(port)下的源代碼

維護一個ftp的伺服器列表,包含ip埠用戶名密碼
定時的遞歸掃描每個ftp伺服器的目錄和文件,保存到本地資料庫
搜索的時候,從本地資料庫查詢

至於java訪問ftp伺服器的方法,已經有很多現成的實現
比如www.apache.org的commons-net里就有
有的版本的sun jdk自身就帶

㈡ JAVA編寫FTP連接報錯java.net.ConnectException: Connection refused: connect FTP

你用的FTPClient引入不對吧,我們項目上都是用的

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

下面是我們項目上用到的FTP的實現代碼(FTP需要先連接,再登錄,之後就是校驗登錄是否成功),具體代碼如下:

/**
*獲取FTPClient對象
*
*@paramftpHostFTP主機伺服器
*@paramftpPasswordFTP登錄密碼
*@paramftpUserNameFTP登錄用戶名
*@paramftpPortFTP埠默認為21
*@returnFTPClient
*@throwsException
*/
(StringftpHost,StringftpUserName,
StringftpPassword,intftpPort)throwsException{
try{
FTPClientftpClient=newFTPClient();
ftpClient.connect(ftpHost,ftpPort);//連接FTP伺服器
ftpClient.login(ftpUserName,ftpPassword);//登陸FTP伺服器
if(!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
logger.error("未連接到FTP,用戶名或密碼錯誤!");
ftpClient.disconnect();
returnnull;
}else{
logger.info("FTP連接成功!");
returnftpClient;
}
}catch(){
logger.error("FTP的IP地址可能錯誤,請正確配置!");
throwsocketException;
}catch(IOExceptionioException){
logger.error("FTP的埠錯誤,請正確配置!");
throwioException;
}
}

㈢ 怎樣用java開發ftp客戶端

package zn.ccfccb.util;
import hkrt.b2b.view.util.Log;
import hkrt.b2b.view.util.ViewUtil;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import zn.ccfccb.util.CCFCCBUtil;
import zn.ccfccb.util.ZipUtilAll;

public class CCFCCBFTP {

/**
* 上傳文件
*
* @param fileName
* @param plainFilePath 明文文件路徑路徑
* @param filepath
* @return
* @throws Exception
*/
public static String fileUploadByFtp(String plainFilePath, String fileName, String filepath) throws Exception {
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
FTPClient ftpClient = new FTPClient();
String bl = "false";
try {
fis = new FileInputStream(plainFilePath);
bos = new ByteArrayOutputStream(fis.available());
byte[] buffer = new byte[1024];
int count = 0;
while ((count = fis.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
bos.flush();
Log.info("加密上傳文件開始");
Log.info("連接遠程上傳伺服器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);
ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);
ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);
// Log.info("連接遠程上傳伺服器"+"192.168.54.106:"+2021);
// ftpClient.connect("192.168.54.106", 2021);
// ftpClient.login("hkrt-CCFCCBHK", "3OLJheziiKnkVcu7Sigz");
FTPFile[] fs;
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(filepath)) {
bl="true";
ftpClient.changeWorkingDirectory("/"+filepath+"");
}
}
Log.info("檢查文件路徑是否存在:/"+filepath);
if("false".equals(bl)){
ViewUtil.dataSEErrorPerformedCommon( "查詢文件路徑不存在:"+"/"+filepath);
return bl;
}
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
// 設置文件類型(二進制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(fileName, fis);
Log.info("上傳文件成功:"+fileName+"。文件保存路徑:"+"/"+filepath+"/");
return bl;
} catch (Exception e) {
throw e;
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
}

}

/**
*下載並解壓文件
*
* @param localFilePath
* @param fileName
* @param routeFilepath
* @return
* @throws Exception
*/
public static String fileDownloadByFtp(String localFilePath, String fileName,String routeFilepath) throws Exception {
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
FileOutputStream fos = null;
FTPClient ftpClient = new FTPClient();
String SFP = System.getProperty("file.separator");
String bl = "false";
try {
Log.info("下載並解密文件開始");
Log.info("連接遠程下載伺服器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);
ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);
ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);
// ftpClient.connect(CMBCUtil.CMBCHOSTNAME, 2021);
// ftpClient.login(CMBCUtil.CMBCLOGINNAME, CMBCUtil.CMBCLOGINPASSWORD);
FTPFile[] fs;

ftpClient.makeDirectory(routeFilepath);
ftpClient.changeWorkingDirectory(routeFilepath);
bl = "false";
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(fileName)) {
bl = "true";
Log.info("下載文件開始。");
ftpClient.setBufferSize(1024);
// 設置文件類型(二進制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
InputStream is = ftpClient.retrieveFileStream(fileName);
bos = new ByteArrayOutputStream(is.available());
byte[] buffer = new byte[1024];
int count = 0;
while ((count = is.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
bos.flush();
fos = new FileOutputStream(localFilePath+SFP+fileName);
fos.write(bos.toByteArray());
Log.info("下載文件結束:"+localFilePath);
}
}
Log.info("檢查文件是否存:"+fileName+" "+bl);
if("false".equals(bl)){
ViewUtil.dataSEErrorPerformedCommon("查詢無結果,請稍後再查詢。");
return bl;
}
return bl;
} catch (Exception e) {
throw e;
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
}
}

// 調用樣例:
public static void main(String[] args) {
try {
// 密鑰/res/20150228
// ZipUtilAll.unZip(new File(("D:/123/123.zip")), "D:/123/");
// ZipDemo1232.unZip(new File(("D:/123/123.zip")), "D:/123/");
// 明文文件路徑
String plainFilePath = "D:/req_20150204_0011.txt";
// 密文文件路徑
String secretFilePath = "req_20150204_00134.txt";
// 加密
// encodeAESFile(key, plainFilePath, secretFilePath);
fileDownloadByFtp("D://123.zip","123.zip","req/20150228");
ZipUtilAll.unZip("D://123.zip", "D:/123/李筱/");
// 解密
plainFilePath = "D:/123.sql";
// secretFilePath = "D:/test11111.sql";
// decodeAESFile(key, plainFilePath, secretFilePath);
} catch (Exception e) {
e.printStackTrace();
}
}

}

㈣ 怎麼用Java開發FTP客戶端

摘要
本文解釋了如何利用庫用Java語言編寫FTP客戶端代碼。它比較了FTP庫的一個完全列表,演示了每個庫的優點和缺點,並且幫助決策者為他們的需要選擇適當的庫。另外,本文闡述了Fa?ade模式如何在取代一個庫時改變管理。最後,作者Jean-Pierre Norguet討論並解決了由於缺乏權威性的說明書引起的一些問題。

讓我們假設一個情景:我們要編寫一個純Java應用程序,該程序必須從運行FTP伺服器的遠程計算機上下載文件。我們也通過遠程文件信息,像名字、日期、或者尺寸,來過濾下載。

自己來寫一個FTP協議處理,盡管是有可能,並且可能很有趣。但是這樣做也有可能有困難、花費長時間、並且有潛在的風險。既然我們不肯花費時間、精力、或者金錢自己來寫一個處理器,那我們推薦使用一個可重用的現有的軟體組件。萬維網上有並且大量的庫可供使用。有了一個FTP客戶端庫,下載一個文件用Java語言編寫就像下面一樣簡單:

FTPClient ftpClient = new FTPClient();

ftpClient.connect("ftp.foo.com", "user01", "pass1234");

ftpClient.download("C:\\Temp\\", "README.txt");

// Eventually other operations here ...

ftpClient.disconnect();

尋找一個適合我們需要的高質量的Java FTP客戶端庫並不像他看起來那麼簡單;它可能相當困難。要找到一個Java FTP客戶端庫需要花一些時間。接著,在我們找到所有的已存在的庫之後,我們選哪個?每個庫適合不同的需要。庫在質量上是不等的,並且它們的設計有本質的區別。每個提供一套不同的屬性和使用不同類型的行話來描述他們。

因此,計算和比較FTP客戶端庫證明是困難而且令人迷惑的。重復使用已存在的組件是一個值得推薦的過程,但在這個例子中,啟動它也是令人沮喪的。並且這有點羞愧:在選好的一個好的FTP庫之後,剩下的工作就是常式了。

本文旨在使選擇過程簡短、容易、並且有價值。我首先列出了所有的FTP客戶端庫。接著,我定義和描述了庫應該用某種方式找到的相關標準的一個表格。最後,我列出了一個總瀏覽的矩陣,該矩陣給出了庫間相互比較的過程的快速瀏覽。所有的信息提供了我們作出一個迅速、可靠、和長期的決定所需的每件事。

使用JDK(Java 開發工具集)的FTP支持
用於FTP的訪問規范是用於注釋的請求:959(RFC959)。Sun Microsystems提供了JDK的一個RFC959執行。但是它是內部的、非文檔化的、並且不提供任何資源。當RFC959在尚未公開時,它實際上是執行RFC1738、URL規范的一個公共界面的後終端。如圖1。

圖1. 使用JDK的FTP支持。

RFC1738的一個執行過程在JDK中作為標准給出。它為基本的FTP傳送做一個可推理的工作。它是公共的、文檔化的、並且提供源代碼。要使用它,我們可編寫下面語句:

URL url = new URL("ftp://user01:[email protected]/README.txt;type=i");

URLConnection urlc = url.openConnection();

InputStream is = urlc.getInputStream(); // To download

OutputStream os = urlc.getOutputStream(); // To upload

使用JDK的FTP客戶端嚴格的遵守標准推薦,但它有以下幾個說明:

它從根本上區別於第三方的FTP客戶端庫;這些執行RFC959而不是RFC1738

RFC959用大多數的桌面FTP客戶端工具執行。許多Java程序員使用這些工具連接到FTP伺服器上。作為一個嘗試,這些工具及有可能優先於類似的RFC959庫。

URL 和URLConnection類只開放用於通訊的流。Sun庫不為構造原始的FTP伺服器響應成為像String、 File、 RemoteFile、 或者 Calendar之類的更合用的Java對象而提供直接支持。所以我們不得不編寫更多的代碼,只是為了把數據寫入一個文件中或者開始一個目錄列表。

正像RFC1738的3.2部分解釋的一樣,"最優化",FTP URL在每個操作後要求關閉(控制)連接。這對於傳送許多小文件是一種浪費、並且毫無效率。而且,作了特別限制FTP伺服器可能把會這樣一個通訊開銷認為一個是惡毒的網路攻擊或者濫用而拒絕提供進一步的服務。

最後,它缺乏幾個有用的屬性。

由於以上所有或者某種原因,可優先使用一個第三方的庫。下面部分列出了可供選擇的第三方的庫。

見:http://www.javaworld.com/javaworld/jw-04-2003/ftp/jw-0404-ftptable.html

㈤ 關於JAVA FTP 客戶端程序異常

501 PORT not allowed after EPSV ALL~~~說明還是網路的問題,我對網路不熟~~~比如用ftp工具的時候,有些ftp站點必須採用被動模式才能連接。下面的你看看吧,或許有用,找網管看看應該使用哪種方式訪問

***************************************************
3. EPSV命令
EPSV請求伺服器在一個數據埠上偵聽等待連接,它可以帶參數。對它的響應是TCP埠號。響應的格式與EPRT參數的很象。這對實現上有很大的方便。而且響應還留下了網路協議和/或網路地址的空位,可以供以後使用。使用擴展地址進行被動模式的響應碼必須是229,對它的解釋如下:
2yz 主動完成
x2z 連接
xy9 進行擴展的被動模式

響應的格式如下:
<指示伺服器已經進入初擴展的被動模式>
(<d><d><d><TCP埠><d>)
包括在括弧內的字元串必須是EPRT打開數據連接的埠。具體如上所未,這里就不多說了。數據連接使用的協議必須和控制連接使用的協議和地址一致,下面是響應的一個例子:
Entering Extended Passive Mode (|||6446|)
標准錯誤代碼500和501對EPSV已經足夠了。在EPSV命令沒有使用參數時,伺服器會基於控制連接所使用的協議選擇數據連接使用的網路協議。但是在有代理的情況下,這種機制可能不合適。因此客戶也需要能夠要求一個指定協議。如果伺服器返回說明它在指定埠不支持此協議,客戶必須發送ABOR(放棄)命令使伺服器關閉連接,然後客戶再使用EPSV命令要求使用特定的網路協議,具體格式如下:
EPSV<空格><網路協議>
如果請求的網路協議是伺服器支持的,那就必須使用此協議;如果不支持,則返回522。最後,EPSV命令可以使用參數"ALL"通過網路地址翻譯器,EPRT命令不再使用。下面是例子:

EPSV<空格>ALL
接收到此命令後,伺服器要拒絕除了EPSV以外所有建立連接的命令。在下一節我們將詳細說明此命令的功能。
**********************************************************************

㈥ 如何用Java獲取遠程伺服器中指定目錄下的所有文件夾

//創建一個ftpclient對象
FTPClientfc=newFTPClient();
//創建連接
fc.connect("ip地址",埠號);
//登錄
fc.login("用戶名","密碼");
//校驗登陸
reply=fc.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)){
fc.disconnect();
}
//切換到指定地址
fc.changeWorkingDirectory("地址");
//獲取該目錄下的所有文件
FTPFile[]fs=fc.listFiles();
for(FTPFileff:fs){
System.out.println(ff.getName());
}
//注銷退出
fc.logout();

㈦ 用java寫一個sftp客戶端程序 能夠上一個sftp的目錄下載文件到本地指定目錄

不需要裝軟體,下載需要執行sftp伺服器目錄和本地目錄
你說的directory空指針,應該是你沒有指定從sftp的哪個目錄下載

㈧ 用java編寫ftp客戶端這樣的網路程序需用到Java的什麼知識

會socket編程就可以了
我給你個測試:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import sun.net.ftp.*;

//FTP連接與瀏覽

public class FtpClientDemo extends JFrame{

JTextField jtfServer; //輸入Ftp伺服器地址
JTextField jtfUser; //輸入用戶名
JPasswordField jtfPass; //輸入密碼
JButton jbConnect; //連接按鈕
JButton jbDisconnect; //斷開按鈕
JTextArea jtaShowFiles; //顯示伺服器目錄與文件
FtpClient ftpClient;

public FtpClientDemo(){
super("FTP連接與瀏覽"); //調用父類構造函數

jtfServer=new JTextField(13); //實例化組件
jtfUser=new JTextField(8);
jtfPass=new JPasswordField(8);
jbConnect=new JButton("連接");
jbDisconnect=new JButton("斷開");
jtaShowFiles=new JTextArea();

Container container=getContentPane(); //得到容器
JPanel panel=new JPanel(); //實例化面板
panel.add(new JLabel("地址")); //增加組件到面板上
panel.add(jtfServer);
panel.add(new JLabel("用戶名"));
panel.add(jtfUser);
panel.add(new JLabel("密碼"));
panel.add(jtfPass);
container.add(panel,BorderLayout.NORTH); //增加組件到容器上
JScrollPane jsp=new JScrollPane(jtaShowFiles);
container.add(jsp,BorderLayout.CENTER);
panel=new JPanel();
panel.add(jbConnect);
panel.add(jbDisconnect);
container.add(panel,BorderLayout.SOUTH);

jbConnect.addActionListener(new ActionListener(){ //連接按鈕事件處理
public void actionPerformed(ActionEvent ent){
connectServer(); //調用連接到伺服器的方法
}
});

jbDisconnect.addActionListener(new ActionListener(){ //斷開按鈕事件處理
public void actionPerformed(ActionEvent ent){
disconnectServer(); //調用斷開與伺服器連接的方法
}
});

setSize(460,260); //設置窗口尺寸
setVisible(true); //設置窗口可視
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //關閉窗口時退出程序
}

public void connectServer(){
try{
ftpClient = new FtpClient(); //實例化FtpClient對象
String serverAddr=jtfServer.getText(); //得到伺服器地址
String user=jtfUser.getText(); //得到用戶名
String pass=jtfPass.getPassword().toString(); //得到密碼
ftpClient.openServer(serverAddr); //連接到伺服器
ftpClient.login(user,pass); //在伺服器上注冊
InputStream is=ftpClient.list(); //得到伺服器目錄與文件列表輸入流
StringBuffer info=new StringBuffer(); //實例化StringBuffer對象,用於輸出信息
int ch;
while ((ch=is.read())>=0){ //未讀完列表,則繼續
info.append((char)ch); //增加信息
}
jtaShowFiles.setText(new String(info)); //顯示信息
is.close(); //關閉輸入流
}
catch (IOException ex){
JOptionPane.showMessageDialog(FtpClientDemo.this,ex.getMessage()); //顯示提示信息
ex.printStackTrace(); //在命令行窗口輸出出錯信息
}

}

public void disconnectServer(){
try{
ftpClient.closeServer(); //關閉與伺服器的連接
}
catch (IOException ex){
ex.printStackTrace();
}
}

public static void main(String[] args){
new FtpClientDemo();
}
}

㈨ 求用java寫一個ftp伺服器客戶端程序。

import java.io.*;
import java.net.*;public class ftpServer extends Thread{ public static void main(String args[]){
String initDir;
initDir = "D:/Ftp";
ServerSocket server;
Socket socket;
String s;
String user;
String password;
user = "root";
password = "123456";
try{
System.out.println("MYFTP伺服器啟動....");
System.out.println("正在等待連接....");
//監聽21號埠
server = new ServerSocket(21);
socket = server.accept();
System.out.println("連接成功");
System.out.println("**********************************");
System.out.println("");

InputStream in =socket.getInputStream();
OutputStream out = socket.getOutputStream();

DataInputStream din = new DataInputStream(in);
DataOutputStream dout=new DataOutputStream(out);
System.out.println("請等待驗證客戶信息....");

while(true){
s = din.readUTF();
if(s.trim().equals("LOGIN "+user)){
s = "請輸入密碼:";
dout.writeUTF(s);
s = din.readUTF();
if(s.trim().equals(password)){
s = "連接成功。";
dout.writeUTF(s);
break;
}
else{s ="密碼錯誤,請重新輸入用戶名:";<br> dout.writeUTF(s);<br> <br> }
}
else{
s = "您輸入的命令不正確或此用戶不存在,請重新輸入:";
dout.writeUTF(s);
}
}
System.out.println("驗證客戶信息完畢...."); while(true){
System.out.println("");
System.out.println("");
s = din.readUTF();
if(s.trim().equals("DIR")){
String output = "";
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
for(int i=0;i<dirStructure.length;i++){
output +=dirStructure[i]+"\n";
}
s=output;
dout.writeUTF(s);
}
else if(s.startsWith("GET")){
s = s.substring(3);
s = s.trim();
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
String e= s;
int i=0;
s ="不存在";
while(true){
if(e.equals(dirStructure[i])){
s="存在";
dout.writeUTF(s);
RandomAccessFile outFile = new RandomAccessFile(initDir+"/"+e,"r");
byte byteBuffer[]= new byte[1024];
int amount;
while((amount = outFile.read(byteBuffer)) != -1){
dout.write(byteBuffer, 0, amount);break;
}break;

}
else if(i<dirStructure.length-1){
i++;
}
else{
dout.writeUTF(s);
break;
}
}
}
else if(s.startsWith("PUT")){
s = s.substring(3);
s = s.trim();
RandomAccessFile inFile = new RandomAccessFile(initDir+"/"+s,"rw");
byte byteBuffer[] = new byte[1024];
int amount;
while((amount =din.read(byteBuffer) )!= -1){
inFile.write(byteBuffer, 0, amount);break;
}
}
else if(s.trim().equals("BYE"))break;
else{
s = "您輸入的命令不正確或此用戶不存在,請重新輸入:";
dout.writeUTF(s);
}
}

din.close();
dout.close();
in.close();
out.close();
socket.close();
}
catch(Exception e){
System.out.println("MYFTP關閉!"+e);

}
}}

㈩ FTP客戶端程序設計(java)

mina.apache.org 伺服器端,客戶端都有!開源的!

熱點內容
路由器管理密碼是什麼忘了怎麼辦 發布:2025-01-19 20:34:35 瀏覽:427
java方法定義 發布:2025-01-19 20:20:50 瀏覽:404
kr腳本 發布:2025-01-19 20:17:41 瀏覽:518
幫我開啟存儲 發布:2025-01-19 20:17:39 瀏覽:813
s9存儲縮水 發布:2025-01-19 20:08:06 瀏覽:335
2b2t的伺服器編號是什麼 發布:2025-01-19 19:58:55 瀏覽:874
androidstudio下載與安裝 發布:2025-01-19 19:58:14 瀏覽:560
拉鉤演算法 發布:2025-01-19 19:58:14 瀏覽:866
python中讀取文件 發布:2025-01-19 19:37:26 瀏覽:369
網吧電腦連接到steam伺服器錯誤 發布:2025-01-19 19:37:17 瀏覽:602