java将一个文件夹下的内容复制到另一个文件夹下

参考:

java将一个文件夹下的内容复制到另一个文件夹下_java将一个文件夹文件复制到另一个下-CSDN博客

java复制文件的4种方式及拷贝文件到另一个目录下的实例代码 - sunny123456 - 博客园 (cnblogs.com)

Java复制一个文件的内容到另一个文件的七种方法_java 复制文件-CSDN博客

JAVA new File (网络路径)-CSDN博客

Java中File使用–创建文件_file.parent-CSDN博客

笔记:jdk中File.mkdir()方法有坑-CSDN博客

java文件操作报错:java.io.FileNotFoundException:D..(拒绝访问)-CSDN博客

Java解决java.io.FileNotFoundException: E:\work\work (拒绝访问。) - 那些年的代码 - 博客园 (cnblogs.com)

[java将InputStream或bytes写入本地文件_java中如何将bytes]写到本地中-CSDN博客

注意

对于这个问题,你首先要知道“流”的概念,流就像水一样,源源不断的传送,它是一种数据传输的模式。根据数据流方向的不同,可分为输入流和输出流。

输入流就是把数据(键盘输入、鼠标、扫描仪等等外设设备)读入到内存(程序)中,输出流就是把内存(程序)中的数据输出到外设或其他地方,从文件角度简单总结就是,输入流就是读数据,输出流就是写数据。在这个过程中,始终把内存作为参考点。

在JAVA语言中,定义了专门的类用来表示输入和输出,这些类放在java.io包中。按数据传输单位划分,可以分为字节流和字符流。其中:

字节流:InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。 OutputStream:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
字符流:Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。
系统的路径是 D:\uploadFile\packagingMaterial\PO2303239
系统拷过来的路径是 "D:\\uploadFile\\packagingMaterial\\PO2303239"
我们需改为 D:/uploadFile/packagingMaterial/PO2303238
不然系统会提示没有找到该文件路径

简易版本的将D:/uploadFile/packagingMaterial/PO2303238/外箱/PO2303238-外箱-e7fdeb35-3cd4-44bd-844e-90254db698de.png的文件复制到D:/uploadFile/packagingMaterial/PO2303239/sss.png

public static void main(String[] args) throws IOException {
File oldFile = new File("D:/uploadFile/packagingMaterial/PO2303238/外箱/PO2303238-外箱-e7fdeb35-3cd4-44bd-844e-90254db698de.png");//获取旧的文件File对象
File file = new File("D:/uploadFile/packagingMaterial/PO2303239/sss.png");
if (!file.exists()) { //判断要目标文件夹是否存在不存在则创建
File parentFile = file.getParentFile();
if (!parentFile.exists()) {
parentFile.mkdirs();
}
file.createNewFile();
} else {
file.delete();
file.createNewFile();
}
FileInputStream in = new FileInputStream(oldFile);
FileOutputStream out = new FileOutputStream(file);
byte[] buffer=new byte[2097152];
int readByte = 0;
//读取旧文件的流写入新文件里
while((readByte = in.read(buffer)) != -1){
out.write(buffer, 0, readByte);
}

in.close();
out.close();
}
package com.star.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

/**
* @Title: CopyDir
* @Description:复制一个文件夹的内容到另一个文件夹
* @Auther: huangxt
* @Version: 1.0
* @create 2019/6/18 15:24
*/
public class CopyDir {
public static void copyDir(String sourcePath, String newPath) throws IOException {
File file = new File(sourcePath); //获取文件夹File对象
String[] filePath = file.list(); //获取文件夹下所有内容的名称

if (!(new File(newPath)).exists()) { //判断要目标文件夹是否存在不存在则创建
(new File(newPath)).mkdir();
}

for (int i = 0; i < filePath.length; i++) { //循环遍历
//判断是不是文件夹,是的话执行递归。file.separator 分隔符,如“/”
if ((new File(sourcePath + file.separator + filePath[i])).isDirectory()) {
copyDir(sourcePath + file.separator + filePath[i], newPath + file.separator + filePath[i]);
}
//判断是不是文件,是的话旧的文件拷至新的文件夹下
if (new File(sourcePath + file.separator + filePath[i]).isFile()) {
copyFile(sourcePath + file.separator + filePath[i], newPath + file.separator + filePath[i]);
}

}
}

public static void copyFile(String oldPath, String newPath) throws IOException {
File oldFile = new File(oldPath);//获取旧的文件File对象
File file = new File(newPath); //获取新的文件File对象并生成文件
FileInputStream in = new FileInputStream(oldFile); //
FileOutputStream out = new FileOutputStream(file);

byte[] buffer=new byte[2097152];
int readByte = 0;
//读取旧文件的流写入新文件里
while((readByte = in.read(buffer)) != -1){
out.write(buffer, 0, readByte);
}

in.close();
out.close();
}

public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in); //启用输入
System.out.println("请输入源目录:");
String sourcePath = sc.nextLine(); //
System.out.println("请输入新目录:");
String path = sc.nextLine();

//String sourcePath = "D://aa";
//String path = "D://bb";

copyDir(sourcePath, path);
}
}



[java将InputStream或bytes写入本地文件_java中如何将bytes]写到本地中-CSDN博客

/**
* 将InputStream写入本地文件
* @param destination 写入本地目录
* @param input 输入流
* @throws IOException
*/
private static void writeToLocal(String destination, InputStream input)
throws IOException {
int index;
byte[] bytes = new byte[1024];
FileOutputStream downloadFile = new FileOutputStream(destination);
while ((index = input.read(bytes)) != -1) {
downloadFile.write(bytes, 0, index);
downloadFile.flush();
}
downloadFile.close();
input.close();
}
/**
* 将bytes写入本地文件
* @param destination
* @param bytes
* @throws IOException
*/
private static void writeToLocal(String destination, byte[] bytes)
throws IOException {
FileOutputStream downloadFile = new FileOutputStream(destination);
downloadFile.write(bytes);
downloadFile.flush();
downloadFile.close();
}