Skip to content

Commit 94fe691

Browse files
committed
see 08/21 log
1 parent 954b97f commit 94fe691

File tree

15 files changed

+304
-118
lines changed

15 files changed

+304
-118
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
> - AES解密 *decryptAES*
6767
6868
> - **文件相关→[FileUtils.java][file.java][Test][file.test]**
69+
> - 关闭IO *closeIO*
6970
> - 根据文件路径获取文件 *getFileByPath*
7071
> - 判断文件是否存在 *isFileExists*
7172
> - 判断是否是目录 *isDir*
@@ -214,7 +215,7 @@
214215
***
215216
Gradle:
216217
``` groovy
217-
compile 'com.blankj:utilcode:1.1.1'
218+
compile 'com.blankj:utilcode:1.1.2'
218219
```
219220

220221
### Proguard

update_log.md

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
### 更新Log
2-
#### 16/08/19 更新目录,继续完善FileUtils
3-
#### 16/08/19 继续完善FileUtils及单元测试
4-
#### 16/08/18 完善FileUtils及单元测试,完善ImageUtils
5-
#### 16/08/17 完善FileUtils
6-
#### 16/08/16 新增StringUtils及单元测试,完善正则工具类,版本更新1.1.0
7-
#### 16/08/15 新增3DES和AES加密及单元检测,加密解密工具类基本完善,目录更新
8-
#### 16/08/14 新增DES加密及单元检测
9-
#### 16/08/13 新增MD2,SHA224,SHA256,SHA384,SHA512加密及单元测试,正折腾DES加密
10-
#### 16/08/12 新增Base64和Html编码解码及他们的单元测试,新增TimeUtils单元测试,更新md
11-
#### 16/08/11 新增SDCardUtils,UnitUtils,单元测试慢慢完善中
12-
#### 16/08/09 目录排版更新,新增Download,Proguard和License
13-
#### 16/08/08 新增Shell工具类,已传jcenter()遇到好多坑,javaDoc惹的祸,注释一定要规范
14-
#### 16/08/07 新增6.0获取Mac地址方法,新增对HTML转义,新增编码解码工具类,新增SP工具类
15-
#### 16/08/06 重命名包名,新增加密相关的单元测试,MD5加密新增文件加密重载
16-
#### 16/08/05 加密新增MD5盐加密,完善NetworkUtils,新增判断状态栏是否存在(在此感谢tiandawu)
17-
#### 16/08/04 新增时间工具类(在此感谢yi520000给的补充),手机正则分简单和精确(在此感谢MIkeeJY),新增判断是否锁屏,注释分段落,目录按首字母排序
18-
#### 16/08/03 修复在onCreate中获取view尺寸的bug,MD5和SHA的Bug修复完成(在此感谢ssyijiu)
19-
#### 16/08/02 wifi设置界面bug修复,注释排版还在修改,获取mac地址增加判空,新增QQ群:74721490,欢迎加入,新增隐藏状态栏,注释更加全面,工具类已封装,写的时候真的是一个一个测试过去的,宝宝心里苦
20-
#### 16/08/01 新增获取SD卡路径,手机和设备进行分类,代码bug修改部分,小修排版,正在封装类,新增目录中显示方法名,新增获取当前App版本Code
1+
### 更新Log
2+
#### 16/08/21 FileUtils单元测试完毕,修复FileUtils的bug,发布版本1.1.2
3+
#### 16/08/20 更新目录,继续完善FileUtils单元测试,发布版本1.1.1
4+
#### 16/08/19 继续完善FileUtils及单元测试,及其他小修小补(在此感谢vpop的三次Pr)
5+
#### 16/08/18 完善FileUtils及单元测试,完善ImageUtils
6+
#### 16/08/17 完善FileUtils
7+
#### 16/08/16 新增StringUtils及单元测试,完善正则工具类,版本更新1.1.0
8+
#### 16/08/15 新增3DES和AES加密及单元检测,加密解密工具类基本完善,目录更新
9+
#### 16/08/14 新增DES加密及单元检测
10+
#### 16/08/13 新增MD2,SHA224,SHA256,SHA384,SHA512加密及单元测试,正折腾DES加密
11+
#### 16/08/12 新增Base64和Html编码解码及他们的单元测试,新增TimeUtils单元测试,更新md
12+
#### 16/08/11 新增SDCardUtils,UnitUtils,单元测试慢慢完善中
13+
#### 16/08/09 目录排版更新,新增Download,Proguard和License
14+
#### 16/08/08 新增Shell工具类,已传jcenter()遇到好多坑,javaDoc惹的祸,注释一定要规范
15+
#### 16/08/07 新增6.0获取Mac地址方法,新增对HTML转义,新增编码解码工具类,新增SP工具类
16+
#### 16/08/06 重命名包名,新增加密相关的单元测试,MD5加密新增文件加密重载
17+
#### 16/08/05 加密新增MD5盐加密,完善NetworkUtils,新增判断状态栏是否存在(在此感谢tiandawu)
18+
#### 16/08/04 新增时间工具类(在此感谢yi520000给的补充),手机正则分简单和精确(在此感谢MIkeeJY),新增判断是否锁屏,注释分段落,目录按首字母排序
19+
#### 16/08/03 修复在onCreate中获取view尺寸的bug,MD5和SHA的Bug修复完成(在此感谢ssyijiu)
20+
#### 16/08/02 wifi设置界面bug修复,注释排版还在修改,获取mac地址增加判空,新增QQ群:74721490,欢迎加入,新增隐藏状态栏,注释更加全面,工具类已封装,写的时候真的是一个一个测试过去的,宝宝心里苦
21+
#### 16/08/01 新增获取SD卡路径,手机和设备进行分类,代码bug修改部分,小修排版,正在封装类,新增目录中显示方法名,新增获取当前App版本Code
2122
#### 16/07/31 新增点击屏幕空白区域隐藏软键盘,未能成功增加本页目录跳转功能(不支持)

