我正在使用Apache Commons FTP上传文件。上传之前,我想检查服务器上是否已存在该文件,并将其备份到同一服务器上的备份目录中。

有谁知道如何将文件从FTP服务器复制到同一服务器上的备份目录?

public static void uploadWithCommonsFTP(File fileToBeUpload){

FTPClient f = new FTPClient();

FTPFile backupDirectory;

try {

f.connect(server.getServer());

f.login(server.getUsername(), server.getPassword());

FTPFile[] directories = f.listDirectories();

FTPFile[] files = f.listFiles();

for(FTPFile file:directories){

if (!file.getName().equalsIgnoreCase("backup")) {

backupDirectory=file;

} else {

f.makeDirectory("backup");

}

}

for(FTPFile file: files){

if(file.getName().equals(fileToBeUpload.getName())){

//copy file to backupDirectory

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

编辑代码: 仍然存在问题,当我备份zip文件时,备份的文件已损坏。

有人知道原因吗?

public static void backupUploadWithCommonsFTP(File fileToBeUpload) {

FTPClient f = new FTPClient();

boolean backupDirectoryExist = false;

boolean fileToBeUploadExist = false;

FTPFile backupDirectory = null;

try {

f.connect(server.getServer());

f.login(server.getUsername(), server.getPassword());

FTPFile[] directories = f.listDirectories();

// Check for existence of backup directory

for (FTPFile file : directories) {

String filename = file.getName();

if (file.isDirectory() && filename.equalsIgnoreCase("backup")) {

backupDirectory = file;

backupDirectoryExist = true;

break;

}

}

if (!backupDirectoryExist) {

f.makeDirectory("backup");

}

// Check if file already exist on the server

f.changeWorkingDirectory("files");

FTPFile[] files = f.listFiles();

f.changeWorkingDirectory("backup");

String filePathToBeBackup="/home/user/backup/";

String prefix;

String suffix;

String fileNameToBeBackup;

FTPFile fileReadyForBackup = null;

f.setFileType(FTP.BINARY_FILE_TYPE);

f.setFileTransferMode(FTP.BINARY_FILE_TYPE);

for (FTPFile file : files) {

if (file.isFile() && file.getName().equals(fileToBeUpload.getName())) {

prefix = FilenameUtils.getBaseName(file.getName());

suffix = ".".concat(FilenameUtils.getExtension(file.getName()));

fileNameToBeBackup = prefix.concat(Calendar.getInstance().getTime().toString().concat(suffix));

filePathToBeBackup = filePathToBeBackup.concat(fileNameToBeBackup);

fileReadyForBackup = file;

fileToBeUploadExist = true;

break;

}

}

// If file already exist on the server create a backup from it otherwise just upload the file.

if(fileToBeUploadExist){

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

f.retrieveFile(fileReadyForBackup.getName(), outputStream);

InputStream is = new ByteArrayInputStream(outputStream.toByteArray());

if(f.storeUniqueFile(filePathToBeBackup, is)){

JOptionPane.showMessageDialog(null, "Backup succeeded.");

f.changeWorkingDirectory("files");

boolean reply = f.storeFile(fileToBeUpload.getName(), new FileInputStream(fileToBeUpload));

if(reply){

JOptionPane.showMessageDialog(null,"Upload succeeded.");

}else{

JOptionPane.showMessageDialog(null,"Upload failed after backup.");

}

}else{

JOptionPane.showMessageDialog(null,"Backup failed.");

}

}else{

f.changeWorkingDirectory("files");

f.setFileType(FTP.BINARY_FILE_TYPE);

f.enterLocalPassiveMode();

InputStream inputStream = new FileInputStream(fileToBeUpload);

ByteArrayInputStream in = new ByteArrayInputStream(FileUtils.readFileToByteArray(fileToBeUpload));

boolean reply = f.storeFile(fileToBeUpload.getName(), in);

System.out.println("Reply code for storing file to server: " + reply);

if(!f.completePendingCommand()) {

f.logout();

f.disconnect();

System.err.println("File transfer failed.");

System.exit(1);

}

if(reply){

JOptionPane.showMessageDialog(null,"File uploaded successfully without making backup." +

"\nReason: There wasn't any previous version of this file.");

}else{

JOptionPane.showMessageDialog(null,"Upload failed.");

}

}

//Logout and disconnect from server

in.close();

f.logout();

f.disconnect();

} catch (IOException e) {

e.printStackTrace();

}

}

java ftp复制文件_如何使用Java将FTP服务器上的文件复制到同一服务器上的目录中?...相关推荐

  1. java将输出结果写入csv文件_如何在Java中将数据写入.csv文件?

    名为OpenCSV的库提供API来从.CSV文件读取数据或将数据写入.CSV文件.此处说明了如何使用Java程序写入.csv文件的内容. Maven依赖 com.opencsv opencsv 4.4 ...

  2. java hdfs创建文件_使用HDFS java api 创建文件出错。

    //创建文件核心代码 public static void createNewHDFSFile(String toCreateFilePath, String content) throws IOEx ...

  3. linux禁止客户端上传文件_实战 FastDFS Java 客户端上传文件

    FastDFS 服务端安装参考文章:分布式文件系统之 FastDFS 安装 FastDFS Java 客户端 先从 GitHub 上将项目源码克隆下来: $ git clone https://git ...

  4. java 安装后找不到文件_(已解决)jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe...

    jdk安装好之后,也配置好了环境变量,打开cmd输入javac可以跳出相关信息,可是输入java却一直提示:系统找不到文件C:\ProgramData\Oracle\Java\javapath\jav ...

  5. java获取目录中最后被更改的文件_如何使用Java从目录中只获取10个最后修改过的文件?...

    我是初学者,我发现了一个关于 java中lastmodified文件的旧线程. 我想要的是从目录中只获取10个最近的文件并将它们移动到另一个目录. 在此论坛中找到的此代码运行良好,但它从目录中获取所有 ...

  6. tomcat下只有.class文件 没有java文件_解决tomcat发布工程后,WEB-INF/classes下文件不编译的问题...

    今天部署项目到tomcat,发布完后,启动tomcat,报class not found: 临时找了个解决方案,由于项目是copy过来的,于是就将原来项目的classes下面编译好的class文件也一 ...

  7. eclipse编译java项目class文件_动态编译 Java 代码以及生成 Jar 文件

    导读: 最近在看 Flink 源码的时候发现到一段实用的代码,该代码实现了 java 动态编译以及生成 jar 文件.将其进行改进后可以应用到我们的平台上,实现在平台页面上编写 java 代码语句,提 ...

  8. java 检测目录下的文件_如何在Java中检查文件是目录还是文件

    java 检测目录下的文件 java.io.File class contains two methods using which we can find out if the file is a d ...

  9. java访问本地文件_详解Java读取本地文件并显示在JSP文件中

    详解Java读取本地文件并显示在JSP文件中 当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片.其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相 ...

最新文章

  1. MySQL数据库中as和distinct关键字
  2. python一个月能掌握吗_Python 从入门到精通:一个月足够了!
  3. Linux中的文件被异常删除的排查思路
  4. 不同操作系统上屏蔽oracle的操作系统认证方式
  5. 【uTenux实验】写在开始实验之前
  6. 20181030函数2
  7. Mybatis_3.基于注解的增删改查
  8. POJ 3678 2-SAT简单题
  9. DASCTF2022.07赋能赛 - Pwn easyheap
  10. 【剖析 | SOFARPC 框架】系列之SOFARPC序列化比较
  11. 家用千兆路由器排行榜前十名_千兆家用路由器品牌推荐,总有一款适合你!
  12. 【Gradle】Gradle运行main方法报错:Unnecessarily replacing a task that does not exist is not supported.
  13. python基础知识补充
  14. 雷电html代码,基于HTML5的游戏制作(雷电飞机设计游戏)
  15. STC单片机驱动BLDC无刷直流电机(无HALL)官方示例
  16. Yapi集成到Jenkins实现接口自动化—最全面的流程讲解
  17. vsd格式文件如何打开?
  18. 单网卡同时上内外网的路由设置
  19. CAD转图片,没有转换器CAD图纸转换成图片
  20. 几种sklearn库直接实现分类算法

热门文章

  1. struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性
  2. 用于matplotlib对齐很有用的算法,可用于面试笔试
  3. 你会在C#的类库中添加web service引用吗?
  4. Python的国际化
  5. [导入]SunriseUpload.0.9.1的源码分析(七)
  6. 中文分词之正向最大匹配算法
  7. 如何编写一份SOP?
  8. .net 调用 sql server 自定义函数,并输出返回值
  9. PHP数据类型的转化:(类型) 变量 类型val(变量) settype(变量,类型)
  10. html 手动添加thead,HTML表格 - 我可以在thead之前添加额外的tbody吗?