使用I/O流将图片备份到指定目录

1.深度遍历指定目录rootPath中所有的子文件、子目录
2.将所有图片(后缀名为*.png\*.jpg)复制到指定目录backupPath
3.返回本次备份的图片数量

/*
*   图片备份
*/
public int backupImage(String rootPath,String backupPath){
      return 0;
}

实现思路:
1.定义主函数和备份函数:
main 函数是程序的入口,它调用 backupImage 函数,并打印出备份的图片数量。
backupImage 函数接收两个参数:源路径 rootpath 和备份路径 backupPath。它返回一个整数,表示备份的图片数量。
2.遍历目录:
使用 Files.walkFileTree 方法遍历 rootpath 下的所有文件和子目录。
为此,创建了一个 SimpleFileVisitor 的匿名子类,并重写了其中的 visitFile 方法。这个方法会在遍历到每个文件时被调用。
3.检查文件类型:
在 visitFile 方法中,首先检查文件的名称是否以 .jpg、.png 或 .webp 结尾,以判断它是否是一个图片文件。
4.备份图片:
如果文件是图片,就创建一个新的 File 对象 backImgFile,表示备份图片在 backupPath 下的路径。
使用 BufferedInputStream 和 BufferedOutputStream 来读取源文件并写入备份文件。这里使用了1024字节的缓冲区来读取和写入数据,以提高效率。
备份完成后,counter 变量加1,表示备份的图片数量增加。
另一种备份图片的方式,即使用 Files.copy 方法直接复制文件。但当前实现选择了手动读取和写入的方式。
5.返回备份数量:使用backupImage 函数返回 counter 的值,即备份的图片数量。

代码实现:

