Java用FTP实现简单的上传下载

2019-06-12 22:28:33

已经是快四年的博客园用户了,今天实在是因为遇到的坑太蛋疼了,所以写好之后想直接发个博客。

下图是FTP的练习截图:

用到了这三个jar包,jar包确实不大好找,下面是我上传的jar包连接:

https://files.cnblogs.com/files/gbn007/FTP%E7%AE%80%E5%8D%95%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E6%89%80%E9%9C%80%E8%A6%81%E7%9A%84jar%E5%8C%85.rar

测试用到的文件展示(FTPDOWN中没有任何文件),图片好大呀,暂时还不会改大小,会改了我再改一下:

员工信息表.txt 下图:

之后就开始代码发布阶段了:

Main.java:

 1 package FTP;
 2
 3 import java.io.*;
 4
 5 public class Main {
 6     public static void main(String[] args) {
 7         String ftpHost = "172.203.160.104";
 8         String ftpUserName = "GBNFTP";
 9         String ftpPassword = "ASDFGHJKL;‘";
10         int ftpPort = 21;
11         String ftpPath = "/FTP/FTPDOWN";
12         String localPath = "D:\\FTP\\员工信息表.txt";//"D:\\FTP\\upload.txt";
13         String downloadPath = "D:\\FTP";
14         String uploadFileName = "员工上传.txt";//"ftp_upload.txt";
15         String downloadFileName = "员工下载.txt";//"ftp_download.txt";
16
17         // 上传一个文件
18         try {
19             System.out.println("=============上传文件操作===============");
20             FileInputStream in = new FileInputStream(new File(localPath));
21             boolean isUp = FtpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, uploadFileName, in);
22             if (isUp) {
23                 System.out.println("上传成功 !");
24             } else {
25                 System.out.println("上传失败 !");
26             }
27             System.out.println("=============下载文件操作===============");
28             // 下载一个文件
29             boolean isDown = FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, downloadPath,
30                     uploadFileName, downloadFileName);
31             if (isDown) {
32                 System.out.println("下载成功 !");
33             } else {
34                 System.out.println("下载失败 !");
35             }
36         } catch (FileNotFoundException e) {
37             e.printStackTrace();
38             System.out.println(e);
39         }
40
41     }
42 }

Main.java

FtpUtil.java:

  1 package FTP;
  2
  3 import org.apache.commons.net.ftp.FTPClient;
  4 import org.apache.commons.net.ftp.FTPReply;
  5
  6 import java.io.*;
  7 import java.net.SocketException;
  8
  9 public class FtpUtil {
 10
 11     /**
 12      * 获取FTPClient对象
 13      *
 14      * @param ftpHost
 15      *            FTP主机服务器
 16      * @param ftpPassword
 17      *            FTP 登录密码
 18      * @param ftpUserName
 19      *            FTP登录用户名
 20      * @param ftpPort
 21      *            FTP端口 默认为21
 22      * @return
 23      */
 24     public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,
 25             String Function) {
 26         FTPClient ftpClient = new FTPClient();
 27         try {
 28             ftpClient = new FTPClient();
 29             ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
 30             ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
 31             if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
 32                 System.out.println("未连接到FTP,用户名或密码错误。");
 33                 ftpClient.disconnect();
 34             } else {
 35                 System.out.println(Function + ":FTP连接成功。");
 36             }
 37         } catch (SocketException e) {
 38             e.printStackTrace();
 39             System.out.println("FTP的IP地址可能错误,请正确配置。");
 40         } catch (IOException e) {
 41             e.printStackTrace();
 42             System.out.println("FTP的端口错误,请正确配置。");
 43         }
 44         return ftpClient;
 45     }
 46
 47     /**
 48      * Description: 向FTP服务器上传文件
 49      *
 50      * @param ftpHost
 51      *            FTP服务器hostname
 52      * @param ftpUserName
 53      *            账号
 54      * @param ftpPassword
 55      *            密码
 56      * @param ftpPort
 57      *            端口
 58      * @param ftpPath
 59      *            FTP服务器中文件所在路径 格式: ftptest/aa
 60      * @param fileName
 61      *            ftp文件名称
 62      * @param input
 63      *            文件流
 64      * @return 成功返回true,否则返回false
 65      */
 66     public static boolean uploadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,
 67             String ftpPath, String uploadFileName, InputStream input) {
 68         boolean issuccess = false;
 69         FTPClient ftpClient = null;
 70         try {
 71             int reply;
 72             ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort, "上传");
 73             reply = ftpClient.getReplyCode();
 74             System.out.println("上传reply:" + reply);
 75             if (!FTPReply.isPositiveCompletion(reply)) {
 76                 ftpClient.disconnect();
 77                 return issuccess;
 78             }
 79             ftpClient.setControlEncoding("UTF-8"); // 中文支持
 80             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 传输类型
 81             if (!ftpClient.changeWorkingDirectory(ftpPath)) {
 82                 ftpClient.changeWorkingDirectory("/");
 83                 String[] dirs = ftpPath.split("/");
 84                 for (String dir : dirs) {
 85                     ftpClient.makeDirectory(dir);
 86                     ftpClient.changeWorkingDirectory(dir);
 87                 }
 88             }
 89             ftpClient.enterLocalPassiveMode();// 大部分用在Linux上
 90             if (!ftpClient.storeFile(new String(uploadFileName.getBytes("GBK"), "iso-8859-1"), input)) {
 91                 return issuccess;
 92             }
 93             input.close();
 94             ftpClient.logout();
 95             issuccess = true;
 96         } catch (IOException e) {
 97             e.printStackTrace();
 98         } finally {
 99             if (ftpClient.isConnected()) {
100                 try {
101                     ftpClient.disconnect();
102                 } catch (IOException ioe) {
103                 }
104             }
105         }
106         return issuccess;
107     }
108
109     /*
110      * 从FTP服务器下载文件
111      *
112      * @param ftpHost FTP IP地址
113      *
114      * @param ftpUserName FTP 用户名
115      *
116      * @param ftpPassword FTP用户名密码
117      *
118      * @param ftpPort FTP端口
119      *
120      * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
121      *
122      * @param localPath 下载到本地的位置 格式:H:/download
123      *
124      * @param fileName 文件名称
125      */
126
127     public static boolean downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,
128             String ftpPath, String downloadPath, String uploadFileName, String downloadFileName) {
129         boolean issuccess = false;
130         FTPClient ftpClient = null;
131         try {
132             ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort, "下载");
133             ftpClient.setControlEncoding("UTF-8"); // 中文支持
134             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
135             ftpClient.enterLocalPassiveMode(); // 大部分用在Linux上
136             ftpClient.changeWorkingDirectory(ftpPath); // 切换到ftp的服务器路径
137             File localFile = new File(downloadPath + File.separatorChar + downloadFileName);// 设定要下载的路径
138             System.out.println("文件目录:" + localFile);
139             OutputStream os = new FileOutputStream(localFile); // 实例化
140             if (ftpClient.retrieveFile(new String(uploadFileName.getBytes("GBK"), "iso-8859-1"), os)) { // 将文件写入到下载的文件中
141                 issuccess = true;
142             }
143             os.close();
144             ftpClient.logout();
145         } catch (FileNotFoundException e) {
146             System.out.println("没有找到" + ftpPath + "下载");
147             e.printStackTrace();
148         } catch (SocketException e) {
149             System.out.println("连接FTP失败.");
150             e.printStackTrace();
151         } catch (IOException e) {
152             e.printStackTrace();
153             System.out.println("文件读取错误。");
154             e.printStackTrace();
155         }
156         return issuccess;
157     }
158 }

