package com.sitech.message.controller.task;
import java.io.File;//引入类
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

//实现文件的简单处理,复制和移动文件、目录等
public class TextCopyFileAndMove {
public static void fileMove(String from, String to) throws Exception {// 移动指定文件夹内的全部文件
try {
File dir = new File(from);
File[] files = dir.listFiles();// 将文件或文件夹放入文件集
if (files == null)// 判断文件集是否为空
return;
File moveDir = new File(to);// 创建目标目录
if (!moveDir.exists()) {// 判断目标目录是否存在
moveDir.mkdirs();// 不存在则创建
}
for (int i = 0; i < files.length; i++) {// 遍历文件集
if (files[i].isDirectory()) {// 如果是文件夹或目录,则递归调用fileMove方法,直到获得目录下的文件
fileMove(files[i].getPath(), to + "\\" + files[i].getName());// 递归移动文件
files[i].delete();// 删除文件所在原目录
}
File moveFile = new File(moveDir.getPath() + "\\"// 将文件目录放入移动后的目录
+ files[i].getName());
if (moveFile.exists()) {// 目标文件夹下存在的话,删除
moveFile.delete();
}
files[i].renameTo(moveFile);// 移动文件
System.out.println(files[i] + " 移动成功");
}
} catch (Exception e) {
throw e;
}
}

// 复制目录下的文件(不包括该目录)到指定目录,会连同子目录一起复制过去。
public static void copyFileFromDir(String toPath, String fromPath) {
File file = new File(fromPath);
createFile(toPath, false);// true:创建文件 false创建目录
if (file.isDirectory()) {// 如果是目录
copyFileToDir(toPath, listFile(file));
}
}

// 复制目录到指定目录,将目录以及目录下的文件和子目录全部复制到目标目录
public static void copyDir(String toPath, String fromPath) {
File targetFile = new File(toPath);// 创建文件
createFile(targetFile, false);// 创建目录
File file = new File(fromPath);// 创建文件
if (targetFile.isDirectory() && file.isDirectory()) {// 如果传入是目录
copyFileToDir(targetFile.getAbsolutePath() + "/" + file.getName(),
listFile(file));// 复制文件到指定目录
}
}

// 复制一组文件到指定目录。targetDir是目标目录,filePath是需要复制的文件路径
public static void copyFileToDir(String toDir, String[] filePath) {
if (toDir == null || "".equals(toDir)) {// 目录路径为空
System.out.println("参数错误,目标路径不能为空");
return;
}
File targetFile = new File(toDir);
if (!targetFile.exists()) {// 如果指定目录不存在
targetFile.mkdir();// 新建目录
} else {
if (!targetFile.isDirectory()) {// 如果不是目录
System.out.println("参数错误,目标路径指向的不是一个目录!");
return;
}
}
for (int i = 0; i < filePath.length; i++) {// 遍历需要复制的文件路径
File file = new File(filePath[i]);// 创建文件
if (file.isDirectory()) {// 判断是否是目录
copyFileToDir(toDir + "/" + file.getName(), listFile(file));// 递归调用方法获得目录下的文件
System.out.println("复制文件 " + file);
} else {
copyFileToDir(toDir, file, "");// 复制文件到指定目录
}
}
}

public static void copyFileToDir(String toDir, File file, String newName) {// 复制文件到指定目录
String newFile = "";
if (newName != null && !"".equals(newName)) {
newFile = toDir + "/" + newName;
} else {
newFile = toDir + "/" + file.getName();
}
File tFile = new File(newFile);
copyFile(tFile, file);// 调用方法复制文件
}

public static void copyFile(File toFile, File fromFile) {// 复制文件
if (toFile.exists()) {// 判断目标目录中文件是否存在
System.out.println("文件" + toFile.getAbsolutePath() + "已经存在,跳过该文件!");
return;
} else {
createFile(toFile, true);// 创建文件
}
System.out.println("复制文件" + fromFile.getAbsolutePath() + "到"
+ toFile.getAbsolutePath());
try {
InputStream is = new FileInputStream(fromFile);// 创建文件输入流
FileOutputStream fos = new FileOutputStream(toFile);// 文件输出流
byte[] buffer = new byte[1024];// 字节数组
while (is.read(buffer) != -1) {// 将文件内容写到文件中
fos.write(buffer);
}
is.close();// 输入流关闭
fos.close();// 输出流关闭
} catch (FileNotFoundException e) {// 捕获文件不存在异常
e.printStackTrace();
} catch (IOException e) {// 捕获异常
e.printStackTrace();
}
}

public static String[] listFile(File dir) {// 获取文件绝对路径
String absolutPath = dir.getAbsolutePath();// 声获字符串赋值为路传入文件的路径
String[] paths = dir.list();// 文件名数组
String[] files = new String[paths.length];// 声明字符串数组,长度为传入文件的个数
for (int i = 0; i < paths.length; i++) {// 遍历显示文件绝对路径
files[i] = absolutPath + "/" + paths[i];
}
return files;
}

public static void createFile(String path, boolean isFile) {// 创建文件或目录
createFile(new File(path), isFile);// 调用方法创建新文件或目录
}

public static void createFile(File file, boolean isFile) {// 创建文件
if (!file.exists()) {// 如果文件不存在
if (!file.getParentFile().exists()) {// 如果文件父目录不存在
createFile(file.getParentFile(), false);
} else {// 存在文件父目录
if (isFile) {// 创建文件
try {
file.createNewFile();// 创建新文件
} catch (IOException e) {
e.printStackTrace();
}
} else {
file.mkdir();// 创建目录
}
}
}
}

public static void main(String[] args) {// java程序主入口处
String fromPath = "E:/createFile/shafei.log";// 目录路径
String toPath = "F:/createFile/shafei.log";// 源路径
System.out.println("1.移动文件:从路径 " + fromPath + " 移动到路径 " + toPath);
File fromPaths = new File("F:/createFile/createFile/test.log");
File tofiles = new File("F:/createFile/shafei/test.log");
copyFile(tofiles,fromPaths);
try {
fileMove(fromPath, toPath);// 调用方法实现文件的移动
} catch (Exception e) {
System.out.println("移动文件出现问题" + e.getMessage());
}
System.out.println("2.复制目录 " + toPath + " 下的文件(不包括该目录)到指定目录" + fromPath
+ " ,会连同子目录一起复制过去。");
copyFileFromDir(fromPath, toPath);// 调用方法实现目录复制
System.out.println("3.复制目录 " + fromPath + "到指定目录 " + toPath
+ " ,将目录以及目录下的文件和子目录全部复制到目标目录");
copyDir(toPath, fromPath);// 调用方法实现目录以用目录下的文件和子目录全部复制
}
}