utilcode/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
defaultConfig {
88
minSdkVersion 11
99
targetSdkVersion 23
10-
versionCode 3
11-
versionName "1.1.1"
10+
versionCode 4
11+
versionName "1.1.2"
1212
}
1313
buildTypes {
1414
release {

utilcode/proguard-rules.pro

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@
1515
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
1616
# public *;
1717
#}
18+
19+
#-keep class com.blankj.utilcode.** { *; }
20+
#-keepclassmembers class com.blankj.utilcode.** { *; }
21+
#-dontwarn com.blankj.utilcode.**

utilcode/src/main/java/com/blankj/utilcode/utils/FileUtils.java

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ private FileUtils() {
3434
}
3535

3636
/**
37+
* 关闭IO
38+
*
3739
* @param closeable closeable
3840
*/
39-
private static void closeIO(Closeable closeable) {
41+
public static void closeIO(Closeable closeable) {
4042
if (closeable == null) return;
4143
try {
4244
closeable.close();
@@ -132,7 +134,8 @@ public static boolean createOrExistsDir(String dirPath) {
132134
* @return {@code true}: 存在或创建成功<br>{@code false}: 不存在或创建失败
133135
*/
134136
public static boolean createOrExistsDir(File file) {
135-
return file != null && (file.exists() && file.isDirectory() || file.mkdirs());
137+
// 如果存在,是目录则返回true,是文件则返回false,不存在则返回是否创建成功
138+
return file != null && (file.exists() ? file.isDirectory() : file.mkdirs());
136139
}
137140

138141
/**
@@ -153,7 +156,8 @@ public static boolean createOrExistsFile(String filePath) {
153156
*/
154157
public static boolean createOrExistsFile(File file) {
155158
if (file == null) return false;
156-
if (file.exists() && file.isFile()) return true;
159+
// 如果存在,是文件则返回true,是目录则返回false
160+
if (file.exists()) return file.isFile();
157161
if (!createOrExistsDir(file.getParentFile())) return false;
158162
try {
159163
return file.createNewFile();
@@ -215,22 +219,29 @@ private static boolean copyOrMoveDir(String srcDirPath, String destDirPath, bool
215219
*/
216220
private static boolean copyOrMoveDir(File srcDir, File destDir, boolean isMove) {
217221
if (srcDir == null || destDir == null) return false;
222+
// 如果目标目录在源目录中则返回false,看不懂的话好好想想递归怎么结束
223+
// srcPath : F:\\MyGithub\\AndroidUtilCode\\utilcode\\src\\test\\res
224+
// destPath: F:\\MyGithub\\AndroidUtilCode\\utilcode\\src\\test\\res1
225+
// 为防止以上这种情况出现出现误判,须分别在后面加个路径分隔符
226+
String srcPath = srcDir.getPath() + File.separator;
227+
String destPath = destDir.getPath() + File.separator;
228+
if (destPath.contains(srcPath)) return false;
218229
// 源文件不存在或者不是目录则返回false
219230
if (!srcDir.exists() || !srcDir.isDirectory()) return false;
220231
// 目标目录不存在返回false
221232
if (!createOrExistsDir(destDir)) return false;
222-
File[] srcDirFiles = srcDir.listFiles();
223-
for (File srcDirFile : srcDirFiles) {
224-
File oneDestFile = new File(destDir.getPath() + File.separator
225-
+ srcDirFile.getName());
226-
if (srcDirFile.isFile()) {
227-
copyOrMoveFile(srcDirFile, oneDestFile, isMove);
228-
} else if (srcDirFile.isDirectory()) {
229-
copyOrMoveDir(srcDirFile, oneDestFile, isMove);
233+
File[] files = srcDir.listFiles();
234+
for (File file : files) {
235+
File oneDestFile = new File(destPath + file.getName());
236+
if (file.isFile()) {
237+
// 如果操作失败返回false
238+
if (!copyOrMoveFile(file, oneDestFile, isMove)) return false;
239+
} else if (file.isDirectory()) {
240+
// 如果操作失败返回false
241+
if (!copyOrMoveDir(file, oneDestFile, isMove)) return false;
230242
}
231-
if (isMove && !deleteFile(srcDirFile)) return false;
232243
}
233-
return true;
244+
return !isMove || deleteDir(srcDir);
234245
}
235246

236247
/**
@@ -262,7 +273,8 @@ private static boolean copyOrMoveFile(File srcFile, File destFile, boolean isMov
262273
// 目标目录不存在返回false
263274
if (!createOrExistsDir(destFile.getParentFile())) return false;
264275
try {
265-
return writeFileFromIS(destFile, new FileInputStream(srcFile), false) && !(isMove && !deleteFile(srcFile));
276+
return writeFileFromIS(destFile, new FileInputStream(srcFile), false)
277+
&& !(isMove && !deleteFile(srcFile));
266278
} catch (FileNotFoundException e) {
267279
e.printStackTrace();
268280
return false;
@@ -276,8 +288,8 @@ private static boolean copyOrMoveFile(File srcFile, File destFile, boolean isMov
276288
* @param destDirPath 目标目录路径
277289
* @return {@code true}: 复制成功<br>{@code false}: 复制失败
278290
*/
279-
public boolean copyDir(String srcDirPath, String destDirPath) {
280-
return moveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));
291+
public static boolean copyDir(String srcDirPath, String destDirPath) {
292+
return copyDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));
281293
}
282294

283295
/**
@@ -296,7 +308,7 @@ public static boolean copyDir(File srcDir, File destDir) {
296308
*
297309
* @param srcFilePath 源文件路径
298310
* @param destFilePath 目标文件路径
299-
* @return {@code true}: 复制拷贝成功<br>{@code false}: 复制失败
311+
* @return {@code true}: 复制成功<br>{@code false}: 复制失败
300312
*/
301313
public static boolean copyFile(String srcFilePath, String destFilePath) {
302314
return copyFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));
@@ -320,7 +332,7 @@ public static boolean copyFile(File srcFile, File destFile) {
320332
* @param destDirPath 目标目录路径
321333
* @return {@code true}: 移动成功<br>{@code false}: 移动失败
322334
*/
323-
public boolean moveDir(String srcDirPath, String destDirPath) {
335+
public static boolean moveDir(String srcDirPath, String destDirPath) {
324336
return moveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));
325337
}
326338

@@ -363,7 +375,7 @@ public static boolean moveFile(File srcFile, File destFile) {
363375
* @param dirPath 目录路径
364376
* @return {@code true}: 删除成功<br>{@code false}: 删除失败
365377
*/
366-
public boolean deleteDir(String dirPath) {
378+
public static boolean deleteDir(String dirPath) {
367379
return deleteDir(getFileByPath(dirPath));
368380
}
369381

@@ -373,9 +385,11 @@ public boolean deleteDir(String dirPath) {
373385
* @param dir 目录
374386
* @return {@code true}: 删除成功<br>{@code false}: 删除失败
375387
*/
376-
public boolean deleteDir(File dir) {
388+
public static boolean deleteDir(File dir) {
377389
if (dir == null) return false;
390+
// 目录不存在返回true
378391
if (!dir.exists()) return true;
392+
// 不是目录返回false
379393
if (!dir.isDirectory()) return false;
380394
// 现在文件存在且是文件夹
381395
File[] files = dir.listFiles();
@@ -436,7 +450,10 @@ public static boolean writeFileFromIS(File file, InputStream is, boolean append)
436450
try {
437451
os = new BufferedOutputStream(new FileOutputStream(file, append));
438452
byte data[] = new byte[KB];
439-
while (is.read(data) != -1) os.write(data);
453+
int len;
454+
while ((len = is.read(data)) != -1) {
455+
os.write(data, 0, len);
456+
}
440457
return true;
441458
} catch (IOException e) {
442459
e.printStackTrace();
@@ -589,7 +606,8 @@ public static List<String> readFile2List(File file, String charsetName) {
589606
* @param charsetName 编码格式
590607
* @return 包含制定行的list
591608
*/
592-
public static List<String> readFile2List(String filePath, int start, int end, String charsetName) {
609+
public static List<String> readFile2List(String filePath, int start, int end, String
610+
charsetName) {
593611
return readFile2List(getFileByPath(filePath), start, end, charsetName);
594612
}
595613

@@ -653,7 +671,12 @@ public static StringBuilder readFile2SB(File file, String charsetName) {
653671
BufferedReader reader = null;
654672
try {
655673
sb = new StringBuilder();
656-
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charsetName));
674+
if (StringUtils.isSpace(charsetName)) {
675+
reader = new BufferedReader(new FileReader(file));
676+
} else {
677+
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),
678+
charsetName));
679+
}
657680
String line;
658681
while ((line = reader.readLine()) != null) {
659682
sb.append(line);

utilcode/src/test/java/com/blankj/utilcode/utils/EncryptUtilsTest.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ public class EncryptUtilsTest {
2929
String blankjSHA1 = "C606ACCB1FEB669E19D080ADDDDBB8E6CDA5F43C";
3030
String blankjSHA224 = "F4C5C0E8CF56CAC4D06DB6B523F67621859A9D79BDA4B2AC03097D5F";
3131
String blankjSHA256 = "8BD80AE90DFBA112786367BEBDDEE60A638EF5B82682EDF8F3D3CA8E6BFEF648";
32-
String blankjSHA384 = "BF831E5221FC108D6A72ACB888BA3EB0C030A5F01BA2F739856BE70681D86F992B85E0D461101C74BAEDA895BD422557";
33-
String blankjSHA512 = "D59D31067F614ED3586F85A31FEFDB7F33096316DA26EBE0FF440B241C8560D96650F100D78C512560C976949EFA89CB5D5589DCF68C7FAADE98F03BCFEC2B45";
32+
String blankjSHA384 =
33+
"BF831E5221FC108D6A72ACB888BA3EB0C030A5F01BA2F739856BE70681D86F992B85E0D461101C74BAEDA895BD422557";
34+
String blankjSHA512 =
35+
"D59D31067F614ED3586F85A31FEFDB7F33096316DA26EBE0FF440B241C8560D96650F100D78C512560C976949EFA89CB5D5589DCF68C7FAADE98F03BCFEC2B45";
3436

3537
@Test
3638
public void testEncryptMD2() throws Exception {
@@ -92,14 +94,16 @@ public void testEncryptSHA512() throws Exception {
9294
public void testEncryptDES() throws Exception {
9395
assertThat(encryptDES(bytesDataDES, bytesKeyDES)).isEqualTo(bytesResDES);
9496
assertThat(encryptDES2HexString(bytesDataDES, bytesKeyDES)).isEqualTo(resDES);
95-
assertThat(encryptDES2Base64(bytesDataDES, bytesKeyDES)).isEqualTo(base64Encode(bytesResDES));
97+
assertThat(encryptDES2Base64(bytesDataDES, bytesKeyDES)).isEqualTo(base64Encode
98+
(bytesResDES));
9699
}
97100

98101
@Test
99102
public void testDecryptDES() throws Exception {
100103
assertThat(decryptDES(bytesResDES, bytesKeyDES)).isEqualTo(bytesDataDES);
101104
assertThat(decryptHexStringDES(resDES, bytesKeyDES)).isEqualTo(bytesDataDES);
102-
assertThat(decryptBase64DES(base64Encode(bytesResDES), bytesKeyDES)).isEqualTo(bytesDataDES);
105+
assertThat(decryptBase64DES(base64Encode(bytesResDES), bytesKeyDES)).isEqualTo
106+
(bytesDataDES);
103107
}
104108

105109
String data3DES = "1111111111111111";
@@ -113,14 +117,16 @@ public void testDecryptDES() throws Exception {
113117
public void testEncrypt3DES() throws Exception {
114118
assertThat(encrypt3DES(bytesDataDES3, bytesKeyDES3)).isEqualTo(bytesResDES3);
115119
assertThat(encrypt3DES2HexString(bytesDataDES3, bytesKeyDES3)).isEqualTo(res3DES);
116-
assertThat(encrypt3DES2Base64(bytesDataDES3, bytesKeyDES3)).isEqualTo(base64Encode(bytesResDES3));
120+
assertThat(encrypt3DES2Base64(bytesDataDES3, bytesKeyDES3)).isEqualTo(base64Encode
121+
(bytesResDES3));
117122
}
118123

119124
@Test
120125
public void testDecrypt3DES() throws Exception {
121126
assertThat(decrypt3DES(bytesResDES3, bytesKeyDES3)).isEqualTo(bytesDataDES3);
122127
assertThat(decryptHexString3DES(res3DES, bytesKeyDES3)).isEqualTo(bytesDataDES3);
123-
assertThat(decryptBase64_3DES(base64Encode(bytesResDES3), bytesKeyDES3)).isEqualTo(bytesDataDES3);
128+
assertThat(decryptBase64_3DES(base64Encode(bytesResDES3), bytesKeyDES3)).isEqualTo
129+
(bytesDataDES3);
124130
}
125131

126132
String dataAES = "11111111111111111111111111111111";
@@ -134,21 +140,23 @@ public void testDecrypt3DES() throws Exception {
134140
public void testEncryptAES() throws Exception {
135141
assertThat(encryptAES(bytesDataAES, bytesKeyAES)).isEqualTo(bytesResAES);
136142
assertThat(encryptAES2HexString(bytesDataAES, bytesKeyAES)).isEqualTo(resAES);
137-
assertThat(encryptAES2Base64(bytesDataAES, bytesKeyAES)).isEqualTo(base64Encode(bytesResAES));
143+
assertThat(encryptAES2Base64(bytesDataAES, bytesKeyAES)).isEqualTo(base64Encode
144+
(bytesResAES));
138145
}
139146

140147
@Test
141148
public void testDecryptAES() throws Exception {
142149
assertThat(decryptAES(bytesResAES, bytesKeyAES)).isEqualTo(bytesDataAES);
143150
assertThat(decryptHexStringAES(resAES, bytesKeyAES)).isEqualTo(bytesDataAES);
144-
assertThat(decryptBase64AES(base64Encode(bytesResAES), bytesKeyAES)).isEqualTo(bytesDataAES);
151+
assertThat(decryptBase64AES(base64Encode(bytesResAES), bytesKeyAES)).isEqualTo
152+
(bytesDataAES);
145153
}
146154

147-
String path = System.getProperty("user.dir") + "\\src\\test\\res\\";
155+
String path = TestUtils.BASEPATH + "encrypt" + TestUtils.SEP;
148156
String md5 = "7F138A09169B250E9DCB378140907378";
149157

150158
@Test
151159
public void testEncryptMD5File() throws Exception {
152-
assertThat(encryptMD5File2String(new File(path + File.separator + "MD5.txt"))).isEqualTo(md5);
160+
assertThat(encryptMD5File2String(new File(path + "MD5.txt"))).isEqualTo(md5);
153161
}
154162
}

0 commit comments

Comments
 (0)