记录:Java上传文件到FTP服务器代码以及问题
2021/10/21 14:39:28
本文主要是介绍记录:Java上传文件到FTP服务器代码以及问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java代码参考的https://www.jianshu.com/p/44d9b05691a8大佬的代码,场景是原项目测试时期是存储文件到本地的,但是部署服务器之后有FTP文件服务器存在,需要将原本的代码更改为上传到ftp的代码。
1、是有多个pom文件的项目需要把maven放在最外面一层的pom文件里面,不然会出现依赖循环问题。
2、不能在ftp上创建文件夹的问题,可能存在已经创建好的根目录的文件所属用户不是ftp的使用者用户。需要 chown 用户 目录或文件名,更改文件夹拥有者。
接下来是使用到的代码部分:
1、pom依赖
<!--commons-net --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</version> </dependency>
2、FTP工具类
package www.hrabbit.cn.util; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import java.io.*; import java.net.MalformedURLException; /** * @Auther: hrabbit * @Date: 2018-04-21 下午12:35 * @Description: */ public class FTPUtils { public static FTPClient ftpClient = null; /** * 初始化ftp服务器 */ public static void initFtpClient(String hostname,String username,String password,Integer port) { ftpClient = new FTPClient(); ftpClient.setControlEncoding("utf-8"); try { //连接ftp服务器 ftpClient.connect(hostname, port); //登录ftp服务器 ftpClient.login(username, password); //是否成功登录服务器 int replyCode = ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(replyCode)){ System.out.println("ftp服务器登录成功"); } }catch (MalformedURLException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } /** * 上传文件 * @param pathname ftp服务保存地址 * @param fileName 上传到ftp的文件名 * @param inputStream 输入文件流 * @return */ public static boolean uploadFile(String hostname,String username,String password,Integer port, String pathname, String fileName,InputStream inputStream){ boolean flag = false; try{ System.out.println("开始上传文件"); initFtpClient(hostname,username,password,port); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); CreateDirecroty(pathname); ftpClient.makeDirectory(pathname); ftpClient.setControlEncoding("utf-8"); ftpClient.storeFile(fileName, inputStream); System.out.println("上传结束"); inputStream.close(); ftpClient.logout(); flag = true; System.out.println("上传文件成功"); }catch (Exception e) { System.out.println("上传文件失败"); e.printStackTrace(); }finally{ if(ftpClient.isConnected()){ try{ ftpClient.disconnect(); }catch(IOException e){ e.printStackTrace(); } } if(null != inputStream){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; } //改变目录路径 public static boolean changeWorkingDirectory(String directory) { boolean flag = true; try { flag = ftpClient.changeWorkingDirectory(directory); if (flag) { System.out.println("进入文件夹" + directory + " 成功!"); } else { System.out.println("进入文件夹" + directory + " 失败!开始创建文件夹"); } } catch (IOException ioe) { ioe.printStackTrace(); } return flag; } //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建 public static boolean CreateDirecroty(String remote) throws IOException { boolean success = true; String directory = remote + "/"; // 如果远程目录不存在,则递归创建远程服务器目录 if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) { int start = 0; int end = 0; if (directory.startsWith("/")) { start = 1; } else { start = 0; } end = directory.indexOf("/", start); String path = ""; String paths = ""; while (true) { String subDirectory = new String(remote.substring(start, end).getBytes("UTF-8"), "iso-8859-1"); path = path + "/" + subDirectory; if (!existFile(path)) { if (makeDirectory(subDirectory)) { changeWorkingDirectory(subDirectory); } else { System.out.println("创建目录[" + subDirectory + "]失败"); changeWorkingDirectory(subDirectory); } } else { changeWorkingDirectory(subDirectory); } paths = paths + "/" + subDirectory; start = end + 1; end = directory.indexOf("/", start); // 检查所有目录是否创建完毕 if (end <= start) { break; } } } return success; } //判断ftp服务器文件是否存在 public static boolean existFile(String path) throws IOException { boolean flag = false; FTPFile[] ftpFileArr = ftpClient.listFiles(path); if (ftpFileArr.length > 0) { flag = true; } return flag; } //创建目录 public static boolean makeDirectory(String dir) { boolean flag = true; try { flag = ftpClient.makeDirectory(dir); if (flag) { System.out.println("创建文件夹" + dir + " 成功!"); } else { System.out.println("创建文件夹" + dir + " 失败!"); } } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 下载文件 * * @param pathname FTP服务器文件目录 * * @param filename 文件名称 * * @param localpath 下载后的文件路径 * * @return */ public static boolean downloadFile(String hostname,String username,String password,Integer port,String pathname, String filename, String localpath){ boolean flag = false; OutputStream os=null; try { System.out.println("开始下载文件"); initFtpClient(hostname,username,password,port); //切换FTP目录 ftpClient.changeWorkingDirectory(pathname); FTPFile[] ftpFiles = ftpClient.listFiles(); for(FTPFile file : ftpFiles){ if(filename.equalsIgnoreCase(file.getName())){ File localFile = new File(localpath + "/" + file.getName()); os = new FileOutputStream(localFile); ftpClient.retrieveFile(file.getName(), os); os.close(); } } ftpClient.logout(); flag = true; System.out.println("下载文件成功"); } catch (Exception e) { System.out.println("下载文件失败"); e.printStackTrace(); } finally{ if(ftpClient.isConnected()){ try{ ftpClient.disconnect(); }catch(IOException e){ e.printStackTrace(); } } if(null != os){ try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } return flag; } /** * 删除文件 * * @param pathname FTP服务器保存目录 * * @param filename 要删除的文件名称 * * @return */ public static boolean deleteFile(String hostname,String username,String password,Integer port,String pathname, String filename){ boolean flag = false; try { System.out.println("开始删除文件"); initFtpClient(hostname,username,password,port); //切换FTP目录 ftpClient.changeWorkingDirectory(pathname); ftpClient.dele(filename); ftpClient.logout(); flag = true; System.out.println("删除文件成功"); } catch (Exception e) { System.out.println("删除文件失败"); e.printStackTrace(); } finally { if(ftpClient.isConnected()){ try{ ftpClient.disconnect(); }catch(IOException e){ e.printStackTrace(); } } } return flag; } }
这篇关于记录:Java上传文件到FTP服务器代码以及问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南