首页编程java编程java访问ftp是什么协议?如何用java连接到ftp上

java访问ftp是什么协议?如何用java连接到ftp上

编程之家2023-10-13105次浏览

其实java访问ftp是什么协议的问题并不复杂,但是又很多的朋友都不太了解如何用java连接到ftp上,因此呢,今天小编就来为大家分享java访问ftp是什么协议的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

java访问ftp是什么协议?如何用java连接到ftp上

如何用java连接到ftp上

现在已经封装好了的方法,不需要任何其他知识即可连接的。只需要知道ftp登录用户名、密码、端口、存储路径即可。

package zn.ccfccb.util;

import hkrt.b2b.view.util.Log;

java访问ftp是什么协议?如何用java连接到ftp上

import hkrt.b2b.view.util.ViewUtil;

import java.io.ByteArrayOutputStream;

import java.io.FileInputStream;

java访问ftp是什么协议?如何用java连接到ftp上

import java.io.FileOutputStream;

import java.io.InputStream;

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

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

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);

}

java 连接ftp是主动模式还是被动模式

一.FTP的PORT(主动模式)和PASV(被动模式)

1.

PORT(主动模式)

PORT中文称为主动模式,工作的原理:

FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送

PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据.

2.

PASV(被动模式)

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器,

服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端,

客户端再连接到服务器开放的端口进行数据传输。

二.两种模式的比较

从上面的运行原来看到,主动模式和被动模式的不同简单概述为:

主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。

主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

被动模式只需要服务器端开放端口给客户端连接就行了。

三.不同工作模式的网络设置

实际项目中碰到的问题是,FTP的客户端和服务器分别在不同网络,两个网络之间有至少4层的防火墙,服务器端只开放了21端口,

客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。

由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放随机端口在

50000-60000之间(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端50000-60000之间的端口端。

主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段。

四.如何设置

工作模式

实时上FTP服务器一般都支持主动和被动模式,连接采用何种模式是有FTP客户端软件决定。

Java的ftp操作方法有哪几种

FTP(File Transfer Protocol)是 Internet上用来传送文件的协议(文件传输协议)。它是为了我们能够在 Internet上互相传送文件而制定的的文件传送标准,规定了 Internet上文件如何传送。也就是说,通过 FTP协议,我们就可以跟 Internet上的 FTP服务器进行文件的上传(Upload)或下载(Download)等动作。

和其他 Internet应用一样,FTP也是依赖于客户程序/服务器关系的概念。在 Internet上有一些网站,它们依照 FTP协议提供服务,让网友们进行文件的存取,这些网站就是 FTP服务器。网上的用户要连上 FTP服务器,就要用到 FPT的客户端软件,通常 Windows都有“ftp”命令,这实际就是一个命令行的 FTP客户程序,另外常用的 FTP客户程序还有 CuteFTP、Ws_FTP、FTP Explorer等。

要连上 FTP服务器(即“登陆”),必须要有该 FTP服务器的帐号。如果是该服务器主机的注册客户,你将会有一个 FTP登陆帐号和密码,就凭这个帐号密码连上该服务器。但 Internet上有很大一部分 FTP服务器被称为“匿名”(Anonymous)FTP服务器。这类服务器的目的是向公众提供文件拷贝服务,因此,不要求用户事先在该服务器进行登记注册。

Anonymous(匿名文件传输)能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“anonymous”和“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将Emai1地址作为口令,以便更好地对访问进行跟综。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载(download)文件,而不允许上载(upload)文件。也就是说,用户只能从匿名FTP主机拷贝需要的文件而不能把文件拷贝到匿名FTP主机。另外,匿名FTP主机还采用了其他一些保护措施以保护自己的文件不至于被用户修改和删除,并防止计算机病毒的侵入。在具有图形用户界面的 WorldWild Web环境于1995年开始普及以前,匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名PTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息,数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录获取所需的信息资料。虽然目前使用WWW环境已取代匿名FTP成为最主要的信息查询方式,但是匿名FTP仍是 Internet上传输分发软件的一种基本方法

好了,关于java访问ftp是什么协议和如何用java连接到ftp上的问题到这里结束啦,希望可以解决您的问题哈!

史莱克七怪的 史莱克七怪的身高java中leftpad什么意思(java中String[][] 是什么东西string[]又是什么东西)