Java 使用ftp的方式上传文件到linux,并实现删除,下载
来源:互联网 发布:led胸牌软件 编辑:程序博客网 时间:2024/05/21 07:14
连接条件: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服务器上传文件
*@paramhostFTP服务器hostname
*@paramportFTP服务器端口
*@paramusernameFTP登录账号
*@parampasswordFTP登录密码
*@parambasePathFTP服务器基础目录
*@paramfilePathFTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
*@paramfilename上传到FTP服务器上的文件名
*@paraminput输入流
*@return成功返回true,否则返回false
*/
public static boolean uploadFile(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服务器下载文件
*@paramhostFTP服务器hostname
*@paramportFTP服务器端口
*@paramusernameFTP登录账号
*@parampasswordFTP登录密码
*@paramremotePathFTP服务器上的相对路径
*@paramfileName要下载的文件名
*@paramlocalPath下载后保存到本地的路径
*@return
*/
public static boolean downloadFile(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;
}
}
阅读全文
0 0
- Java 使用ftp的方式上传文件到linux,并实现删除,下载
- JAVA实现FTP服务器文件的上传,下载,删除功能
- 上传文件到ftp 并下载,或删除
- java实现FTP操作--上传,下载,删除文件
- Java连接FTP服务器,并上传或下载以及删除ftp服务器中的文件
- java上传、下载、删除ftp文件
- java测试FTP服务器的上传、下载、删除文件
- Java实现FTP服务器的上传、下载、删除、查看文件列表
- java实现ftp下文件的上传、下载和删除
- linux下用java实现ftp上传、下载文件
- java 上传 下载 文件到FTP服务器
- FTP方式的文件上传和下载
- java ftp实现文件上传和删除
- JAVA Ftp实现文件上传于下载
- Java实现FTP文件上传与下载
- Java实现FTP文件上传与下载
- Java实现FTP文件上传与下载
- Java实现FTP文件上传与下载
- Java IO(一):IO和File
- 自定义二级列表
- PicSelectAndShow图片选择框架
- 网络端口号汇总
- CSS:移动端实现垂直居中的方法
- Java 使用ftp的方式上传文件到linux,并实现删除,下载
- hadoop全分布式集群:配置主从节点之间的免密登录
- IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
- 进制转换
- pyvcf 模块
- Linux目录结构详细介绍
- C++内存管理 RAII
- iOS好使的各种文件文档、音乐、视频下载查看器有进度条
- 旅行悟出来的道理