前文

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. Linux系统组成和获取命令帮助2

    基于cobbler进行网络安装:    https://cobbler.github.io/ 终端:terminal        无论是系统的图形界面还是文字界面,都可以叫做控制台,终端       ...

  2. Beta冲刺——星期五

    这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 飞猪们 这个作业的目标 剩余任务预估,分配任务(开发,测试等).按要求提交当天冲刺报告. ...

  3. Ubuntu 18.04 启动太慢不能忍

    检查谁在搞鬼 $ systemd-analyze blame 结果 39.828s plymouth-quit-wait.service 39.311s apt-daily.service 30.93 ...

  4. The Tower HDU - 6559 (解析几何)

    The Tower HDU - 6559 The Tower shows a tall tower perched on the top of a rocky mountain. Lightning ...

  5. 通过url下载文件到指定目录 java

    import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io ...

  6. spring boot 导出 jar 配置文件的问题

    网上有很多关联映射及讲解,想要说的是   主要就是 classpath  加上的话   jar就可以找到了

  7. 虚拟机vmware的连接方式以及IP端口,协议等概念

    1.NAT虚拟机相当于小弟,宿主机相当于大哥,宿主机虚拟出一个网段供虚拟机上网用 2.Bridge桥接,虚拟机和宿主机相当于局域网中的两台机器 3.Host-Only虚拟机只和宿主机通信,无法上网 3 ...

  8. TensorFlow - 深度学习破解验证码 实验

    TensorFlow - 深度学习破解验证码 简介:验证码主要用于防刷,传统的验证码识别算法一般需要把验证码分割为单个字符,然后逐个识别,如果字符之间相互重叠,传统的算法就然并卵了,本文采用cnn对验 ...

  9. Remote API(RAPI)之 文件管理

    RAPI库由一组函数组成,这些函数可用于通过桌面应用程序管理设备,包括设备的目录文件.设备的注册表和系统信息. RAPI提供了一组文件管理方法 CeCopyFile:复制文件 CeCreateDire ...

  10. C# 常用方法——base64字符串转图片

    其他常用方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html /// <summary> /// base64编码的文本转为图片 / ...