关键词搜索

源码搜索 ×
×

windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。

发布2021-12-01浏览2946次

详情内容

1、 需求

我想把资源文件先加密成压缩文件,然后同时创建每个加密压缩文件同名的文件夹,同时需要把这个加密文件拷贝到这个同名的文件夹,然后还需要把一个图片和一个文本文档同时放进这个文件夹,然后在不加密压缩这个文件夹,上传资源到百度网盘。

2、思路

1)、windows环境用python来实现,能实现生成同名文件夹,然后拷贝文件的时候中文名的文件拷贝都文件夹有问题,估计是编码格式不对,对python不是很熟悉,然后放弃python来处理。

2)、用java来实现,遍历加密文件,然后创建同名(不带后缀)的文件夹,然后把这个加密文件拷贝到这个文件夹,然后删除加密文件,再拷贝图片和文本到这个加密文件夹。

3、具体代码实现过程

1)、批量加密文件

windows环境批量加密文件,我们在需要加密的文件目录新建1.bat文件,内容如下

for %%X in (*) do "C:\Program Files\7-Zip\7z.exe" a "%%~dpnX.7z" "%%X" -pcch1233nxecc -mhe -mx=0

注意这里-p后面是密码,这里的密码是cch1233nxecc,用户可以自己设置,点击1.bat就能加密批量压缩。

2)、把压缩成7z的文件手动拿出来,放到一个文件夹里面去,我放在这个目录

F:\didi1\all11_30\C++

3)、用java代码实现创建文件夹,然后放拷贝文件进去,然后删除加密文件,然后拷贝具体图片和文本文档到这个文件夹,解压密码图片和文本地址如下

  1. F:\\didi1\\all11_30\\解压密码.png
  2. F:\\didi1\\all11_30\\计算机40多个方向1000多个电子书.txt

代码实现如下

  1. package com.chenyu;
  2. import java.io.File;
  3. public class Test {
  4. public static void main(String[] args)
  5. {
  6. System.out.println("chen");
  7. String path = "F:\\didi1\\all11_30\\C++";
  8. File decodePwdPngFile = new File("F:\\didi1\\all11_30\\解压密码.png");
  9. File txtFile = new File("F:\\didi1\\all11_30\\计算机40多个方向1000多个电子书.txt");
  10. FileUtil.handleFile(path, decodePwdPngFile, txtFile);
  11. }
  12. }

