前文

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. 8.3.ZooKeeper集群安装配置

    1.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式. 单机模式:Zookeeper只运行在一台服务器上,适合测试环境: 伪集群模式:就是在一台物理机上 ...

  2. QTP(3)

    Test3001_Flight4a_手动启动录制购票 (VBS脚本) Window("Flight Reservation").WinObject("Date of Fl ...

  3. The basic concept of information theory.

    Deep Learning中会接触到的关于Info Theory的一些基本概念.

  4. mongodb单机搭建

    参考网站:http://www.runoob.com/mongodb/mongodb-linux-install.html 1.下载 https://www.mongodb.com/download- ...

  5. Python——print函数输出对齐问题

    原创声明:本文系博主原创文章,转载及引用请注明出处. 当我们使用print函数时,若指定输出宽度,例如: >>> import math >>> print('|P ...

  6. u-boot下的DM驱动模型 阶梯状 (转)

    U-boot 下DM驱动模型的相关笔记要注意的关键两点: DM驱动模型的一般流程bind->ofdata_to_platdata(可选)->probe    启动,bind操作时单独完成的 ...

  7. linux LVM逻辑卷管理

    什么是LVM LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性. ...

  8. 特征工程中的IV和WOE详解

    1.IV的用途 IV的全称是Information Value,中文意思是信息价值,或者信息量. 我们在用逻辑回归.决策树等模型方法构建分类模型时,经常需要对自变量进行筛选.比如我们有200个候选自变 ...

  9. [Functional Programming] Add, Mult, Pow, isZero

    const log = console.log; // zero :: &fa.a const zero = f => x => x; // zero is F // once : ...

  10. Mountain Number FZU-2109数位dp

    Mountain NumberFZU-2109 题目大意:一个大于0的数字x,分写成x=a[0]a[1]a[2][3]..a[n]的形式,(比如x=1234,a[0]=1,a[1]=2,a[3]=3, ...