//1、依赖的jar包:commons-net-1.4.1.jar

/**

* 上传文件到ftp服务器

* @param ftpHost

* @param userName

* @param passWord

* @param port

* @param ftpPath

* @param fileContent

* @param writeTempFielPath

*/

public static void upLoadFileForFtp(String ftpHost, String userName,

String passWord, int port, String writeTempFielPath, String fileContent,

String ftpUploadPath, String ftpFileName){

FTPClient ftpClient = null;

try {

ftpClient = initFtpClient(ftpHost, userName, passWord, port);

//不存在则创建

newFolder(writeTempFielPath);

boolean writeResult = saveFile(writeTempFielPath + ftpFileName, fileContent);

if (writeResult) {

File f = new File(writeTempFielPath + "/" + ftpFileName);

InputStream in = new FileInputStream(f);

ftpClient.changeWorkingDirectory(ftpUploadPath);

if (ftpClient.storeFile(ftpFileName, in)){

logger.info("文件" + ftpFileName + "上传成功!");

}else{

logger.info("文件" + ftpFileName + "上传失败!");

}

in.close();

f.delete();

} else {

logger.info("临时文件创建失败!");

}

} catch (Exception e) {

StaticVar.printExceptionInfo(logger, e);

e.printStackTrace();

}finally{

closeConn(ftpClient);

}

}

/**

* 下载最新文件

* @param ftpHost

* @param userName

* @param passWord

* @param port

* @param ftpPath

* @param fileName

* @return

* @throws IOException

*/

public static synchronized int downFilesForFtp(String ftpHost, String userName,

String passWord, int port, String ftpPath) throws IOException{

int updateCount = 0;

OutputStream os = null;

FTPClient ftpClient = null;

try {

ftpClient = initFtpClient(ftpHost, userName, passWord, port);

ftpClient.changeWorkingDirectory(ftpPath);

System.out.println("切换目录:"+ftpClient.getReplyString());

FTPFile[] files = ftpClient.listFiles();

//创建临时目录

FileUtil.newFolder(StaticVar.TEMP_PATH);

for (int i = 0; i < files.length; i++) {

String fileName = files[i].getName();

//判断文件类型

if (fileName.indexOf(".txt") < 0){

continue;

}

//判断日志文件是否已存在,没有则创建

String downLogPath = StaticVar.DOWN_LOG_PATH+StaticVar.DOWN_LOG_NAME;

File downLog = new File(downLogPath);

if (downLog.exists()){

//判断是否已经下载过

if (isDown(files[i], downLogPath)){

logger.info("文件:"+fileName+"已经下载过了!");

continue;

}else{

updateCount++;

}

}else{

downLog.createNewFile();

updateCount++;

}

String saveFilePath = StaticVar.TEMP_PATH + fileName;

os = new FileOutputStream(new File(saveFilePath));

boolean isDown = ftpClient.retrieveFile(fileName, os);

//记录下载日志

if (isDown){

logger.info("文件:" +saveFilePath+ "下载成功!");

FileUtil.newFolder(StaticVar.DOWN_LOG_PATH);

String log = files[i].getName() + "&" + files[i].getSize() + "&" + DateUtil.getNowDate(DateUtil.yyyyMMddHHmmss);

FileUtil.writeFile(downLogPath, log);

}

}

} catch (Exception e) {

e.printStackTrace();

logger.info("文件列表获取失败!");

StaticVar.printExceptionInfo(logger, e);

}finally{

if (null != os){

os.flush();

os.close();

}

closeConn(ftpClient);

}

return updateCount;

}

/**

* 读取文件

* @param file

* @return

* @throws IOException

*/