FileUtil.java文件如下 

  1. package com.chenyu;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.InputStreamReader;
  9. import java.nio.channels.FileChannel;
  10. public class FileUtil {
  11. /**
  12. * 创建新的文件夹
  13. * @param file
  14. * @return
  15. */
  16. public static String getNewDirectoryPath(File file) {
  17. if (file == null)
  18. return "chenyu";
  19. String dirPath = file.getAbsolutePath() + File.separator + file.getName();
  20. if (dirPath.contains(".")) {
  21. int index = dirPath.indexOf('.');
  22. dirPath = dirPath.substring(0, index);
  23. } else {
  24. dirPath = dirPath + "1";
  25. }
  26. return dirPath;
  27. }
  28. /**
  29. * 处理文件,创建文件夹,然后拷贝文件进去
  30. * @param path
  31. */
  32. public static void handleFile(String path, File decodePwdPngFile, File txtFile) {
  33. if (path == null || "".equals(path) || decodePwdPngFile == null || txtFile == null)
  34. return;
  35. File file = new File(path);
  36. if (!file.exists())
  37. return;
  38. File[] files = file.listFiles();
  39. if (files == null || files.length == 0)
  40. return;
  41. try {
  42. for (File childFile : files) {
  43. if (childFile.isDirectory()) {
  44. System.out.println("文件夹路径是:" + childFile.getAbsolutePath());
  45. handleFile(childFile.getAbsolutePath(), decodePwdPngFile, txtFile);
  46. } else {
  47. System.out.println("文件路径是:" + childFile.getAbsolutePath());
  48. if (childFile.getAbsolutePath() == null)
  49. return;
  50. if (childFile.getName() == null)
  51. return;
  52. //得到新的目录
  53. String dirPath = getNewDirectoryPath(childFile);
  54. System.out.println("dirPath路径是:" + dirPath);
  55. File fileDir = new File(dirPath);
  56. //创建新的目录
  57. if (!fileDir.exists()) {
  58. fileDir.mkdirs();
  59. }
  60. //构建资源zip文件
  61. File fileTmp = new File(dirPath, childFile.getName());
  62. if (!fileTmp.exists()) {
  63. fileTmp.createNewFile();
  64. }
  65. //复制资源zip文件到新的文件夹
  66. copyFile(childFile, fileTmp);
  67. //删除zip文件
  68. childFile.delete();
  69. //拷贝图片到这个dirPath目录来
  70. File decodePwdPng = new File(dirPath, "解压密码.png");
  71. if (!decodePwdPng.exists()) {
  72. decodePwdPng.createNewFile();
  73. }
  74. copyFile(decodePwdPngFile, decodePwdPng);
  75. //拷贝txt文件到这个dirPath目录来
  76. File newTxtFile = new File(dirPath, "计算机40多个方向1000多个电子书.txt");
  77. if (!newTxtFile.exists()) {
  78. newTxtFile.createNewFile();
  79. }
  80. copyFile(txtFile, newTxtFile);
  81. }
  82. }
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. }
  86. }
  87. /**
  88. * 文件复制
  89. * @param srcFile
  90. * @param dstFile
  91. * @throws IOException
  92. */
  93. public static void copyFile(File srcFile, File dstFile) throws IOException {
  94. if (srcFile == null || !srcFile.exists()) {
  95. return;
  96. }
  97. if (dstFile == null || !dstFile.exists()) {
  98. return;
  99. }
  100. FileInputStream fileIns = null;
  101. FileOutputStream fileOuts = null;
  102. FileChannel source = null;
  103. FileChannel destination = null;
  104. try {
  105. fileIns = new FileInputStream(srcFile);
  106. fileOuts = new FileOutputStream(dstFile);
  107. source = fileIns.getChannel();
  108. destination = fileOuts.getChannel();
  109. destination.transferFrom(source, 0, source.size());
  110. } catch (Exception e) {
  111. e.printStackTrace();
  112. } finally {
  113. if (fileIns != null)
  114. fileIns.close();
  115. if (fileOuts != null)
  116. fileOuts.close();
  117. if (source != null)
  118. source.close();
  119. if (destination != null)
  120. destination.close();
  121. }
  122. }
  123. }

  控制台打印

  1. chen
  2. 文件路径是:F:\didi1\all11_30\C++\C++ Primer Plus中文版.7z
  3. dirPath路径是:F:\didi1\all11_30\C++\C++ Primer Plus中文版
  4. 文件路径是:F:\didi1\all11_30\C++\C专家编程.7z
  5. dirPath路径是:F:\didi1\all11_30\C++\C专家编程
  6. 文件路径是:F:\didi1\all11_30\C++\C和指针(第二版)高清.7z
  7. dirPath路径是:F:\didi1\all11_30\C++\C和指针(第二版)高清
  8. 文件路径是:F:\didi1\all11_30\C++\C语言深度解剖.7z
  9. dirPath路径是:F:\didi1\all11_30\C++\C语言深度解剖
  10. 文件路径是:F:\didi1\all11_30\C++\C陷阱与缺陷.7z
  11. dirPath路径是:F:\didi1\all11_30\C++\C陷阱与缺陷
  12. 文件路径是:F:\didi1\all11_30\C++\Effective C 中文版.7z
  13. dirPath路径是:F:\didi1\all11_30\C++\Effective C 中文版
  14. 文件路径是:F:\didi1\all11_30\C++\Effective C++(第三版中文版).7z
  15. dirPath路径是:F:\didi1\all11_30\C++\Effective C++(第三版中文版)
  16. 文件路径是:F:\didi1\all11_30\C++\Effective STL(中文版).7z
  17. dirPath路径是:F:\didi1\all11_30\C++\Effective STL(中文版)
  18. 文件路径是:F:\didi1\all11_30\C++\LinuxC编程一站式学习.7z
  19. dirPath路径是:F:\didi1\all11_30\C++\LinuxC编程一站式学习
  20. 文件路径是:F:\didi1\all11_30\C++\More Effective C++.7z
  21. dirPath路径是:F:\didi1\all11_30\C++\More Effective C++
  22. 文件路径是:F:\didi1\all11_30\C++\STL源码剖析(侯捷译).7z
  23. dirPath路径是:F:\didi1\all11_30\C++\STL源码剖析(侯捷译)
  24. 文件路径是:F:\didi1\all11_30\C++\UNIX编程艺术(中文).7z
  25. dirPath路径是:F:\didi1\all11_30\C++\UNIX编程艺术(中文)
  26. 文件路径是:F:\didi1\all11_30\C++\中文版:C++Primer(第三版).7z
  27. dirPath路径是:F:\didi1\all11_30\C++\中文版:C++Primer(第三版)

这里就可以得到我们的结果了

 

但是我们还需要再把这个文件夹批量不加密压缩,我们依然还是新建2.bat,内容如下

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X\"

点击2.bat文件,效果如下

这里的内容就是我们需要的内容,然后我们需要批量单个上传,我有工具,非常方便。

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载