功能描述:
文件夹a中存放已经处理好的图片,文件夹b中存的是之前的图片(且可能有多级文件夹)
现在需要将a文件夹中处理好的图片替换到b文件中,以图片的名字和后缀名做替换条件。
import java.io.*;
import java.util.HashMap;
public class GetResolutionRatio {
//要扫秒的后缀名
public static final String endWith = ".png";
//处理成功的文件数
public static int num = 0;
//存要替换的文件
public static final HashMap map = new HashMap<>();
public static void main(String[] args) throws IOException {
//要替换的文件路径
String sourcePath = "C:\Users\lenovo\Desktop\source";
File sourceFile = new File(sourcePath);
sourceFinDiGui(sourceFile);
//被替换的文件路径
String path = "C:\Users\lenovo\Desktop\images";
File file = new File(path);
finDiGui(file);
System.out.println("处理数量"+num);
}
public static void finDiGui(File file) throws IOException {
// 判断是否为文件夹
if (file.isDirectory()) {
File[] listFiles = file.listFiles();
// 执行操作
for (File f : listFiles) {
finDiGui(f); //递归调用
}
}
//用file的endsWith()方法是通过后缀去筛选
if (file.getName().endsWith(".png")) {
System.out.println("文件夹"+file);
File tu = map.get(file.getName());
if (tu!=null){
copy(tu,file);
num++;
}
}
}
public static void sourceFinDiGui(File file) throws IOException {
// 判断是否为文件夹
if (file.isDirectory()) {
File[] listFiles = file.listFiles();
// 执行操作
for (File f : listFiles) {
sourceFinDiGui(f); //递归调用
}
}
//用file的endsWith()方法是通过后缀去筛选
if (file.getName().endsWith(".png")) {
map.put(file.getName(),file);
}
}
public static void copy(File srcPath,File destPath) {
// 2,选择流
InputStream is=null;
OutputStream os=null;
try {
is=new FileInputStream(srcPath);
os=new FileOutputStream(destPath);
//3,操作(写出)
//3,操作(分段读取)
byte[] flush=new byte[1024];//中间的缓冲容器
int len=-1;//接收长度初始化值
while((len=is.read(flush))!=-1) {//is.read(car)返回的是一个int值,当前读取字节的长度
os.write(flush, 0, len);
}
os.flush();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
//4,释放资源(分别关闭)(先打开的后关闭)
try {
if(null!=os) {
os.close();
}
}catch(IOException e) {
}
try {
if(null!=is) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}