java ftp删除存放在linux上的文件,Java 使用ftp的方式上传文件到linux,并实现删除,下载...

本文详细介绍了在使用FTP进行文件上传和下载时遇到的530错误、230错误、425错误及553错误的分析与解决方法,包括修改配置、设置被动模式等步骤。同时提到了更安全但效率较低的SFTP协议,提供了一段FTP上传文件的Java代码示例,并给出了下载文件的方法。
摘要由CSDN通过智能技术生成

连接条件:1.主机

2.端口(注意端口不是22,22为ssh默认端口,一般为21,或者20)

3.用户名和密码

一切准备就绪,执行代码发现执行失败报530错误,拒绝连接

错误分析:

用户名或者密码错误

linux没有安装ftp,或者ftp没有启动。ps -ef | grep ftp

linux默认root用户没有权限

修改方式:1.

vi /etc/vsftpd/ftpusers 将root那一行注释

2.vi /etc/vsftpd/user_list 将root那行注释

4.service vsftpd restart 重启服务

然后,运行代码,发现返回230,证明连接linux成功

执行代码,向linux上传文件发现返回值为false

查看错误原因以及描述:ftp失败不会报任何异常

要注意使用System.

out.println(ftpClient.getReplyCode());

System.

out.println(ftpClient.getReplyString());

勤看返回代码以及原因描述。

执行代码发现,上传失败,错误代码425

第一步:

ftpClient.enterLocalPassiveMode();

将ftp上传的模式变为被动模式

执行代码,发现还是失败,查看错误码为553

解决办法:1、设置selinux

vi /etc/sysconfig/selinux

将其中的SELINUX=enforcing改为SELINUX=disabled

2、设置如下

setsebool -P allow_ftpd_full_access 1

执行代码,问题解决。

上传文件还有sftp:顾名思义,s为安全,sftp比ftp安全好多,但是效率比ftp低好多,具体看需求选择方式

上代码;

packagecom.example.demo.linux.test;

importorg.apache.commons.net.ftp.FTP;

importorg.apache.commons.net.ftp.FTPClient;

importorg.apache.commons.net.ftp.FTPFile;

importorg.apache.commons.net.ftp.FTPReply;

importjava.io.*;

importjava.net.SocketException;

public classFtpUtils {

/**

* Description: 向FTP服务器上传文件

*

@param

host

FTP服务器hostname

*

@param

port

FTP服务器端口

*

@param

username

FTP登录账号

*

@param

password

FTP登录密码

*

@param

basePath

FTP服务器基础目录

*

@param

filePath

FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath

*

@param

filename

上传到FTP服务器上的文件名

*

@param

input

输入流

*

@return

成功返回true,否则返回false

*/

public static booleanuploadFile(String host,

intport, String username, String password, String basePath,

String filePath, String filename, InputStream input) {

//创建ftp客户端

FTPClient ftpClient =

newFTPClient();

ftpClient.setControlEncoding(

"UTF-8");

try{

//链接ftp服务器

ftpClient.connect(host, port);

//登录ftp

ftpClient.login(username, password);

intreply = ftpClient.getReplyCode();

System.

out.println(reply);

//如果reply返回230就算成功了,如果返回530密码用户名错误或当前用户无权限下面有详细的解释。

if(!FTPReply.

isPositiveCompletion(reply)) {

ftpClient.disconnect();

return false;

}

ftpClient.setFileType(FTPClient.

BINARY_FILE_TYPE);

ftpClient.enterLocalPassiveMode();

//设置ftp为被动模式

if(ftpClient.changeWorkingDirectory(basePath)){

String[] split = filePath.split(

"/");

for(String s : split) {

ftpClient.makeDirectory(s);

ftpClient.changeWorkingDirectory(s);

}

}

else{

return false;

}

// ftpClient.makeDirectory("path");//在root目录下创建文件夹

//ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);

// ftpClient.enterLocalPassiveMode();

System.

out.println(ftpClient.getReplyCode());

System.

out.println(ftpClient.getReplyString());

booleanb = ftpClient.storeFile(filename, input);

//文件你若是不指定就会上传到root目录下

System.

out.println(ftpClient.getReplyCode());

System.

out.println(ftpClient.getReplyString());

System.

out.println(b);

// ftpClient.makeDirectory("abc");

String s = ftpClient.printWorkingDirectory();

System.

out.println(s);

FTPFile[] ftpFiles = ftpClient.listDirectories();

for(FTPFile ftpFile : ftpFiles) {

System.

out.println(ftpFile.getName());

}

input.close();

ftpClient.logout();

if(b){

return true;

}

}

catch(SocketException e) {

e.printStackTrace();

}

catch(IOException e) {

e.printStackTrace();

}

finally

{

if(ftpClient.isConnected())

{

try

{

ftpClient.disconnect();

}

catch(IOException ioe)

{

ioe.printStackTrace();

}

}

}

return false;

}

/**

* Description: 从FTP服务器下载文件

*

@param

host

FTP服务器hostname

*

@param

port

FTP服务器端口

*

@param

username

FTP登录账号

*

@param

password

FTP登录密码

*

@param

remotePath

FTP服务器上的相对路径

*

@param

fileName

要下载的文件名

*

@param

localPath

下载后保存到本地的路径

*

@return

*/

public static booleandownloadFile(String host,

intport, String username, String password, String remotePath,

String fileName, String localPath) {

//创建ftp客户端

FTPClient ftpClient =

newFTPClient();

ftpClient.setControlEncoding(

"UTF-8");

try{

//链接ftp服务器

ftpClient.connect(host, port);

//登录ftp

ftpClient.login(username, password);

intreply = ftpClient.getReplyCode();

System.

out.println(reply);

//如果reply返回230就算成功了,如果返回530密码用户名错误或当前用户无权限下面有详细的解释。

if(!FTPReply.

isPositiveCompletion(reply)) {

ftpClient.disconnect();

return false;

}

ftpClient.setFileType(FTPClient.

BINARY_FILE_TYPE);

ftpClient.enterLocalPassiveMode();

//设置ftp为被动模式

if(ftpClient.changeWorkingDirectory(remotePath)) {

}

else{

return false;

}

// ftpClient.deleteFile("");删除文件

FTPFile[] ftpFiles = ftpClient.listFiles();

for(FTPFile ftpFile : ftpFiles) {

if(ftpFile.getName().equalsIgnoreCase(fileName)) {

File localFile =

newFile(localPath +

"/"+ fileName);

OutputStream is =

newFileOutputStream(localFile);

booleanb = ftpClient.retrieveFile(ftpFile.getName(), is);

if(b) {

return true;

}

is.close();

}

}

ftpClient.logout();

}

catch(SocketException e) {

e.printStackTrace();

}

catch(IOException e) {

e.printStackTrace();

}

finally{

if(ftpClient.isConnected()) {

try{

ftpClient.disconnect();

}

catch(IOException ioe) {

ioe.printStackTrace();

}

}

}

return false;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值