wallpaper视频一键转移
功能
将wallpaper目录下面的视频转移到自己所需的目录下面
使用
三个输入:
第一个是输入的wallpaper存放壁纸的地址
其中地址就为
E:\steam\Steam\steamapps\workshop\content\431960
如果不知道也可以右键壁纸查看
第二个输入的是下载的时间,
意思就是从哪个时间开始的壁纸,就比如2022-12-4-19-0,就会找12月4号下午七点以后下载的壁纸
第三个输入的是存放地址
这个就填要存放在哪里的地址。可以是电脑的,也可以把手机连上直接下载
所需依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
更新了方法
使用了线程池,线程池的数量等于cpu核处理速度最快 使用了Files.copy方法,使用该方法在复制小文件的过程中速度比BufferedInputStream更快 使用了synchronizedList来统计文件的个数,因为此集合是线程安全的。
package com.company; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import java.io.*; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.*; public class WallPaper { private static final ExecutorService executor = Executors.newFixedThreadPool(6); public static void main(String[] args) throws ParseException, InterruptedException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm"); List<String> list = Collections.synchronizedList(new ArrayList<String>()); Scanner scanner = new Scanner(System.in); System.out.println("请输入wallpaper下载的地址"); String str = scanner.next(); File sfile = new File(str); System.out.println("请输入时间(格式为:年-月-日-小时-分钟)"); String time = scanner.next(); Date date = sdf.parse(time); System.out.println("请输入需要存放的地址"); String str2 = scanner.next(); File tfile = new File(str2); if (!tfile.exists() && !tfile.isDirectory()) { tfile = new File(tfile.getParentFile(), "wallpaper下载的视频"); System.out.println(tfile.getAbsolutePath()); tfile.mkdirs(); } if (!sfile.exists() && !sfile.isDirectory()) { System.out.println("地址不对哦"); return; } if (sfile.isDirectory()) { File[] fs = sfile.listFiles(); File finalTfile = tfile; int tmp = 0; assert fs != null; /** * *先统计文件的个数 */ for (File x : fs) { Date date1 = new Date(x.lastModified()); if (date1.compareTo(date) > 0) { boolean flag = false; String needFilename = x.getAbsolutePath() + "\\project.json"; if (new File(needFilename).exists()) { flag = isNeedFile(needFilename); } if (flag) { tmp++; } } } CountDownLatch cdl = new CountDownLatch(tmp); /** *多线程进行复制 */ Date startDate = new Date(); for (File x : fs) { executor.submit( () -> { Date date1 = new Date(x.lastModified()); if (date1.compareTo(date) > 0) { boolean flag = false; String needFilename = x.getAbsolutePath() + "\\project.json"; if (new File(needFilename).exists()) { flag = isNeedFile(needFilename); } if (flag) { String filename = x.getAbsolutePath() + "\\" + Filename(needFilename); File tf = new File(finalTfile.getAbsoluteFile() + "\\" + Filename(needFilename)); try { copyfile(new File(filename), tf); synchronized (list){ list.add("成功"); } System.out.println("将 " + Filename(needFilename) + " 复制到 " + finalTfile.getAbsolutePath() + " 中"); } catch (IOException e) { e.printStackTrace(); System.out.println(Filename(needFilename) + "复制失败"); } cdl.countDown(); } } }); } cdl.await(); executor.shutdown(); System.out.println("复制完成,共" + list.size() + "个文件"); Date endDate = new Date(); System.out.println(endDate.getTime()-startDate.getTime()); } else { System.out.println("地址不对哦"); } } //复制文件 public synchronized static void copyfile(File fs, File ft) throws IOException { if (ft.exists()) { System.out.println(ft.getName() + "重复...." + "正在删除"); ft.delete(); } Files.copy(fs.toPath(),ft.toPath(),StandardCopyOption.REPLACE_EXISTING); // FileInputStream fi = new FileInputStream(fs); // FileOutputStream fo = new FileOutputStream(ft); // BufferedInputStream bfi = null; // BufferedOutputStream bfo = null; // bfi = new BufferedInputStream(fi); // bfo = new BufferedOutputStream(fo); // int count = -1; // while ((count = bfi.read()) != -1) { // bfo.write(count); // } // bfo.flush(); // bfo.close(); // bfi.close(); } //查找是否是所需的视频文件 public static boolean isNeedFile(String filename) { String s = readJsonFile(filename); JSONObject jobj = JSON.parseObject(s); if (jobj.get("contentrating") != null && !jobj.get("contentrating").equals("")) return jobj.get("contentrating").toString().equals("Mature") && (jobj.get("type").toString().equals("Video") || jobj.get("type").toString().equals("video")); return false; } public static String Filename(String filename) { String s = readJsonFile(filename); JSONObject jobj = JSON.parseObject(s); return jobj.get("file").toString(); } //读取json文件 public static String readJsonFile(String fileName) { String jsonStr = ""; try { File jsonFile = new File(fileName); FileReader fileReader = new FileReader(jsonFile); Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8"); int ch = 0; StringBuffer sb = new StringBuffer(); while ((ch = reader.read()) != -1) { sb.append((char) ch); } fileReader.close(); reader.close(); jsonStr = sb.toString(); return jsonStr; } catch (IOException e) { e.printStackTrace(); return null; } } }
__EOF__
本文作者:Reisen7
本文链接:https://www.cnblogs.com/reisen7/p/18547118.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/reisen7/p/18547118.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?