You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
4.2 KiB
158 lines
4.2 KiB
/*
|
|
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package com.arialyy.aria.util;
|
|
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
import com.arialyy.aria.window.FileEntity;
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.math.BigInteger;
|
|
import java.security.MessageDigest;
|
|
import java.security.NoSuchAlgorithmException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Created by Aria.Lao on 2017/3/21.
|
|
*/
|
|
public class FileUtil {
|
|
|
|
private static final String TAG = "FileUtil";
|
|
|
|
/**
|
|
* 通过流创建文件
|
|
*/
|
|
public static void createFileFormInputStream(InputStream is, String path) {
|
|
try {
|
|
FileOutputStream fos = new FileOutputStream(path);
|
|
byte[] buf = new byte[1376];
|
|
while (is.read(buf) > 0) {
|
|
fos.write(buf, 0, buf.length);
|
|
}
|
|
is.close();
|
|
fos.flush();
|
|
fos.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 校验文件MD5码
|
|
*/
|
|
public static boolean checkMD5(String md5, File updateFile) {
|
|
if (TextUtils.isEmpty(md5) || updateFile == null) {
|
|
Log.e(TAG, "MD5 string empty or updateFile null");
|
|
return false;
|
|
}
|
|
|
|
String calculatedDigest = getFileMD5(updateFile);
|
|
if (calculatedDigest == null) {
|
|
Log.e(TAG, "calculatedDigest null");
|
|
return false;
|
|
}
|
|
return calculatedDigest.equalsIgnoreCase(md5);
|
|
}
|
|
|
|
/**
|
|
* 校验文件MD5码
|
|
*/
|
|
public static boolean checkMD5(String md5, InputStream is) {
|
|
if (TextUtils.isEmpty(md5) || is == null) {
|
|
Log.e(TAG, "MD5 string empty or updateFile null");
|
|
return false;
|
|
}
|
|
|
|
String calculatedDigest = getFileMD5(is);
|
|
if (calculatedDigest == null) {
|
|
Log.e(TAG, "calculatedDigest null");
|
|
return false;
|
|
}
|
|
return calculatedDigest.equalsIgnoreCase(md5);
|
|
}
|
|
|
|
/**
|
|
* 获取文件MD5码
|
|
*/
|
|
public static String getFileMD5(File updateFile) {
|
|
InputStream is;
|
|
try {
|
|
is = new FileInputStream(updateFile);
|
|
} catch (FileNotFoundException e) {
|
|
Log.e(TAG, "Exception while getting FileInputStream", e);
|
|
return null;
|
|
}
|
|
|
|
return getFileMD5(is);
|
|
}
|
|
|
|
/**
|
|
* 获取文件MD5码
|
|
*/
|
|
public static String getFileMD5(InputStream is) {
|
|
MessageDigest digest;
|
|
try {
|
|
digest = MessageDigest.getInstance("MD5");
|
|
} catch (NoSuchAlgorithmException e) {
|
|
Log.e(TAG, "Exception while getting digest", e);
|
|
return null;
|
|
}
|
|
|
|
byte[] buffer = new byte[8192];
|
|
int read;
|
|
try {
|
|
while ((read = is.read(buffer)) > 0) {
|
|
digest.update(buffer, 0, read);
|
|
}
|
|
byte[] md5sum = digest.digest();
|
|
BigInteger bigInt = new BigInteger(1, md5sum);
|
|
String output = bigInt.toString(16);
|
|
// Fill to 32 chars
|
|
output = String.format("%32s", output).replace(' ', '0');
|
|
return output;
|
|
} catch (IOException e) {
|
|
throw new RuntimeException("Unable to process file for MD5", e);
|
|
} finally {
|
|
try {
|
|
is.close();
|
|
} catch (IOException e) {
|
|
Log.e(TAG, "Exception on closing MD5 input stream", e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 文件列表
|
|
*/
|
|
public List<FileEntity> loadFiles(String path) {
|
|
File file = new File(path);
|
|
File[] files = file.listFiles();
|
|
List<FileEntity> list = new ArrayList<>();
|
|
for (File f : files) {
|
|
FileEntity entity = new FileEntity();
|
|
entity.fileName = f.getName();
|
|
//entity.fileInfo = getFileType(f.getPath());
|
|
//entity.fileDrawable = getApkIcon(mContext, f.getPath());
|
|
list.add(entity);
|
|
}
|
|
return list;
|
|
}
|
|
}
|
|
|