package com.yeshi.appupdate.download;
|
|
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 android.content.Context;
|
import android.graphics.Bitmap;
|
import android.os.Environment;
|
import android.os.StatFs;
|
|
import com.yeshi.appupdate.entity.SDCardEntity;
|
import com.yeshi.appupdate.util.SDCardUtil;
|
import com.yeshi.appupdate.util.StringUtils;
|
|
public class FileUtils {
|
// 获取sd卡路径
|
public static String getSDCardPath() {
|
if (Environment.getExternalStorageState().equals(
|
Environment.MEDIA_MOUNTED)) {
|
File file = new File(Environment.getExternalStorageDirectory()
|
.getPath());
|
if (!file.exists())
|
file.mkdirs();
|
return file.getPath();
|
} else
|
return null;
|
}
|
|
// 获取根目录
|
public static String getRootPath(Context context) {
|
|
if (StringUtils.isEmpty(getSDCardPath())) {
|
File file = null;
|
|
SDCardEntity entity = SDCardUtil.getSDCardPath(context);
|
if (entity != null)
|
file = new File(entity.getPath() + File.separator
|
+ Contents.ROOT);
|
if (file == null)
|
return null;
|
if (!file.exists())
|
file.mkdirs();
|
return file.getPath();
|
} else {
|
File file = new File(getSDCardPath() + File.separator
|
+ Contents.ROOT);
|
if (file.getFreeSpace() == 0) {
|
SDCardEntity entity = SDCardUtil.getSDCardPath(context);
|
if (entity != null)
|
file = new File(entity.getPath() + File.separator
|
+ Contents.ROOT);
|
}
|
if (!file.exists())
|
file.mkdirs();
|
return file.getPath();
|
}
|
}
|
|
// 获取消息缓存文件夹
|
public static String getChatInfoPath(Context context) {
|
if (StringUtils.isEmpty(getRootPath(context))) {
|
return null;
|
} else {
|
File file = new File(getRootPath(context) + File.separator
|
+ Contents.CHATINFO);
|
if (!file.exists())
|
file.mkdirs();
|
return file.getPath();
|
}
|
}
|
|
/**
|
* 写文本文�?在Android系统中,文件保存�?/data/data/PACKAGE_NAME/files 目录�?
|
*
|
* @param context
|
* @param msg
|
*/
|
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 "";
|
}
|
|
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) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
public static File createFile(String folderPath, String fileName) {
|
File destDir = new File(folderPath);
|
if (!destDir.exists()) {
|
destDir.mkdirs();
|
}
|
return new File(folderPath, fileName + fileName);
|
}
|
|
public static void copyFile(InputStream in, File file) {
|
|
if (!file.exists()) {
|
try {
|
file.createNewFile();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
}
|
|
if (file.exists()) {
|
try {
|
FileOutputStream os = new FileOutputStream(file);
|
|
byte[] b = new byte[1024];
|
|
int len = -1;
|
|
while ((len = in.read(b)) != -1) {
|
os.write(b, 0, len);
|
}
|
|
in.close();
|
os.close();
|
|
} catch (FileNotFoundException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
}
|
|
}
|
|
/**
|
* 向手机写图片
|
*
|
* @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(
|
android.os.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;
|
}
|
|
/**
|
* 根据文件绝对路径获取文件名
|
*
|
* @param filePath
|
* @return
|
*/
|
public static String getFileName(String filePath) {
|
if (StringUtils.isEmpty(filePath))
|
return "";
|
return filePath.substring(filePath.lastIndexOf(File.separator) + 1);
|
}
|
|
/**
|
* 根据文件的绝对路径获取文件名但不包含扩展名
|
*
|
* @param filePath
|
* @return
|
*/
|
public static String getFileNameNoFormat(String filePath) {
|
if (StringUtils.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 (StringUtils.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;
|
}
|
|
/**
|
* 获取文件大小
|
*
|
* @param size
|
* 字节
|
* @return
|
*/
|
public static String getFileSize(long size) {
|
if (size <= 0)
|
return "0";
|
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 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 f
|
* @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;
|
}
|
|
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;
|
}
|
|
/**
|
* �?��文件是否存在
|
*
|
* @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;
|
}
|
|
public static boolean existFile(String path) {
|
|
File file = new File(path);
|
|
return file.isFile() && file.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;
|
}
|
|
/**
|
* 删除目录(包括:目录里的所有文�?
|
*
|
* @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();
|
|
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 {
|
|
newPath.delete();
|
status = true;
|
} catch (SecurityException se) {
|
se.printStackTrace();
|
status = false;
|
}
|
} else
|
status = false;
|
} else
|
status = false;
|
return status;
|
}
|
|
public static final String getTempFilePath(Context context) {
|
|
return context.getCacheDir() + File.separator + "temp";
|
|
}
|
|
public static String getSDPath() {
|
File sdDir = null;
|
boolean sdCardExist = Environment.getExternalStorageState().equals(
|
Environment.MEDIA_MOUNTED); // 判断sd卡是否存�?
|
if (sdCardExist) {
|
sdDir = Environment.getExternalStorageDirectory();// 获取跟目�?
|
}
|
return sdDir.getPath();
|
}
|
|
// 将图片保存到指定的路径
|
public static String savePic(String filePath, String name, Bitmap bitmap) {
|
File file = new File(filePath);
|
if (!file.exists())
|
file.mkdirs();
|
|
File f = new File(filePath + File.separator + name);
|
try {
|
f.createNewFile();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
FileOutputStream fOut = null;
|
try {
|
fOut = new FileOutputStream(f);
|
} catch (FileNotFoundException e) {
|
e.printStackTrace();
|
}
|
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
|
try {
|
fOut.flush();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
try {
|
fOut.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return f.getPath();
|
}
|
|
// 将图片保存到指定的路径
|
public static String savePic(String filePath, Bitmap bitmap) {
|
File f = new File(filePath);
|
try {
|
f.createNewFile();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
FileOutputStream fOut = null;
|
try {
|
fOut = new FileOutputStream(f);
|
} catch (FileNotFoundException e) {
|
e.printStackTrace();
|
}
|
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
|
try {
|
fOut.flush();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
try {
|
fOut.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return f.getPath();
|
}
|
}
|