前文

1、使用FTP的方式进行文件的上传和下载(非SFTP)

2、本人手打,亲测,代码是最简单的,清晰易懂,需要的同学请结合自己的实际添加业务逻辑

2、第三方的jar包:import org.apache.commons.net.ftp.FTPClient;

代码

package Main;

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.List; import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply; import Domain.FileInfoList;
import Domain.FtpConfig;
import Util.LoggerUtil; public class FTPUtils {
public static final String ftp_IP = "192.168.0.6";
public static final Integer ftp_port = 9001;
public static final String ftp_user = "Administrator";
public static final String ftp_psw = "123"; public static void main(String args[]) {
//download from FTP
downloadFromFTP(ftp_IP,ftp_port,ftp_user,ftp_psw,"/","新建文本文档.txt","E:");
//upload from FTP
uploadFromFTP(ftp_IP,ftp_port,ftp_user,ftp_psw,"/","E://新建文本文档.txt","新建文本文档.txt");
}
/**
* @param url IP
* @param port 端口
* @param username 用户名
* @param password 密码
* @param remotePath 服务器上的路径
* @param fileName 要下载的文件
* @param localPath 保存到本地的文件
*/
public static boolean downloadFromFTP(String url, int port, String username, String password, String remotePath,
String fileName, String localPath) {
boolean success = false;
FTPClient ftp = new FTPClient();
InputStream input=null;
BufferedOutputStream writer=null;
byte[] by=null;
try {
int reply;
ftp.connect(url, port);
// ftp.connect(url);
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
ftp.enterLocalPassiveMode();
ftp.setControlEncoding("gbk");
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles(); // 获取当前目录下的所有文件 for (FTPFile ff : fs) {
if (new String(ff.getName().getBytes(),"utf-8").equals(fileName)) {
//防止出现中文文件名是返回null,强制设置成ISO-8859-1的编码方式进行获取输入流
input=ftp.retrieveFileStream("/"+(new String(ff.getName().getBytes("gbk"), "ISO-8859-1")));
by=new byte[(int)ff.getSize()];
//把文件流保存到byte数组中
input.read(by);
//文件输出到目标目录,不需要判断本地目录是否有相同文件,会自动覆盖
writer=new BufferedOutputStream(new FileOutputStream(localPath+"/"+fileName));
writer.write(by);
System.out.println("输出指定文件【"+fileName+"】到本地目录:"+localPath+"/"+fileName+"成功");
}
}
//断开FTP连接
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally { if (ftp.isConnected()) {
try {
if(writer!=null) {
writer.close();
}
if(input!=null) {
input.close();
}
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
} /**
* ftp上传单个文件
*
* @param ftpIP ftp地址
* @param port 端口号
* @param userName ftp的用户名
* @param password ftp的密码
* @param directory 上传至ftp的路径名不包括文件名
* @param localFilePath 要上传的本地文件全路径名
* @param destName 上传至ftp后存储的文件名
* @throws IOException 
*/
public static boolean uploadFromFTP(String ftpIP,Integer port,String userName,String password,String directory,String localFilePath,String destName) { FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
boolean result = false;
try {
ftpClient.connect(ftpIP, port);
ftpClient.login(userName, password);
ftpClient.enterLocalPassiveMode();
// 设置上传目录
ftpClient.changeWorkingDirectory(directory);
ftpClient.setBufferSize(1024);
ftpClient.setConnectTimeout(10*1000);
ftpClient.setControlEncoding("gbk");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//防止出现中文文件名是返回null,强制把文件名设置成ISO-8859-1的编码方式进行删除指定文件
ftpClient.deleteFile(directory+new String(destName.getBytes("gbk"),"ISO-8859-1"));
File srcFile = new File(localFilePath);
fis = new FileInputStream(srcFile);
//上传到FTP服务器==防止出现中文文件名是返回null,强制把文件名设置成ISO-8859-1的编码方式进行上传
result = ftpClient.storeFile((directory + new String(destName.getBytes("gbk"),"ISO-8859-1")), fis); } catch (NumberFormatException e) {
System.err.println("FTP端口配置错误:不是数字:");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return result;
}
}

  

FTP文件上传和下载(JAVA)的更多相关文章

  1. Java实现FTP文件上传与下载

    实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cl ...

  2. .NET ftp文件上传和下载

    文章参考来源地址:https://blog.csdn.net/wybshyy/article/details/52095542 本次对代码进行了一点扩展:将文件上传到ftp指定目录下,若目录不存在则创 ...

  3. Java 实现ftp 文件上传、下载和删除

    本文利用apache ftp工具实现文件的上传下载和删除.具体如下: 1.下载相应的jar包 commons-net-1.4.1.jar 2.实现代码如下: public class FtpUtils ...

  4. ftp文件上传和下载

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  5. shell 和python 实现ftp文件上传或者下载

    一.shell脚本 #####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<<!open 172.168.1 ...

  6. FTP文件上传与下载

    实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式:使用jdk中的ftpClie ...

  7. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  8. java代码实现ftp服务器的文件上传和下载

    java代码实现文件上传到ftp服务器: 1:ftp服务器安装: 2:ftp服务器的配置: 启动成功: 2:客户端:代码实现文件的上传与下载: 1:依赖jar包: 2:sftpTools   工具类: ...

  9. java/struts/Servlet文件下载与ftp文件上传下载

    1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...

随机推荐

  1. 离线(不联网)安装gcc4.8.5

    1 楔子 原来机器gcc版本是4.4.6,不支持cpp11,很麻烦需要升级,但是机器不能连外网,只能离线安装,十分麻烦: 2 gcc4.8.5离线安装,通过rpm包: 资源链接: https://pa ...

  2. Windows bat脚本的for语句

    Windows bat脚本的for语句基本形态如下: 在cmd窗口中:for %I in (command1) do command2 在批处理文件中:for %%I in (command1) do ...

  3. String成员函数

    string类提供的各种操作函数大致分为八类:构造器和析构器,大小和容量,元素存取,字符串比较,字符串修改,字符串接合,I/O操作以及搜索和查找. 函数名称 功能 构造函数 产生或复制字符串 析构函数 ...

  4. Spring——AOP

    AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...

  5. JS 循环的两种方式

    // 1.for循环 for (var i = 0; i <= 10; ++ i) { console.log(i); } // 2.while循环 var i = 0; while (i &l ...

  6. Java思维题

    1.求取字符串中出现的第一个非重复字符.   比如: "hello" 中的 h, "hello, how r you?" 中的 e 2.使用26字符母实现加密 ...

  7. jquery实现在光标位置(input、textarea)插入内容的方法

    通过扫码枪扫码.按钮点击事件在光标处插入文本,这是前台js常用的功能.但是在input输入框和textarea文本框定位光标,插入数据是有点不同的 首先最简单的,适用于input输入框的方法 HTML ...

  8. BOOST 解析,修改,生成xml样例

    解析XML 解析iworld XML,拿到entity和VisibleVolume的数据 int ParseiWorlds::readXML(const bpath &dir) { ptree ...

  9. Flyway对比Liquibase(转)

    数据库迁移工具. 很多应用的运行是需要数据库支持的,而随着快速迭代,产品更替的节奏加快,除了产品本身需要不断更新以外,数据库也需要做出合适的管理了. 为什么需要数据库迁移管理 比如第一个版本的产品只包 ...

  10. ip 转发(调度器的路由转发)

    临时开启 [root@proxy ~]# echo > /proc/sys/net/ipv4/ip_forward 永久开启 [root@proxy ~]# vim /etc/sysctl.co ...