A. java實現ftp斷點續傳問題
//嘗試移動文件內讀取指針,實現斷點續傳
result
=
uploadFile(remoteFileName,
f,
ftpClient,
remoteSize);
//如果斷點續傳沒有成功,則刪除伺服器上文件,重新上傳
if(result
==
UploadStatus.Upload_From_Break_Failed){
if(!ftpClient.deleteFile(remoteFileName)){
return
UploadStatus.Delete_Remote_Faild;
}
result
=
uploadFile(remoteFileName,
f,
ftpClient,
0);
}
B. java實現ftp的斷點續傳問題
//嘗試移動文件內讀取指針,實現斷點續傳
result = uploadFile(remoteFileName, f, ftpClient, remoteSize);
//如果斷點續傳沒有成功,則刪除伺服器上文件,重新上傳
if(result == UploadStatus.Upload_From_Break_Failed){
if(!ftpClient.deleteFile(remoteFileName)){
return UploadStatus.Delete_Remote_Faild;
}
result = uploadFile(remoteFileName, f, ftpClient, 0);
}
C. java ftp客戶端主動模式(port)下的源代碼
維護一個ftp的伺服器列表,包含ip埠用戶名密碼
定時的遞歸掃描每個ftp伺服器的目錄和文件,保存到本地資料庫
搜索的時候,從本地資料庫查詢
至於java訪問ftp伺服器的方法,已經有很多現成的實現
比如www.apache.org的commons-net里就有
有的版本的sun jdk自身就帶
D. java如何測試連接ftp是否通
java測試連接ftp是否連通可以使用判斷是否有異常來決定,實例如下:
/**
*connectServer
*連接ftp伺服器
*@throwsjava.io.IOException
*@parampath文件夾,空代表根目錄
*@parampassword密碼
*@paramuser登陸用戶
*@paramserver伺服器地址
*/
publicvoidconnectServer(Stringserver,Stringuser,Stringpassword,Stringpath)
throwsIOException
{
//server:FTP伺服器的IP地址;user:登錄FTP伺服器的用戶名
//password:登錄FTP伺服器的用戶名的口令;path:FTP伺服器上的路徑
ftpClient=newFtpClient();
ftpClient.openServer(server);
ftpClient.login(user,password);
//path是ftp服務下主目錄的子目錄
if(path.length()!=0)ftpClient.cd(path);
//用2進制上傳、下載
ftpClient.binary();
}
/**
*upload
*上傳文件
*@throwsjava.lang.Exception
*@return-1文件不存在
*-2文件內容為空
*>0成功上傳,返迴文件的大小
*@paramnewname上傳後的新文件名
*@paramfilename上傳的文件
*/
publiclongupload(Stringfilename,Stringnewname)throwsException
{
longresult=0;
TelnetOutputStreamos=null;
FileInputStreamis=null;
try{
java.io.Filefile_in=newjava.io.File(filename);
if(!file_in.exists())return-1;
if(file_in.length()==0)return-2;
os=ftpClient.put(newname);
result=file_in.length();
is=newFileInputStream(file_in);
byte[]bytes=newbyte[1024];
intc;
while((c=is.read(bytes))!=-1){
os.write(bytes,0,c);
}
}finally{
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
}
returnresult;
}
/**
*upload
*@throwsjava.lang.Exception
*@return
*@paramfilename
*/
publiclongupload(Stringfilename)
throwsException
{
Stringnewname="";
if(filename.indexOf("/")>-1)
{
newname=filename.substring(filename.lastIndexOf("/")+1);
}else
{
newname=filename;
}
returnupload(filename,newname);
}
/**
*download
*從ftp下載文件到本地
*@throwsjava.lang.Exception
*@return
*@paramnewfilename本地生成的文件名
*@paramfilename伺服器上的文件名
*/
publiclongdownload(Stringfilename,Stringnewfilename)
throwsException
{
longresult=0;
TelnetInputStreamis=null;
FileOutputStreamos=null;
try
{
is=ftpClient.get(filename);
java.io.Fileoutfile=newjava.io.File(newfilename);
os=newFileOutputStream(outfile);
byte[]bytes=newbyte[1024];
intc;
while((c=is.read(bytes))!=-1){
os.write(bytes,0,c);
result=result+c;
}
}catch(IOExceptione)
{
e.printStackTrace();
}
finally{
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
}
returnresult;
}
/**
*取得某個目錄下的所有文件列表
*
*/
publicListgetFileList(Stringpath)
{
Listlist=newArrayList();
try
{
DataInputStreamdis=newDataInputStream(ftpClient.nameList(path));
Stringfilename="";
while((filename=dis.readLine())!=null)
{
list.add(filename);
}
}catch(Exceptione)
{
e.printStackTrace();
}
returnlist;
}
/**
*closeServer
*斷開與ftp伺服器的鏈接
*@throwsjava.io.IOException
*/
publicvoidcloseServer()
throwsIOException
{
try
{
if(ftpClient!=null)
{
ftpClient.closeServer();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args)throwsException
{
FtpUtilftp=newFtpUtil();
try{
//連接ftp伺服器
ftp.connectServer("10.163.7.15","cxl","1","info2");
/**上傳文件到info2文件夾下*/
System.out.println("filesize:"+ftp.upload("f:/download/Install.exe")+"位元組");
/**取得info2文件夾下的所有文件列表,並下載到E盤下*/
Listlist=ftp.getFileList(".");
for(inti=0;i<list.size();i++)
{
Stringfilename=(String)list.get(i);
System.out.println(filename);
ftp.download(filename,"E:/"+filename);
}
}catch(Exceptione){
///
}finally
{
ftp.closeServer();
}
}
}
E. 求每日定時在伺服器的FTP上取數據文件的源碼(JAVA)
這個是可以向伺服器端發送文字的程序,就是在客戶端發送一句hello在伺服器也可以接受到hello,這個程序可以修改一下就可以了。具體修改方法是增加一個定時器,然後把字元流改成位元組流,現在有點忙,你先研究啊,近兩天幫你寫寫看。
伺服器端:
import java.net.*;
import java.io.*;
public class DateServer {
public static void main(String[] args) {
ServerSocket server=null;
try{
server=new ServerSocket(6666);
System.out.println(
"Server start on port 6666...");
while(true){
Socket socket=server.accept();
new SocketHandler(socket).start();
/*
PrintWriter out=new PrintWriter(
new OutputStreamWriter(
socket.getOutputStream()
)
);
out.println(new java.util.Date().toLocaleString());
out.close();
*/
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(server!=null) {
try{
server.close();
}catch(Exception ex){}
}
}
}
}
class SocketHandler extends Thread {
private Socket socket;
public SocketHandler(Socket socket) {
this.socket=socket;
}
public void run() {
try{
PrintWriter out=new PrintWriter(
new OutputStreamWriter(
socket.getOutputStream()
)
);
out.println(
new java.util.Date().
toLocaleString());
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
客戶端:
package com.briup;
import java.io.*;
import java.net.*;
public class FtpClient {
public static void main(String[] args) {
if(args.length==0) {
System.out.println("Usage:java FtpClient file_path");
System.exit(0);
}
File file=new File(args[0]);
if(!file.exists()||!file.canRead()) {
System.out.println(args[0]+" doesn't exist or can not read.");
System.exit(0);
}
Socket socket=null;
try{
socket=new Socket(args[1],Integer.parseInt(args[2]));
BufferedInputStream in=new BufferedInputStream(
new FileInputStream(file)
);
BufferedOutputStream out=new BufferedOutputStream(
socket.getOutputStream()
);
byte[] buffer=new byte[1024*8];
int i=-1;
while((i=in.read(buffer))!=-1) {
out.write(buffer,0,i);
}
System.out.println(socket.getInetAddress().getHostAddress()+" send file over.");
in.close();
out.close();
}catch(Exception e){
e.printStackTrace();
}finally{
if(socket!=null) {
try{
socket.close();
}catch(Exception ex){}
}
}
}
}
F. 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;
}
}
G. java中怎麼實現ftp伺服器
我知道apache有個commons net包,其中的FTPClient類可以實現客戶端和服務之間的文件傳輸,但是我如果使用這種方式的話,就得將一台伺服器上的文件傳到我本地,再將這個文件傳到另一台伺服器上,感覺這中間多了一步操作;
H. 諸位大神誰有java 實現FTP客戶端的源碼
您好,/ **
*創建日期:2008年12月23日
*類名:Ftp.java
*類路徑:組織結構
*更改日誌:
* / 包組織結構;
進口的java.io.File;
進口java.io.FileInputStream中;
進口java.io.FileOutputStream中;
進口的java。 io.IOException;
進口sun.net.TelnetInputStream;
進口sun.net.TelnetOutputStream;
進口sun.net.ftp.FtpClient;
> / **
* @作者南山地獄
* @說明FTP操作
* /
公共類的Ftp {
/ **
* BR />獲取FTP目錄* / 公共無效getftpList(){
字元串伺服器=「IP地址 /輸入FTP伺服器/>弦樂用戶=」「;/ / FTP伺服器的登錄用戶名
字元串密碼=「」;/ /登錄FTP伺服器的用戶名
字元串路徑密碼=「」;/ / FTP路徑上的伺服器
嘗試{
> FtpClient的FTP客戶端=新FtpClient的();/ /創建FtpClient的對象
ftpClient.openServer(伺服器);/ /連接到FTP伺服器
ftpClient.login(用戶名,密碼);/ / FTP伺服器 BR />如果(path.length()= 0){
ftpClient.cd(路徑);
}
TelnetInputStream是= ftpClient.list();
詮釋三;
而{
System.out.print((char)的C)((C = is.read())= -1!);
}
掉} is.close ();
ftpClient.closeServer();/ /退出FTP伺服器
}趕上(IOException異常前){
System.out.println(ex.getMessage());
}
}
/ **
*
* /
公共無效getFtpFile(){
字元串伺服器=「」;/ / IP地址中輸入FTP伺服器
弦樂用戶=「」;/ / FTP伺服器的登錄用戶名
字元串密碼=「」;/ /登錄密碼為FTP伺服器的用戶名
字元串路徑=「路徑
字元串文件名「;/ /上=的FTP伺服器」「;/ /下載文件名稱
嘗試{
FtpClient的FTP客戶端=新FtpClient的();
ftpClient.openServer(伺服器);
ftpClient.login(用戶名,密碼);
如果(路徑。長度()= 0)
ftpClient.cd(路徑);!
ftpClient.binary();
TelnetInputStream是= ftpClient.get(文件名);
文件file_out =新的文件(文件名);
文件輸出流OS =新的文件輸出流(file_out);
位元組[]位元組=新位元組[1024];
詮釋三;
而((C = is.read(位元組))= -1){
os.write (位元組,0,C);
}!
掉} is.close();
os.close();
ftpClient.closeServer();
}趕上(IOException異常前){
System.out.println (ex.getMessage());
}
FTP}
/ **
*文件上傳到FTP
* /
公共無效putFtpFile() {
字元串伺服器=「」;/ /輸入IP地址對伺服器
字元串用戶的地址=「」;/ / FTP伺服器的登錄用戶名
字元串密碼=「」;/ / FTP伺服器登錄用戶名密碼
字元串路徑=「」就 / FTP伺服器/>字元串文件名=「」;/ /上傳的文件名
FtpClient的FTP客戶端=新的try { FtpClient的();
ftpClient.openServer(伺服器);
ftpClient.login(用戶名,密碼);
如果(!path.length()= 0)
ftpClient.cd (路徑);
ftpClient.binary();
TelnetOutputStream OS = ftpClient.put(文件名);
文件file_in =新的文件(文件名);
文件輸入流是=新的文件輸入流(file_in);
位元組[]位元組=新位元組[1024];
詮釋三;
同時(! (C = is.read(位元組))= -1){
操作系統。寫(位元組,0,C);
}
掉} is.close();
os.close();
ftpClient.closeServer();
}趕上(IOException異常前){
System.out.println(ex.getMessage());
}
}
}
I. 給出一個C++或Java編寫的ftp伺服器程序
給你一個MFC寫的:
// FtpClient.h: interface for the CFtpServer class.
//
#if !defined(_FTPCLIENT_H)
#define _FTPCLIENT_H
#include <afxinet.h>
class CFtpClient
{
//構造/析構函數
public:
CFtpClient(const char *pszFtpIp, const char *pszFtpPort, const char *pszFtpUser, const char *pszFtpPassWord);
//功能:構造函數
//參數:pszFtpIp---------Ftp伺服器IP地址
// pszFtpPort-------Ftp伺服器埠
// pszFtpUser-------Ftp用戶名
// pszFtpPassWord---Ftp用戶密碼
//返回值:無
virtual ~CFtpClient();
//功能:析構函數
//參數:無
//返回值:無
//公有成員函數
public:
BOOL ConnectFtpServer();
//功能:連接FTP伺服器
//參數:無
//返回值:TRUE--連接成功,FALSE--連接失敗
void DisConnectFtpServer();
//功能:斷開與FTP伺服器的連接
//參數:無
//返回值:無
BOOL PutFileToFtpServer(const char *pszFilePath);
//功能:上傳指定的文件到FTP伺服器
//參數:要上傳的文件名
//返回值:TRUE--連接成功,FALSE--連接失敗
BOOL GetFileFromFtpServer(const char *pszFilePath);
//功能:從FTP伺服器下載指定文件
//參數:要下載的文件名
//返回值:TRUE--連接成功,FALSE--連接失敗
CString GetUpLoadFilePath();
//功能:得到上傳文件名
//參數:無
//返回值:得到的當前路徑
//私有成員變數
private:
char m_szFtpIp[20]; //Ftp伺服器IP地址
UINT m_uFtpPort; //Ftp伺服器埠
char m_szFtpUser[20]; //Ftp用戶名
char m_szFtpPassWord[20]; //Ftp用戶密碼
CInternetSession *m_pInetSession; //Internet會話對象指針
CFtpConnection *m_pFtpConnection; //FTP服務連接對象指針
};
#endif
// FtpClient.cpp: implementation of the CFtpServer class.
//
#include "FtpClient.h"
CFtpClient::CFtpClient(const char *pszFtpIp, const char *pszFtpPort, const char *pszFtpUser,const char *pszFtpPassWord)
{
strcpy(m_szFtpIp, pszFtpIp);
m_uFtpPort = atoi(pszFtpPort);
strcpy(m_szFtpUser, pszFtpUser);
strcpy(m_szFtpPassWord, pszFtpPassWord);
m_pInetSession = NULL;
m_pFtpConnection = NULL;
}
CFtpClient::~CFtpClient()
{
}
BOOL CFtpClient::ConnectFtpServer()
{
//創建Internet會話
m_pInetSession = new CInternetSession(AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS);
try
{
//連接Ftp伺服器
m_pFtpConnection = m_pInetSession->GetFtpConnection(m_szFtpIp, m_szFtpUser, m_szFtpPassWord, m_uFtpPort);
}
catch(CInternetException *pEx)
{
char szError[1024];
pEx->GetErrorMessage(szError, 1024);
pEx->Delete();
CLog Log;
Log.RecordLog("連接Ftp伺服器", CString("9999"), CString(szError));
return FALSE;
}
return TRUE;
}
void CFtpClient::DisConnectFtpServer()
{
if(m_pFtpConnection != NULL)
{
m_pFtpConnection->Close();
delete m_pFtpConnection;
m_pFtpConnection = NULL;
}
if(m_pInetSession !=NULL)
{
m_pInetSession->Close();
delete m_pInetSession;
m_pInetSession = NULL;
}
}
BOOL CFtpClient::PutFileToFtpServer(const char *pszFilePath)
{
//1. 判斷伺服器是否連接
if(m_pFtpConnection == NULL)
{
return FALSE;
}
char szLocalFile[200] = {0};
char szRemoteFile[200] = {0};
//2. 本地文件名
sprintf(szLocalFile, "%s", pszFilePath);
//3. 遠程文件名
char szDrive[10] = {0};
char szDir[210] = {0};
char szFileName[70] = {0};
char szExt[10] = {0};
_splitpath(pszFilePath, szDrive, szDir, szFileName, szExt);
sprintf(szRemoteFile, "%s\\%s.%s", g_strEnterpriseID, szFileName, szExt);
//4. 文件上傳
if(!m_pFtpConnection->PutFile(szLocalFile, szRemoteFile))
{
return FALSE;
}
return TRUE;
}
BOOL CFtpClient::GetFileFromFtpServer(const char *pszFilePath)
{
//1. 判斷伺服器是否連接
if(m_pFtpConnection == NULL)
{
return FALSE;
}
char szLocalFile[200] = {0};
char szRemoteFile[200] = {0};
//2. 本地文件名
sprintf(szLocalFile,"%s",pszFilePath);
//3. 遠程文件名
char szDrive[10] = {0};
char szDir[210] = {0};
char szFileName[70] = {0};
char szExt[10] = {0};
_splitpath(pszFilePath, szDrive, szDir, szFileName, szExt);
sprintf(szRemoteFile, "%s\\%s.%s", g_strEnterpriseID, szFileName, szExt);
//4. 文件下載
if(!m_pFtpConnection->GetFile(szRemoteFile, szLocalFile))
{
return FALSE;
}
return TRUE;
}
CString CFtpClient::GetUpLoadFilePath()
{
CString strPath = "", strDir = "";
//得到當前日期
CTime time = CTime::GetCurrentTime();
CString strDate = time.Format("%Y%m%d");
//得到上傳文件路徑
char filepath[MAX_PATH];
GetMoleFileName(NULL, filepath, MAX_PATH);
strDir.Format("%s", filepath);
strPath = strDir.Left(strDir.ReverseFind('\\')) + strDate + "\\*.txt";
return strPath;
}
//保存成兩個文件,然後添加到你的工程中就可以調用了。
J. java ftp怎麼實現java ftp方式的斷點續傳
運用類的辦法,編程人員能夠長途登錄到FTP伺服器,羅列該伺服器上的目錄,設置傳輸協議,以及傳送文件。FtpClient類涵 蓋了簡直一切FTP的功用,FtpClient的實例變數保留了有關樹立"署理"的各種信息。下面給出了這些實例變數:
public static boolean useFtpProxy
這個變數用於標明FTP傳輸過程中是不是運用了一個署理,因此,它實際上是一個符號,此符號若為TRUE,標明運用了一個署理主機。
public static String ftpProxyHost
此變數只要在變數useFtpProxy為TRUE時才有用,用於保留署理主機名。
public static int ftpProxyPort
此變數只要在變數useFtpProxy為TRUE時才有用,用於保留署理主機的埠地址。
FtpClient有三種不同方式的結構函數,如下所示:
1、public FtpClient(String hostname,int port)
此結構函數運用給出的主機名和埠號樹立一條FTP銜接。
2、public FtpClient(String hostname)
此結構函數運用給出的主機名樹立一條FTP銜接,運用默許埠號。
3、FtpClient()
此結構函數將創立一FtpClient類,但不樹立FTP銜接。這時,FTP銜接能夠用openServer辦法樹立。
一旦樹立了類FtpClient,就能夠用這個類的辦法來翻開與FTP伺服器的銜接。類ftpClient供給了如下兩個可用於翻開與FTP伺服器之間的銜接的辦法。
public void openServer(String hostname)
這個辦法用於樹立一條與指定主機上的FTP伺服器的銜接,運用默許埠號。