public static synchronized String readFile(String filePath) throws IOException{

StringBuffer resultBuffer = null;

InputStream in = null;

BufferedReader reader = null;

try {

in = new FileInputStream(filePath);

if (null != in){

reader = new BufferedReader(new InputStreamReader(in, "utf-8"));

resultBuffer = new StringBuffer();

String data = null;

while((data = reader.readLine()) != null){

resultBuffer.append(data + "\n");

}

return resultBuffer.toString();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

if (null != reader){

reader.close();

}

if (null != in){

in.close();

}

}

return null;

}

/**

* 写文件

* @param fileName

* @param fileContext

* @param writeTempFielPath

* @return

*/

public static boolean saveFile(String filePath, String fileContext) {

try {

File file = new File(filePath);

if (!file.exists()) {

if (!file.createNewFile()) {

logger.info("文件创建失败!");

}

}

BufferedWriter write = new BufferedWriter(new FileWriter(file, true));

write.write(fileContext);

write.flush();

write.close();

return true;

} catch (Exception e) {

logger.error("文件写入失败!");

e.printStackTrace();

return false;

}

}

/**

* 判断文件是否已经下载

* @param ftpFile

* @param fileName

* @param downLogPath

* @return

* @throws IOException

*/

private static boolean isDown(FTPFile ftpFile, String downLogPath) throws IOException {

String fileName = ftpFile.getName();

String logTxt = FileUtil.readFile(downLogPath);

String[] logs = logTxt.split("\n");

boolean isDown = false;

for (String str : logs) {

String[] log = str.split("&");//log[0]:文件名,log[1]:大小 (byte)

if (fileName.equals(log[0]) && ftpFile.getSize() == Long.parseLong(log[1])){

isDown = true;

break;

}

}

return isDown;

}

java ftp上传文件 linux_linux下用java实现ftp上传、下载文件相关推荐

  1. 批量上传相册,将一个文件夹下的所有图片,复制到另一个文件夹,仅给出文件夹目录

    package cn.hp.demo01;import java.io.*;/* * 批量上传相册 *将一个文件夹下的所有图片,复制到另一个文件夹 *仅给出文件夹目录*/ public class D ...

  2. .pages怎么在windows上打开?Windows下打开在Mac中编辑的.pages文件方法

    .pages怎么在windows上打开?Windows下打开在Mac中编辑的.pages文件方法 1.最简单的方法是修改后缀名为.zip然后解压,解压后就可以看到一张图片,这个就是文档内容了. 2.更 ...

  3. linux ftp下载文件_Linux系统中10个使用Wget命令下载文件示例

    wget 是一个从网络上自动下载文件的命令行工具,支持通过 HTTP.HTTPS.FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理.它是一个非交互式工具,非常适合通过脚本或者在 ...

  4. Java占Linux超过xms,linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  5. 在当前文件夹下创建以日期和时间命名的文件夹

    工作中经常要用到在当前文件夹下创建以日期加时间命名的文件夹,手动太过麻烦,于是写了个脚本, windows下直接用bat @echo off ::获取日期 将格式设置为:20150410 set da ...

  6. linux整个目录复制移动,Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹,个人常用收录...

    1.将一个文件夹下的所有内容复制到另一个文件夹下 cp -r /home/packageA/* /home/cp/packageB/ 或 cp -r /home/packageA/. /home/cp ...

  7. python将一个文件夹下图片按比例分在两个文件夹下

    #!/usr/bin/env python # -*- coding:utf-8 -*- # 将一个文件夹下图片按比例分在两个文件夹下,比例改0.7这个值即可 import os import ran ...

  8. Safari浏览器下载word文件,后缀多拼接了.html,导致打开下载文件乱码

    1.遇到的问题 谷歌和ie下载文件正常 Safari浏览器下载word文件,后缀多拼接了.html,导致打开下载文件乱码,下载的文件名称为test.doc.html,手动去掉多余的后缀.html即可正 ...

  9. linux新建备份数据库的脚本文件,Linux下shell脚本:自动每日备份网站文件和数据库上传FTP空间...

    前言 服务器.vps,难免会遇到各种问题,丢失数据,则必然痛心疾首啊!!! 数据无价,so建议养成定期备份的习惯!而且,要多备份几份,本地.网盘.FTP空间等,都多保存几份! 这里,就为大家带来一个l ...

  10. linux禁止客户端上传文件_Linux下Shell脚本实现FTP自动上传和下载文件

    概述 之前测试写的一个脚本,主要是为了实现FTP自动上传和下载文件.大家可以参考下: 基础环境配置 [root@pxzxdm01 ~]# useradd -d /home/ftp1 ftp1 [roo ...

最新文章

  1. Spring中使用Log4j记录日志
  2. mongodb数据库淘汰_红帽彻底不跟MongoDB玩了,只认PostgreSQL
  3. 路由器中Rom/Ram/NVRAM/FLASH的区别
  4. fastText中常见问题汇总
  5. C#性能优化:延迟初始化LazyT
  6. MFC对话框播放8位512*512的像素数据
  7. 高等数学下-赵立军-北京大学出版社-题解-练习11.3
  8. TCP与UDP特点与区别
  9. 分享Discuz! X2插件嵌入点列表(包含门户、社区、群组等)
  10. python生成随机数random操作_Python random生成随机数示例
  11. linux video属性_Linux 下Video 的制作方法
  12. QT5.14在Win10和Win7下的安装
  13. linux proc目录 是什么意思,linux 下proc目录里面有什么
  14. 【线性代数】详解正定矩阵、实对称矩阵、矩阵特征值分解、矩阵 SVD 分解
  15. ubuntu16.04离线安装NIVIDIA驱动
  16. intel服务器无线网卡,刷版本号?Intel再发新版无线网卡驱动
  17. 移动硬盘使用什么文件系统格式
  18. MongoDB day03
  19. 不懂量子力学?那你可以试试在家里做这五个实验!
  20. [JavaScript学习-01]JavaScript实现九宫格抽奖

热门文章

  1. 运用帝国CMS建站仿站的简单教程(初学者进)
  2. 【数仓】数据质量监控
  3. 学计算机有那些方向,计算机专业的研究生研究方向有哪些
  4. TCP/IP协议之struct sock结构体
  5. 【JAVA】RequestResponse
  6. Error: The project seems to require yarn but it‘s not installed.
  7. 备份服务器c盘系统还原,win7 64位专业版系统下备份和还原C盘的方法
  8. 查找算法:二分法,插值法的公式详解——菜鸟进阶的必经之路!!!
  9. mysql sql patindex_深入SQL截取字符串(substring与patindex)的详解
  10. 差动变压器的振动测量实验 思考题