文件夹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 HashMapmap = 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(); } } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)