package com.ztt.Demo01;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;public class demo15 {public static void main(String[] args) {int ret=backupImage("D:\\test","D:\\test\\img_back");System.out.println(ret);}static int counter=0;public static int backupImage(String rootpath,String backupPath) {try {Files.walkFileTree(Paths.get(rootpath), new SimpleFileVisitor<Path>() {@Overridepublic FileVisitResult visitFile(Path file,BasicFileAttributes attrs) throws IOException {//判断是否是一张照片if(file.toString().endsWith(".jpg")||file.toString().endsWith(".png")||file.toString().endsWith(".webp")){//备份图片File backImgFile=new File(backupPath+"\\"+file.toFile().getName());System.out.println(backImgFile);counter++;//方式1//创建输入流(用于读取图片)//创建输出流(用于写入图片)try ( BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file. toFile()));BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream(backImgFile));) {//边读边写byte[] buff = new byte[1024];int len = -1;while ((len = bis.read(buff)) != -1) {bos.write(buff,0, len);}}//方式2//Files. copy(file, backImgFile. toPath());}return super.visitFile(file, attrs);}});} catch (IOException e) {e.printStackTrace();}return counter;}
}

输出结果:

D:\test\img_back\tiantian.jpg
D:\test\img_back\tp.jpg
D:\test\img_back\微信图片_20230923231912.jpg
D:\test\img_back\微信图片_20230923231958.jpg
D:\test\img_back\微信图片_20230923232430.jpg
D:\test\img_back\微信图片_20230923232603.jpg
D:\test\img_back\微信图片_20240307183537.jpg
D:\test\img_back\微信图片_20240307183553.jpg
D:\test\img_back\微信图片_20240307183602.jpg
D:\test\img_back\微信图片_20240307183610.jpg
D:\test\img_back\微信图片_20240307183619.jpg
D:\test\img_back\微信图片_20240307183626.jpg
D:\test\img_back\2023.jpg
D:\test\img_back\king.jpg
D:\test\img_back\tiantian.jpg
D:\test\img_back\tp.jpg
D:\test\img_back\2023.jpg
D:\test\img_back\king.jpg
D:\test\img_back\tiantian.jpg
D:\test\img_back\tp.jpg
D:\test\img_back\微信图片_20230923231912.jpg
D:\test\img_back\微信图片_20230923231958.jpg
D:\test\img_back\微信图片_20230923232430.jpg
D:\test\img_back\微信图片_20230923232603.jpg
D:\test\img_back\微信图片_20240307183537.jpg
D:\test\img_back\微信图片_20240307183553.jpg
D:\test\img_back\微信图片_20240307183602.jpg
D:\test\img_back\微信图片_20240307183610.jpg
D:\test\img_back\微信图片_20240307183619.jpg
D:\test\img_back\微信图片_20240307183626.jpg
30

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顺序表讲解

一.数据结构 在学习顺序表之前&#xff0c;我们先需要了解什么是数据结构。 1.什么是数据结构呢&#xff1f; 数据结构是由“数据”和结构两词组合而来。 什么是数据呢&#xff1f; 你的游戏账号&#xff0c;身份信息&#xff0c;网页里的信息&#xff08;文字&#xff0c…

构造析构理解与拷贝函数初识

1. 6个默认成员函数 ----初始化和清理{ 1.构造 2.析构 } -----拷贝复制{ 1.拷贝构造 2.赋值重载 } ------取地址重载{ 1.普通对象 2.const对象取地址 } 注&#xff1a;构造函数的目的是初始…

torchvision transforms 的二十二个方法

一、 裁剪Crop 1.随机裁剪&#xff1a;transforms.RandomCrop class torchvision.transforms.RandomCrop(size, paddingNone, pad_if_neededFalse, fill0, padding_modeconstant) 功能&#xff1a;依据给定的size随机裁剪 参数&#xff1a; size- (sequence or int)&#xff0…

珠海华发实业股份有限公司副总毛冰清莅临天府锋巢直播产业基地考察调研

3月19日&#xff0c;珠海华发实业股份有限公司副总毛冰清拜访天府锋巢直播产业基地&#xff08;以下简称天府锋巢&#xff09;&#xff0c;由产业招商总负责人姜国东进行接待。 基地建设情况 姜国东负责人介绍到&#xff0c;天府锋巢是由德商产投携手无锋科技于兴隆湖落地的成都…

Tmux 使用笔记

Tmux 是一个终端复用器&#xff08;terminal multiplexer&#xff09;&#xff0c;非常有用&#xff0c;属于常用的开发工具。 本文记录个人使用 Tmux的命令。 1. tmux简介 命令行的典型使用方式是&#xff0c;打开一个终端窗口&#xff0c;连接计算机&#xff0c;在里面输入…

Docker功能简单学习及使用

Docker是什么 Docker是一个快速构建&#xff0c;运行&#xff0c;管理应用的工具 传统基于linux安装程序较为复杂繁琐&#xff0c;使用docker可以快速的进行项目部署和管理 镜像与容器 Docker进行安装应用时&#xff0c;会自动搜索并下载应用镜像(image)。镜像不仅包含应用本…

每日一题 — 最大连续 1 的个数III

解法一&#xff1a;暴力枚举 先定义left和right双指针&#xff0c;left先固定在起始位置&#xff0c;遍历right当值等于1的时候&#xff0c;直接跳过&#xff0c;等于0的时候&#xff0c;zero计数器加一当zero等于k的时候&#xff0c;就开始记录此时最大长度是多少然后left加一…

Severt基本使用

severt是让我们自己写一些类,然后把这些类给加载Tomcat中&#xff0c;后续Tomcat收到HTTP请求(来自于浏览器)&#xff0c;就会执行到咱们上面写的代码.从而通过这些代码,完成一定的业务逻辑. 创建项目 此处创建的是一种新的项目的形式称为Maven项目,Maven是Java 中的一个的构建…

【Leetcode每日一题】模拟 - 数青蛙(难度⭐⭐)(51)

1. 题目解析 题目链接&#xff1a;1419. 数青蛙 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 一、模拟青蛙叫声的基本逻辑 在模拟青蛙叫声的过程中&#xff0c;我们需要遵循一定的规则来判断何时青蛙会发出声音。…

每日一题(leetcode2529):正整数和负整数的最大计数--二分法

因为需要O&#xff08;logn&#xff09;的复杂度&#xff0c;所以考虑使用二分法&#xff0c;先找到负数里面的最大下标&#xff08;初始值定为-1&#xff09;&#xff0c;再找到第一个正数的下标&#xff08;初始值定为数组长度值&#xff09;。最后求出个数并进行比较即可。 …

题目:学习使用按位与 。

题目&#xff1a;学习使用按位与 & 。   There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated shoul…

Netty 入门应用之Http服务WebSocket

Netty实现Http服务 主要的变化是在初始化器中引入了新的编解码器 一些创建的类作用和Netty HelloWorld的小demo一样我这里就不再次重复了 1、Http服务端代码 public class HttpServer {public static void main(String[] args) {// 创建Reactor// 用来管理channel 监听事件 …

Hot100【十一】:最大子数组和

// 定义dp&#xff1a;以i结尾的最大子数组和 dp[i] max(dp[i-1] nums[i],nums[i]) class Solution {public int maxSubArray(int[] nums) {// 1. 不需要特殊处理// 2. 定义dpint[] dp new int[nums.length];dp[0] nums[0];int maxResult nums[0];// 3. dp递推for (int i …

微服务面试题一

1.SOA、分布式、微服务之间有什么关系和区别&#xff1f; 分布式架构是指将单体架构中的各个部分拆分&#xff0c;然后部署不同的机器或进程中去&#xff0c;SOA和微服务基 本上都是分布式架构的SOA是⼀种⾯向服务的架构&#xff0c;系统的所有服务都注册在总线上&#xff0c;…

【leetcode面试经典150题】21. 反转字符串中的单词(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

TLF9471 - High-Speed CAN FD Transceiver

1 框图描述 2 功能描述 CAN收发器被设计用来承受汽车应用的恶劣条件&#xff0c;并支持12V应用。   SBC的控制器区域网络&#xff08;CAN&#xff09;收发器部分在汽车和工业应用中提供高速&#xff08;HS&#xff09;差分模式数据传输&#xff08;最高可达2Mbaud&#xff09…

【Java基础】BigDecimal使用避坑规范

BigDecimal使用 解决浮点型运算时&#xff0c;出现结果失真的问题&#xff0c;比如0.10.2 —示例— public class ErrorCase {public static void main(String[] args) {// 0.30000000000000004System.out.println(0.1 0.2);} }构造方法 把string转成BigDecimal把double转B…

备战蓝桥杯Day40 - 第11届python组真题 - C跑步锻炼

一、题目描述 二、思路 1、使用datetime库中的方法可以很好的解决这个问题。 2、定义起始时间和结束时间&#xff0c;判断是否是周一或者是1号&#xff0c;结果res加上相应的里程数。 3、最后输出 res 即为本题答案。 三、代码实现 import datetimestart datetime.date(2…

深度学习图像处理04:图像分类模型训练实战——动物分类

这篇博文不涉及理论知识&#xff0c;主要通过一个完整的深度学习模型训练流程&#xff0c;直观地了解深度学习图像分类任务。有关理论的部分&#xff0c;之前几篇博文已经涉及基础部分&#xff0c;之后也会对一些理论进行补充。 本文将结合代码&#xff0c;主要介绍三部分内容…

OpenHarmony应用编译 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境&#xff1a;Windows 11 编译环境&#xff1a;Ubuntu 22.04 开发板型号&#xff1a;DAYU 200&#xff08;RK3568&#xff09; 系统版本&#xff1a;OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…