java文件上传复制等功能的更多相关文章

  1. 2013第38周日Java文件上传下载收集思考

    2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...

  2. JavaWeb中的文件上传和下载功能的实现

    导入相关支持jar包:commons-fileupload.jar,commons-io.jar 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上 ...

  3. Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (3)

    接上篇 Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (2) 7. 使用配置文件指定监听地址 打开 appsettings.json 文件,加入一行 "UseUrls&q ...

  4. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  5. 使用SpringMVC框架实现文件上传和下载功能

    使用SpringMVC框架实现文件上传和下载功能 (一)单个文件上传 ①配置文件上传解释器 <!—配置文件上传解释器 --> <mvc:annotation-driven>&l ...

  6. php 文件上传类,功能相当齐全,留作开发中备用吧。

    收藏一个经典好用的php 文件上传类,功能相当齐全,留作开发中备用吧. 好东西,大家都喜欢,才是真的好,哈哈!!! <?php  /**   * 文件上传类   */  class upload ...

  7. java文件上传-原始的Servlet方式

    前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...

  8. JAVA文件上传 ServletFileUpLoad 实例

    1.  jsp <%@ page language="java" contentType="text/html" pageEncoding="u ...

  9. java文件上传工具包

    java 文件上传工具包 主要有两个方法:单文件上传和多文件上传 @Slf4j public class UploadFileUtil { //上传单张图片 public String uploadP ...

随机推荐

  1. OpenCL Workshop 1 —— 数字音频滤波

    Introduction 这两年深度学习大火,Cuda跟着吃红利,OpenCL发展也很快.虽然OpenCL不是事实上的标准,但是作为开放标准,适应性是很强的,除了显卡之外,CPU/FPGA上都可以执行 ...

  2. LC 869. Reordered Power of 2

    Starting with a positive integer N, we reorder the digits in any order (including the original order ...

  3. js函数节流和防抖的理解与实现

    一:函数防抖1.理解:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间2.思路:每次触发事件时都取消之前的延时调用方法 3.实现: function debounce ...

  4. Svn CleanUp failed–previous operation has not finished

    Svn CleanUp遇到错误,解决办法: 下载sqlite3.exe 放至要CleanUp的目录中, 命令行进入sqlite3.exe所在目录, 连接数据库 删除工作队列,(此时再CleanUp提示 ...

  5. Kettle源码学习(一)——把Kettle项目跑起来

    kettle(pentaho data integration),是一款开源的C/S版的ETL工具,最近打算学习一下kettle源码,并自己写一个mini kettle,并改造成基于事件触发的流处理模 ...

  6. 在Android初次的前期学习中的二个小例子(2)

    Hello13:SQLite数据库 一.简述SQLite的概念和主要特性 SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,使用非常方便,支持SQL语法标准和数据库事务原则. 相对于Sh ...

  7. 【JVM学习笔记】Class.forName方法学习

    三个参数的版本的源代码如下 doc文档翻译 使用给定的类加载器(即第3个参数)返回与具有给定字符串名称(第1个参数)的类或接口关联的Class对象.给定类或接口的完全限定名称(以getName返回的相 ...

  8. UniEAP UTF 用户手册 (引擎)

    目录 第1章 概述 5 1.1 术语解释 5 第2章 测试文件组织 6 2.1 测试执行文件详解 7 2.1.1 参数配置 7 2.1.2 测试报告配置 9 2.1.3 浏览器类型配置 9 2.1.4 ...

  9. git-忽略不想提交到git的文件

    在代码目录下建立.gitignore文件: .gitignore (用记事本另存可以保存这个名字),配置上要忽略的文件或者文件夹,然后提交到git 上就可以了.

  10. webdriver的八种定位

    转自https://zhuanlan.zhihu.com/p/54588889 在UI层面的自动化测试开发中,元素的定位与操作是基础,也是经常遇到的困难所在.webdriver提供了8种定位: 1. ...