package com.hwc.oklib.util;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.os.StatFs;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
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.io.OutputStream;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* @author 黄伟才
* @ClassName: FileUtil
* @Description: 操作文件工具类
* @date 2015-10-19 下午6:28:40
*/
public class FileUtil {
private static final String TAG = "BitmapCommonUtils";
private static final long POLY64REV = 0x95AC9329AC4BC9B5L;
private static final long INITIALCRC = 0xFFFFFFFFFFFFFFFFL;
private static long[] sCrcTable = new long[256];
public enum PathStatus {SUCCESS, EXITS, ERROR}
/**
* 删除文件夹
*
* @param folderPath 文件夹完整绝对路径
*/
public static void delFolder(String folderPath) {
try {
delAllFile(folderPath); // 删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
File myFilePath = new File(filePath);
myFilePath.delete(); // 删除空文件夹
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除所有文件
*
* @param path 文件夹的路径
* @return
*/
public static boolean delAllFile(String path) {
boolean flag = false;
File file = new File(path);
if (!file.exists()) {
return flag;
}
if (!file.isDirectory()) {
return flag;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
} else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
delFolder(path + "/" + tempList[i]);// 再删除空文件夹
flag = true;
}
}
return flag;
}
/**
* 写文本文件 在Android系统中,文件保存在 /data/data/PACKAGE_NAME/files 目录下,,,测试不通过
*
* @param context
* @param fileName
* @param content
*/
public static void write(Context context, String fileName, String content) {
if (content == null)
content = "";
try {
FileOutputStream fos = context.openFileOutput(fileName,
Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取文本文件,,,测试不通过
*
* @param context
* @param fileName
* @return
*/
public static String read(Context context, String fileName) {
try {
FileInputStream in = context.openFileInput(fileName);
return readInStream(in);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 获取字符串
*
* @param inStream
* @return
*/
private static String readInStream(FileInputStream inStream) {
try {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[512];
int length = -1;
while ((length = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, length);
}
outStream.close();
inStream.close();
return outStream.toString();
} catch (IOException e) {
Log.i("FileTest", e.getMessage());
}
return null;
}
/**
* 创建文件
*
* @param folderPath
* @param fileName
* @return
*/
public static File createFile(String folderPath, String fileName) {
File destDir = new File(folderPath);
if (!destDir.exists()) {
destDir.mkdirs();
}
return new File(folderPath, fileName);
}
/**
* 向手机写图片
*
* @param buffer
* @param folder
* @param fileName
* @return
*/
public static boolean writeFile(byte[] buffer, String folder,
String fileName) {
boolean writeSucc = false;
boolean sdCardExist = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
String folderPath = "";
if (sdCardExist) {
folderPath = Environment.getExternalStorageDirectory()
+ File.separator + folder + File.separator;
} else {
writeSucc = false;
}
File fileDir = new File(folderPath);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
File file = new File(folderPath + fileName);
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
out.write(buffer);
writeSucc = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return writeSucc;
}
/**
* 把bitmap保存到本地
*
* @param mBitmap
* @param path
*/
public static void saveBitmapToFile(Bitmap mBitmap, String path) {
File f = new File(path);
if (f.exists()) {
f.delete();
}
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
try {
fOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据文件的绝对路径获取文件名但不包含扩展名
*
* @param filePath
* @return
*/
public static String getFileNameNoFormat(String filePath) {
if (TextUtils.isEmpty(filePath)) {
return "";
}
int point = filePath.lastIndexOf('.');
return filePath.substring(filePath.lastIndexOf(File.separator) + 1,
point);
}
/**
* 获取文件扩展名
*
* @param fileName
* @return
*/
public static String getFileFormat(String fileName) {
if (TextUtils.isEmpty(fileName))
return "";
int point = fileName.lastIndexOf('.');
return fileName.substring(point + 1);
}
/**
* 获取文件大小
*
* @param filePath
* @return
*/
public static long getFileSize(String filePath) {
long size = 0;
File file = new File(filePath);
if (file != null && file.exists()) {
size = file.length();
}
return size;
}
/**
* 在Android 编程中经常会用到uri转化为文件路径
* 下面是4.4后通过Uri获取路径以及文件名一种方法
*
* @param context
* @param uri
* @return
*/
public static String getRealFilePath(final Context context, final Uri uri) {
if (null == uri) return null;
final String scheme = uri.getScheme();
String data = null;
if (scheme == null)
data = uri.getPath();
else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
data = uri.getPath();
} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);
if (null != cursor) {
if (cursor.moveToFirst()) {
int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
if (index > -1) {
data = cursor.getString(index);
}
}
cursor.close();
}
}
return data;
}
/**
* 获取文件大小
*
* @param size 字节
* @return
*/
public static String getFileSize(long size) {
if (size <= 0)
return "0K";
java.text.DecimalFormat df = new java.text.DecimalFormat("##.##");
float temp = (float) size / 1024;
if (temp >= 1024) {
return df.format(temp / 1024) + "M";
} else {
return df.format(temp) + "K";
}
}
/**
* 转换文件大小
*
* @param fileS
* @return B/KB/MB/GB
*/
public static String formatFileSize(long fileS) {
java.text.DecimalFormat df = new java.text.DecimalFormat("#.00");
String fileSizeString = "";
if (fileS < 1024) {
fileSizeString = df.format((double) fileS) + "B";
} else if (fileS < 1048576) {
fileSizeString = df.format((double) fileS / 1024) + "KB";
} else if (fileS < 1073741824) {
fileSizeString = df.format((double) fileS / 1048576) + "MB";
} else {
fileSizeString = df.format((double) fileS / 1073741824) + "G";
}
return fileSizeString;
}
/**
* 直接获取路径下对应文件的大小
*
* @param filePath
* @return
*/
public static String getFormatFileSize(String filePath) {
return formatFileSize(getFileSize(filePath));
}
/**
* 获取目录文件大小
*
* @param dir
* @return
*/
public static long getDirSize(File dir) {
if (dir == null) {
return 0;
}
if (!dir.isDirectory()) {
return 0;
}
long dirSize = 0;
File[] files = dir.listFiles();
for (File file : files) {
if (file.isFile()) {
dirSize += file.length();
} else if (file.isDirectory()) {
dirSize += file.length();
dirSize += getDirSize(file); // 递归调用继续统计
}
}
return dirSize;
}
/**
* 获取目录文件个数
*
* @param dir
* @return
*/
public long getFileList(File dir) {
long count = 0;
File[] files = dir.listFiles();
count = files.length;
for (File file : files) {
if (file.isDirectory()) {
count = count + getFileList(file);// 递归
count--;
}
}
return count;
}
/**
* 流转字节
*
* @param in
* @return
* @throws IOException
*/
public static byte[] toBytes(InputStream in) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
int ch;
while ((ch = in.read()) != -1) {
out.write(ch);
}
byte buffer[] = out.toByteArray();
out.close();
return buffer;
}
/**
* 获得指定文件的byte数组
*/
public static byte[] getBytesFromFile(String filePath) {
byte[] buffer = null;
try {
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
byte[] b = new byte[1000];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
/**
* 根据byte数组,生成文件
*/
public static String bypeToFile(byte[] bfile, String filePath, String fileName) {
BufferedOutputStream bos = null;
FileOutputStream fos = null;
String outFilePath = filePath + fileName;
File file = null;
try {
File dir = new File(filePath);
if (!dir.exists() && dir.isDirectory()) {//判断文件目录是否存在
dir.mkdirs();
}
file = new File(outFilePath);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bfile);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return outFilePath;
}
/**
* 检查文件是否存在
*
* @param name
* @return
*/
public static boolean checkFileExists(String name) {
boolean status;
if (!name.equals("")) {
File path = Environment.getExternalStorageDirectory();
File newPath = new File(path.toString() + name);
status = newPath.exists();
} else {
status = false;
}
return status;
}
/**
* 检查路径是否存在
*
* @param path
* @return
*/
public static boolean checkFilePathExists(String path) {
return new File(path).exists();
}
/**
* 计算SD卡的剩余空间
*
* @return 返回-1,说明没有安装sd卡
*/
public static long getFreeDiskSpace() {
String status = Environment.getExternalStorageState();
long freeSpace = 0;
if (status.equals(Environment.MEDIA_MOUNTED)) {
try {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
freeSpace = availableBlocks * blockSize / 1024;
} catch (Exception e) {
e.printStackTrace();
}
} else {
return -1;
}
return (freeSpace);
}
/**
* 新建目录
*
* @param directoryName
* @return
*/
public static boolean createDirectory(String directoryName) {
boolean status;
if (!directoryName.equals("")) {
File path = Environment.getExternalStorageDirectory();
File newPath = new File(path.toString() + directoryName);
status = newPath.mkdir();
status = true;
} else
status = false;
return status;
}
/**
* 检查是否安装SD卡
*
* @return
*/
public static boolean checkSaveLocationExists() {
String sDCardStatus = Environment.getExternalStorageState();
boolean status;
if (sDCardStatus.equals(Environment.MEDIA_MOUNTED)) {
status = true;
} else
status = false;
return status;
}
/**
* 检查是否安装外置的SD卡
*
* @return
*/
public static boolean checkExternalSDExists() {
Map evn = System.getenv();
return evn.containsKey("SECONDARY_STORAGE");
}
/**
* 删除目录(包括:目录里的所有文件)
*
* @param fileName
* @return
*/
public static boolean deleteDirectory(String fileName) {
boolean status;
SecurityManager checker = new SecurityManager();
if (!fileName.equals("")) {
File path = Environment.getExternalStorageDirectory();
File newPath = new File(path.toString() + fileName);
checker.checkDelete(newPath.toString());
if (newPath.isDirectory()) {
String[] listfile = newPath.list();
// delete all files within the specified directory and then
// delete the directory
try {
for (int i = 0; i < listfile.length; i++) {
File deletedFile = new File(newPath.toString() + "/"
+ listfile[i].toString());
deletedFile.delete();
}
newPath.delete();
//L.e("cache", "DirectoryManager deleteDirectory" + fileName);
status = true;
} catch (Exception e) {
e.printStackTrace();
status = false;
}
} else
status = false;
} else
status = false;
return status;
}
/**
* 删除文件
*
* @param fileName
* @return
*/
public static boolean deleteFile(String fileName) {
boolean status;
SecurityManager checker = new SecurityManager();
if (!fileName.equals("")) {
File path = Environment.getExternalStorageDirectory();
File newPath = new File(path.toString() + fileName);
checker.checkDelete(newPath.toString());
if (newPath.isFile()) {
try {
//L.e("cache", "DirectoryManager deleteFile" + fileName);
newPath.delete();
status = true;
} catch (SecurityException se) {
se.printStackTrace();
status = false;
}
} else
status = false;
} else
status = false;
return status;
}
/**
* 删除空目录
*
* 返回 0代表成功 ,1 代表没有删除权限, 2代表不是空目录,3 代表未知错误
*
* @return
*/
public static int deleteBlankPath(String path) {
File f = new File(path);
if (!f.canWrite()) {
return 1;
}
if (f.list() != null && f.list().length > 0) {
return 2;
}
if (f.delete()) {
return 0;
}
return 3;
}
/**
* 重命名
*
* @param oldName
* @param newName
* @return
*/
public static boolean reNamePath(String oldName, String newName) {
File f = new File(oldName);
return f.renameTo(new File(newName));
}
/**
* 删除文件
*
* @param filePath
*/
public static boolean deleteFileWithPath(String filePath) {
SecurityManager checker = new SecurityManager();
File f = new File(filePath);
checker.checkDelete(filePath);
if (f.isFile()) {
//L.e("cache", "DirectoryManager deleteFile" + filePath);
f.delete();
return true;
}
return false;
}
/**
* 清空一个文件夹
*
* @param filePath
*/
public static void clearFileWithPath(String filePath) {
List files = FileUtil.listPathFiles(filePath);
if (files.isEmpty()) {
return;
}
for (File f : files) {
if (f.isDirectory()) {
clearFileWithPath(f.getAbsolutePath());
} else {
f.delete();
}
}
}
/**
* 获取一个文件夹下的所有文件
*
* @param root
* @return
*/
public static List listPathFiles(String root) {
List allDir = new ArrayList();
SecurityManager checker = new SecurityManager();
File path = new File(root);
checker.checkRead(root);
File[] files = path.listFiles();
for (File f : files) {
if (f.isFile())
allDir.add(f);
else
listPath(f.getAbsolutePath());
}
return allDir;
}
/**
* 获取SD卡的根目录,末尾带\
*
* @return
*/
public static String getSDRoot() {
return Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator;
}
/**
* 获取手机外置SD卡的根目录
*
* @return
*/
public static String getExternalSDRoot() {
Map evn = System.getenv();
return evn.get("SECONDARY_STORAGE");
}
/**
* 列出root目录下所有子目录
*
* @param root
* @return 绝对路径
*/
public static List listPath(String root) {
List allDir = new ArrayList();
SecurityManager checker = new SecurityManager();
File path = new File(root);
checker.checkRead(root);
// 过滤掉以.开始的文件夹
if (path.isDirectory()) {
for (File f : path.listFiles()) {
if (f.isDirectory()) {
allDir.add(f.getAbsolutePath());
}
}
}
return allDir;
}
/**
* 创建目录
*
* @param newPath
*/
public static PathStatus createPath(String newPath) {
File path = new File(newPath);
if (path.exists()) {
return PathStatus.EXITS;
}
if (path.mkdir()) {
return PathStatus.SUCCESS;
} else {
return PathStatus.ERROR;
}
}
/**
* 截取路径名
*
* @return
*/
public static String getPathName(String absolutePath) {
int start = absolutePath.lastIndexOf(File.separator) + 1;
int end = absolutePath.length();
return absolutePath.substring(start, end);
}
/**
* 压缩图片
* @param filePathStr
* @param width
* @param height
* @param maxSize
* @return 压缩后的文件路径
*/
public static String getSmallPicture(String filePathStr, int width,
int height, int maxSize) {
try {
Bitmap bitmap = copressImage(filePathStr, width, height);
// Bitmap bitmap = BitmapFactory.decodeFile(filePathStr);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int options = 100;// 个人喜欢从100开始,
bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);
while (baos.toByteArray().length / 1024 > maxSize) { // 压缩到小于maxSize k
baos.reset();
options -= 10;
bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);
}
FileOutputStream fos = new FileOutputStream(filePathStr);
fos.write(baos.toByteArray());
fos.flush();
fos.close();
} catch (Exception e) {
return filePathStr;
}
return filePathStr;
}
@SuppressWarnings("unused")
public static Bitmap copressImage(String imgPath, int imagew, int imageh) {
File picture = new File(imgPath);
BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
// 下面这个设置是将图片边界不可调节变为可调节
bitmapFactoryOptions.inJustDecodeBounds = true;
bitmapFactoryOptions.inSampleSize = 2;
int outWidth = bitmapFactoryOptions.outWidth;
int outHeight = bitmapFactoryOptions.outHeight;
Bitmap bmap = BitmapFactory.decodeFile(picture.getAbsolutePath(),
bitmapFactoryOptions);
int yRatio = (int) Math.ceil(bitmapFactoryOptions.outHeight / imageh);
int xRatio = (int) Math.ceil(bitmapFactoryOptions.outWidth / imagew);
if (yRatio > 1 || xRatio > 1) {
if (yRatio > xRatio) {
bitmapFactoryOptions.inSampleSize = yRatio;
} else {
bitmapFactoryOptions.inSampleSize = xRatio;
}
}
bitmapFactoryOptions.inJustDecodeBounds = false;
bmap = BitmapFactory.decodeFile(picture.getAbsolutePath(),
bitmapFactoryOptions);
if (bmap != null) {
return bmap;
}
return null;
}
public static InputStream getInputStream(FileInputStream fileInput) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 4];
int n = -1;
InputStream inputStream = null;
try {
while ((n = fileInput.read(buffer)) != -1) {
baos.write(buffer, 0, n);
}
byte[] byteArray = baos.toByteArray();
inputStream = new ByteArrayInputStream(byteArray);
return inputStream;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 获取GUID(UUID)
*
* @return
*/
public static String getGUID() {
UUID uuid = UUID.randomUUID();
String s = UUID.randomUUID().toString();
return s;
}
/**
* 创建目录
*/
public static void createFolder(String path) {
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
} else {
}
}
/**
* 复制文件
*
* @param filePath
* @param targetPath
* @return
*/
public static boolean copy(String filePath, String targetPath) {
try {
InputStream fosfrom = new FileInputStream(filePath);
OutputStream fosto = new FileOutputStream(targetPath);
byte bt[] = new byte[1024];
int c;
while ((c = fosfrom.read(bt)) > 0) {
fosto.write(bt, 0, c);
}
fosfrom.close();
fosto.close();
return true;
} catch (Exception ex) {
return false;
}
}
/**
* 删除文件
*
* @param filePath
* @return
*/
public static boolean delete(String filePath) {
File file = new File(filePath);
if (file.exists()) { // 判断文件是否存在
if (file.isFile()) { // 判断是否是文件
file.delete(); // delete()方法 你应该知道 是删除的意思;
} else if (file.isDirectory()) { // 否则如果它是一个目录
String filePaths[] = file.list(); // 声明目录下所有的文件;
if (filePaths != null) {
for (int i = 0; i < filePaths.length; i++) { // 遍历目录下所有的文件
delete(filePaths[i]); // 把每个文件 用这个方法进行迭代
}
}
}
boolean isSuccess = file.delete();
if (!isSuccess) {
return false;
}
}
return true;
}
/**
* 剪切文件
*
* @param filePath
* @param targetPath
* @return
*/
public static boolean cut(String filePath, String targetPath) {
//L.e("cache", "cut targetPath:" + targetPath);
//L.e("cache", "cut filePath:" + filePath);
if (copy(filePath, targetPath) && delete(filePath)) {
return true;
}
return false;
}
/**
* 获取bitmap的字节大小
*
* @param bitmap
* @return
*/
public static int getBitmapSize(Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
public static String saveFileByBinary(String source, String path, String fileName) {
createFolder(path);
fileName = path + fileName;
delete(fileName);
File file = new File(fileName);
byte[] byteFile = Base64.decode(source, 0);
try {
InputStream is = new ByteArrayInputStream(byteFile);
FileOutputStream os = new FileOutputStream(file);
byte[] b = new byte[1024];
int len = 0;
//开始读取
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
//完毕关闭所有连接
is.close();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
public static byte[] getBytes(String in) {
byte[] result = new byte[in.length() * 2];
int output = 0;
for (char ch : in.toCharArray()) {
result[output++] = (byte) (ch & 0xFF);
result[output++] = (byte) (ch >> 8);
}
return result;
}
/**
* 获取md5
*
* @param s
* @return
*/
public static String getMD5(String s) {
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
try {
byte[] btInput = s.getBytes();
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static boolean isSameKey(byte[] key, byte[] buffer) {
int n = key.length;
if (buffer.length < n) {
return false;
}
for (int i = 0; i < n; ++i) {
if (key[i] != buffer[i]) {
return false;
}
}
return true;
}
public static byte[] copyOfRange(byte[] original, int from, int to) {
int newLength = to - from;
if (newLength < 0)
throw new IllegalArgumentException(from + " > " + to);
byte[] copy = new byte[newLength];
System.arraycopy(original, from, copy, 0, Math.min(original.length - from, newLength));
return copy;
}
static {
//参考 http://bioinf.cs.ucl.ac.uk/downloads/crc64/crc64.c
long part;
for (int i = 0; i < 256; i++) {
part = i;
for (int j = 0; j < 8; j++) {
long x = ((int) part & 1) != 0 ? POLY64REV : 0;
part = (part >> 1) ^ x;
}
sCrcTable[i] = part;
}
}
public static byte[] makeKey(String httpUrl) {
return getBytes(httpUrl);
}
/**
* A function thats returns a 64-bit crc for string
*
* @param in input string
* @return a 64-bit crc value
*/
public static final long crc64Long(String in) {
if (in == null || in.length() == 0) {
return 0;
}
return crc64Long(getBytes(in));
}
public static final long crc64Long(byte[] buffer) {
long crc = INITIALCRC;
for (int k = 0, n = buffer.length; k < n; ++k) {
crc = sCrcTable[(((int) crc) ^ buffer[k]) & 0xff] ^ (crc >> 8);
}
return crc;
}
/**
* 获取文件的二进制文件
*
* @param path 文件路径
*/
@SuppressLint({"InlinedApi", "NewApi"})
public static String getBase64Str(String path) {
String uploadBuffer = "";
try {
FileInputStream fis = new FileInputStream(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count = 0;
while ((count = fis.read(buffer)) >= 0) {
baos.write(buffer, 0, count);
}
uploadBuffer = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT)); //进行Base64
} catch (Exception e) {
e.printStackTrace();
}
return uploadBuffer;
}
/**
* 检查文件是否大于所输入的大小限制
*
* @param path
* @param size
* @return
*/
public static boolean checkFileSize(String path, double size) {
try {
FileInputStream fis = new FileInputStream(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count = 0;
while ((count = fis.read(buffer)) >= 0) {
baos.write(buffer, 0, count);
}
if ((baos.toByteArray().length / 1024) > size) {
return false;
} else {
return true;
}
} catch (Exception e) {
return false;
}
}
}