FtpUtil.java

以上就是FTP实现简单的上传下载了。

遇到的坑是在上传的时候不能上传,我的不是中文命名问题,而是IIS配置权限问题,当时不知道在哪里参考的ftp配置,没有选择写入,导致不能上传。。。

好了,下面是参考的博客,谢谢以下的博主大佬

https://www.cnblogs.com/yingyujyf/p/6933823.html

https://blog.csdn.net/h_tinkinginjava/article/details/80048043   (我把这位博主代码中的UTF-8改成了GBK好用了,UTF-8上传的时候中文文件名是乱码)

原文地址:https://www.cnblogs.com/gbn007/p/11011262.html

时间: 2024-08-27 23:43:54

Java用FTP实现简单的上传下载的相关文章

java操作FTP,实现文件上传下载删除操作

上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端口请写-1 * @param username FTP登录账号 * @param password FTP登录密码 * @param path FTP服务器保存目录 * @param filename 上传到FTP服务器上的文件名 * @param input 输入流 * @return 成功返回t

JAVA中使用FTPClient实现文件上传下载

在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件. 一.上传文件 原理就不介绍了,大家直接看代码吧 /** * Description: 向FTP服务器上传文件 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保([email protected])创建 * @param url FTP服务器hostname

我的代码库-Java8实现FTP与SFTP文件上传下载

有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP服务(虽然刚开始我就是这么干的). 另外就是jdk1.8和jdk1.7之前的方法有些不同,网上有很多jdk1.7之前的介绍,本篇是jdk1.8的 添加依赖Jsch-0.1.54.jar <!-- https://mvnrepository.com/artifact/com.jcraft/jsch -

使用TFTP,FTP完成一个文件上传下载系统

实验任务:使用TFTP上传下载文件系统 步骤1:在win10PC-1虚拟机中,安装tftp服务器软件 此时winxp02作为TFTP服务端,网络设备作为TFTP客户端 步骤2:使用TFTP命令上传文件到win10-PC1 在网络设备上首先保存配置,然后在网络设备上使用tftp命令将配置文件上传tftp服务器. [H3C]save fValidating file. Please wait…tftp 172.168.1.2 put startup.cfg 步骤3:使用tftp命令下载文件到网络设备

salesforce 零基础学习(四十二)简单文件上传下载

项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文件上传到Document对象中. 一.文件上传功能 apex代码 1 public with sharing class FileUploadUsedTransientController { 2 3 public transient Blob fileUploadBody{get;set;} 4

FTP多线程,断点续传上传下载

1 package com.hirain.ftp.thread; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.OutputStream; 8 import java.io.RandomAccessFile; 9 10 import org.apache.commons.

linux命令行模式下对FTP服务器进行文件上传下载

参考源:点击这里查看 1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码,待认证通过即可. 2. 下载文件 下载文件通常用get和mget这两条命令.a) get 格式:get [remote-file] [local-file]将文件从远端主机中传送至本地主机中.如要获取远程服务器上/usr/your/1.htm,则 ftp> get /usr/

yii2 ftp 的常规操作 上传 下载

<?php function make_directory($ftp_stream, $dir){ // if directory already exists or can be immediately created return true if (ftp_is_dir($ftp_stream, $dir) || @ftp_mkdir($ftp_stream, $dir)) return true; // otherwise recursively try to make the direc

FTP服务搭建及上传下载实验(干货,可跟着一起实操)

文件传输协议 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议.??FTP允许用户以文件操作的方式(如文件的增.删.改.查.传送等)与另一主机相互通信.然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件.目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式. 事先准备 一台装有Windows Sever的服务器.一台客户机 目的 通过FTP