java访问ftp
1、连接ftp
FTPClient ftpClient = new FTPClient();
ftpClient.connect(host,port);
ftpClient.login(userName, password);
ftpClient.setControlEncoding(encoding);
ftpClient.changeWorkingDirectory(workDir);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//设置上传文件类型为二进制,否则将无法打开文件
ftpClient.enterLocalPassiveMode();
2、从ftp下载文件
String base64;
InputStream inputStream = null; try {
///防止中文乱码
if (!StringUtils.isEmpty(remotDir)){
remoteFileName = new String(remotDir.getBytes("GBK"), "iso-8859-1")+
File.separator+new String(remoteFileName.getBytes("GBK"), "iso-8859-1");
}else{
remoteFileName = new String(remoteFileName.getBytes("GBK"), "iso-8859-1");
}
//获取待读文件输入流
inputStream = ftpClient.retrieveFileStream(remoteFileName);
//inputStream.available() 获取返回在不阻塞的情况下能读取的字节数,正常情况是文件的大小
byte[] bytes = new byte[inputStream.available()]; inputStream.read(bytes);//将文件数据读到字节数组中
Base64.Encoder encoder = Base64.getEncoder();
base64 = encoder.encodeToString(bytes);//将字节数组转成base64字符串
log.info("read file {} success",remoteFileName);
// ftpClient.logout();
} catch (IOException e) {
log.error("read file fail ----->>>{}",e.getCause());
return null;
}finally {
if (null!=inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、向ftp上传文件
try {
if (!StringUtils.isEmpty(remoteDir)){
originName = new String(remoteDir.getBytes("GBK"),"iso-8859-1")+File.separator+
new String(originName.getBytes("GBK"),"iso-8859-1");
}else{
originName = new String(originName.getBytes("GBK"),"iso-8859-1");
}
Boolean isSuccess = ftpClient.storeFile(originName,inputStream);//保存文件
if (!isSuccess){
throw new FtpException(originName+"---》上传失败!");
}
log.info("{}---》上传成功!",originName);
} catch (IOException e) {
log.error("{}---》上传失败!",originName);
throw new FtpException(originName+"上传失败!");
}finally {
if (null!=inputStream){
try {
inputStream.close();
} catch (IOException e) {
log.debug(e.getMessage());
}
} }
java访问ftp的更多相关文章
- java访问ftp的一些操作
通过java代码来访问ftp服务器,进行下载操作
- Ftp主动模式和被动模式以及java连接ftp模式设置
Ftp主动模式和被动模式以及java连接ftp模式设置 https://www.cnblogs.com/huhaoshida/p/5412615.html (1) PORT(主动模式) PORT中文称 ...
- Java实现FTP文件与文件夹的上传和下载
Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...
- java访问修饰符
了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...
- java使用ftp上传文件
ftpServer是apache MINA项目的一个子项目,它实现了一个ftp服务器,与vsftpd是同类产品.Filezilla是一个可视化的ftp服务器. ftp客户端也有很多,如Filezill ...
- CentOS7 FTP服务搭建(虚拟用户访问FTP服务)
概述 最近在搞Oracle在Linux系统下集群,针对Linux系统,笔人也是一片空白.Liunx外部文件的传输,避免不了使用FTP服务,所以现在就整理下,CentOS7环境下,FTP服务的搭建.FT ...
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- [THINKING IN JAVA]访问权限控制
6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...
- java 访问 usb
java 要访问 usb 设备,通常要自己写c/c++代码,然后再用 java 访问这些组件,以达到控制usb设备的目的.但现在有一个开源组件 libusb 帮我们做好了访问usb设备的封装(包括wi ...
随机推荐
- java Main方法 获取 maven 的resource 下的xml文件
Properties properties = new Properties(); File file = new File("src/main/resources/generator.xm ...
- Python实例教程
转自:http://codingdict.com/article/9026 Python 100例-01 题目: 输有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数? Python 1 ...
- python全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python理论知识,线程的创建)
昨日内容回顾 队列 队列:先进先出.数据进程安全 队列实现方式:管道+锁 生产者消费者模型:解决数据供需不平衡 管道 双向通信,数据进程不安全 EOFError: 管道是由操作系统进行引用计数的 必须 ...
- Axios 安卓4.4不兼容的问题
问题:Vue在使用Axios做接口请求时,如果是安卓4.4系统会发生报错,原因是安卓4.4不支持ES6的Promise语法 解决方案: 1.安装: npm install babel-polyfill ...
- 数字类别生成onehot
对应行的列#原始标签 my_label = np.array([3,4,2,4,6,1]) #类别数量 num_class = 6 #样本数量 num = my_label.shape[0] #生成o ...
- Java继承基础版
继承是软件开发中实现代码复用的有效手段,如果一个类A继承了类B那么类B中的public.protected及默认修饰符修饰的实例成员或静态成员将被类A继承,也可以说类B的成员就是类A的成员而类A在此基 ...
- Flutter端代码
新建一个页面FirstScreen.dartmain.dart改动代码 导入import 'dart:ui' as ui;import 'package:flutter_module/FirstScr ...
- String 类的常用方法
format 是String类的一个非常有用的静态函数,可以将各类数据格式化为字符串并输出.其中format参数指定了输出的格式 toCharArray方法可以将字符串转为字符数组 getBytes方 ...
- OpenCV笔记:pyrDown()函数和pryUp()函数的使用
OpenCV实现了用于创建图像金字塔的两个函数pyrDown()和pryUp(). 图像金字塔是一种经典的图像多尺寸描述方法,它将降采样和平滑滤波结合在一起,对图像进行多尺度表示.图像金字塔由不同尺寸 ...
- iOS应用发布打包时为什么选择release,而不是debug
一.Debug和Release版本区别? 众所周知,我们进行iOS开发,在Xcode调试程序时,分为两种方式,Debug和Release,在Target的Setting中相信大家应该看到很多选项都分为 ...