使用zip对文件或文件夹进行压缩, 解压缩:
1. 》》 使用Java对文件或文件夹的压缩, 解压, 加密和解密. 加解密类型使用的是AES.
2. import
3. import
4. import
5. import
6. import
7. import
8. import
9.
10. /**
11. * 对文件或文件夹进行压缩和解压
12. *
13. */
14. public class
15. /**得到当前系统的分隔符*/
16. // private static String separator = System.getProperty("file.separator");
17.
18. /**
19. * 添加到压缩文件中
20. * @param out
21. * @param f
22. * @param base
23. * @throws Exception
24. */
25. private void directoryZip(ZipOutputStream out, File f, String base) throws
26. // 如果传入的是目录
27. if
28. File[] fl = f.listFiles();
29. // 创建压缩的子目录
30. new ZipEntry(base + "/"));
31. if (base.length() == 0) {
32. "";
33. else
34. "/";
35. }
36. for (int i = 0; i < fl.length; i++) {
37. directoryZip(out, fl[i], base + fl[i].getName());
38. }
39. else
40. // 把压缩文件加入rar中
41. new
42. new
43. byte[] bb = new byte[10240];
44. int aa = 0;
45. while ((aa = in.read(bb)) != -1) {
46. 0, aa);
47. }
48. in.close();
49. }
50. }
51.
52. /**
53. * 压缩文件
54. *
55. * @param zos
56. * @param file
57. * @throws Exception
58. */
59. private void fileZip(ZipOutputStream zos, File file) throws
60. if
61. new
62. new
63. byte[] bb = new byte[10240];
64. int aa = 0;
65. while ((aa = fis.read(bb)) != -1) {
66. 0, aa);
67. }
68. fis.close();
69. System.out.println(file.getName());
70. else
71. "");
72. }
73. }
74.
75. /**
76. * 解压缩文件
77. *
78. * @param zis
79. * @param file
80. * @throws Exception
81. */
82. private void fileUnZip(ZipInputStream zis, File file) throws
83. ZipEntry zip = zis.getNextEntry();
84. if (zip == null)
85. return;
86. String name = zip.getName();
87. new File(file.getAbsolutePath() + "/"
88. if
89. f.mkdirs();
90. fileUnZip(zis, file);
91. else
92. f.createNewFile();
93. new
94. byte b[] = new byte[10240];
95. int aa = 0;
96. while ((aa = zis.read(b)) != -1) {
97. 0, aa);
98. }
99. fos.close();
100. fileUnZip(zis, file);
101. }
102. }
103.
104. /**
105. * 根据filePath创建相应的目录
106. * @param filePath
107. * @return
108. * @throws IOException
109. */
110. private File mkdirFiles(String filePath) throws
111. new
112. if(!file.getParentFile().exists()){
113. file.getParentFile().mkdirs();
114. }
115. file.createNewFile();
116.
117. return
118. }
119.
120. /**
121. * 对zipBeforeFile目录下的文件压缩,保存为指定的文件zipAfterFile
122. *
123. * @param zipBeforeFile 压缩之前的文件
124. * @param zipAfterFile 压缩之后的文件
125. */
126. public void
127. try
128.
129. new ZipOutputStream(new
130. new
131. zos.close();
132. catch
133. e.printStackTrace();
134. }
135. }
136.
137. /**
138. * 解压缩文件unZipBeforeFile保存在unZipAfterFile目录下
139. *
140. * @param unZipBeforeFile 解压之前的文件
141. * @param unZipAfterFile 解压之后的文件
142. */
143. public void
144. try
145. new ZipInputStream(new
146. new
147. f.mkdirs();
148. fileUnZip(zis, f);
149. zis.close();
150. catch
151. e.printStackTrace();
152. }
153. }
154. }
使用AES对文件的加解密:
1. import
2. import
3. import
4. import
5. import
6. import
7.
8. import
9. import
10. import
11. import
12.
13. /**
14. * 使用AES对文件进行加密和解密
15. *
16. */
17. public class
18. /**
19. * 使用AES对文件进行加密和解密
20. *
21. */
22. private static String type = "AES";
23.
24. /**
25. * 把文件srcFile加密后存储为destFile
26. * @param srcFile 加密前的文件
27. * @param destFile 加密后的文件
28. * @param privateKey 密钥
29. * @throws GeneralSecurityException
30. * @throws IOException
31. */
32. public void encrypt(String srcFile, String destFile, String privateKey) throws
33. Key key = getKey(privateKey);
34. "/ECB/PKCS5Padding");
35. cipher.init(Cipher.ENCRYPT_MODE, key);
36.
37. null;
38. null;
39. try
40. new
41. new
42.
43. crypt(fis, fos, cipher);
44. catch
45. e.printStackTrace();
46. catch
47. e.printStackTrace();
48. finally
49. if (fis != null) {
50. fis.close();
51. }
52. if (fos != null) {
53. fos.close();
54. }
55. }
56. }
57.
58. /**
59. * 把文件srcFile解密后存储为destFile
60. * @param srcFile 解密前的文件
61. * @param destFile 解密后的文件
62. * @param privateKey 密钥
63. * @throws GeneralSecurityException
64. * @throws IOException
65. */
66. public void decrypt(String srcFile, String destFile, String privateKey) throws
67. Key key = getKey(privateKey);
68. "/ECB/PKCS5Padding");
69. cipher.init(Cipher.DECRYPT_MODE, key);
70.
71. null;
72. null;
73. try
74. new
75. new
76.
77. crypt(fis, fos, cipher);
78. catch
79. e.printStackTrace();
80. catch
81. e.printStackTrace();
82. finally
83. if (fis != null) {
84. fis.close();
85. }
86. if (fos != null) {
87. fos.close();
88. }
89. }
90. }
91.
92. /**
93. * 根据filePath创建相应的目录
94. * @param filePath 要创建的文件路经
95. * @return file 文件
96. * @throws IOException
97. */
98. private File mkdirFiles(String filePath) throws
99. new
100. if
101. file.getParentFile().mkdirs();
102. }
103. file.createNewFile();
104.
105. return
106. }
107.
108. /**
109. * 生成指定字符串的密钥
110. * @param secret 要生成密钥的字符串
111. * @return secretKey 生成后的密钥
112. * @throws GeneralSecurityException
113. */
114. private static Key getKey(String secret) throws
115. KeyGenerator kgen = KeyGenerator.getInstance(type);
116. 128, new
117. SecretKey secretKey = kgen.generateKey();
118. return
119. }
120.
121. /**
122. * 加密解密流
123. * @param in 加密解密前的流
124. * @param out 加密解密后的流
125. * @param cipher 加密解密
126. * @throws IOException
127. * @throws GeneralSecurityException
128. */
129. private static void crypt(InputStream in, OutputStream out, Cipher cipher) throws
130. int blockSize = cipher.getBlockSize() * 1000;
131. int
132.
133. byte[] inBytes = new byte[blockSize];
134. byte[] outBytes = new byte[outputSize];
135.
136. int inLength = 0;
137. boolean more = true;
138. while
139. inLength = in.read(inBytes);
140. if
141. int outLength = cipher.update(inBytes, 0, blockSize, outBytes);
142. 0, outLength);
143. else
144. false;
145. }
146. }
147. if (inLength > 0)
148. 0, inLength);
149. else
150. outBytes = cipher.doFinal();
151. out.write(outBytes);
152. }
153. }
对文件或文件夹进行压缩解压加密解密:
1. import
2. import
3.
4. public class
5. /**
6. * 对目录srcFile下的所有文件目录进行先压缩后加密,然后保存为destfile
7. *
8. * @param srcFile
9. * 要操作的文件或文件夹
10. * @param destfile
11. * 压缩加密后存放的文件
12. * @param keyfile
13. * 密钥
14. */
15. public void encryptZip(String srcFile, String destfile, String keyStr) throws
16. new File(UUID.randomUUID().toString() + ".zip");
17. temp.deleteOnExit();
18. // 先压缩文件
19. new
20. // 对文件加密
21. new
22. temp.delete();
23. }
24.
25. /**
26. * 对文件srcfile进行先解密后解压缩,然后解压缩到目录destfile下
27. *
28. * @param srcfile
29. * 要解密和解压缩的文件名
30. * @param destfile
31. * 解压缩后的目录
32. * @param publicKey
33. * 密钥
34. */
35. public void decryptUnzip(String srcfile, String destfile, String keyStr) throws
36. new File(UUID.randomUUID().toString() + ".zip");
37. temp.deleteOnExit();
38. // 先对文件解密
39. new
40. // 解压缩
41. new
42. temp.delete();
43. }
44.
45. public static void main(String[] args) throws
46. long
47.
48. //加密
49. // new ZipCipherUtil().encryptZip("d:\\test\\111.jpg", "d:\\test\\photo.zip", "12345");
50. //解密
51. new ZipCipherUtil().decryptUnzip("d:\\test\\photo.zip", "d:\\test\\111_1.jpg", "12345");
52.
53. long
54. "毫秒.");
55. 1000) + "秒.");
56. }
57. }
》》》使用Java对文件加密和解密
|