package com.hdl.linkpm.sdk.utils;
|
|
import android.content.Context;
|
import android.content.res.AssetManager;
|
|
import java.io.BufferedOutputStream;
|
import java.io.BufferedReader;
|
import java.io.BufferedWriter;
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.FileWriter;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.InputStreamReader;
|
|
/**
|
* Created by hxb on 2022/2/24.
|
*/
|
public class HDLFileUtils {
|
|
/**
|
* 创建文件夹
|
*
|
* @param filesPath
|
* @return
|
*/
|
public static boolean createOrExistsPrivateFolder(String filesPath) {
|
File dir = new File(filesPath);
|
return createOrExistsFolder(dir);
|
}
|
|
public static String getJson(String fileName, Context context) {
|
//将json数据变成字符串
|
StringBuilder stringBuilder = new StringBuilder();
|
try {
|
//获取assets资源管理器
|
AssetManager assetManager = context.getAssets();
|
//通过管理器打开文件并读取
|
BufferedReader bf = new BufferedReader(new InputStreamReader(
|
assetManager.open(fileName)));
|
String line;
|
while ((line = bf.readLine()) != null) {
|
stringBuilder.append(line);
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return stringBuilder.toString();
|
}
|
|
/**
|
* 创建文件夹
|
*
|
* @param file
|
* @return
|
*/
|
public static boolean createOrExistsFolder(File file) {
|
if (file == null)
|
return false;
|
boolean result = false;
|
|
if (isFileExists(file) && isDirectory(file)) {
|
// 如果file存在且是文件夹,返回true
|
return true;
|
}
|
// 如果文件夹不存在,创建文件夹
|
if (file.mkdirs()) {
|
// 创建成功返回true
|
result = true;
|
} else {
|
// 创建失败返回false
|
result = false;
|
}
|
return result;
|
}
|
|
public static boolean writeFile(String path, InputStream inputStream) {
|
FileOutputStream fop = null;
|
|
try {
|
File file = new File(path);
|
fop = new FileOutputStream(file);
|
|
if (!file.exists()) {
|
file.createNewFile();
|
}
|
|
byte[] inBytes = new byte[1024*5];
|
int len = 0;
|
while (0 < (len = inputStream.read(inBytes, 0, inBytes.length))) {
|
fop.write(inBytes, 0, len);
|
fop.flush();
|
}
|
return true;
|
} catch (IOException e) {
|
e.printStackTrace();
|
return false;
|
} finally {
|
try {
|
if (fop != null) {
|
fop.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
try {
|
if (inputStream != null) {
|
inputStream.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
/**
|
* 文件是否存在
|
*
|
* @param file
|
* @return
|
*/
|
public static boolean isFileExists(File file) {
|
if (file == null)
|
return false;
|
return file.exists();
|
}
|
|
/**
|
* 文件夹是否存在
|
*
|
* @param file
|
* @return
|
*/
|
public static boolean isDirectory(File file) {
|
if (file == null)
|
return false;
|
return file.isDirectory();
|
}
|
public static void byteToFile(byte[] buf, String filePath, String fileName) {
|
BufferedOutputStream bos = null;
|
FileOutputStream fos = null;
|
File file;
|
try {
|
createOrExistsPrivateFolder(filePath);
|
file = new File(filePath + File.separator + fileName);
|
fos = new FileOutputStream(file);
|
bos = new BufferedOutputStream(fos);
|
bos.write(buf);
|
} catch (Exception ignored) {
|
} finally {
|
if (bos != null) {
|
try {
|
bos.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
if (fos != null) {
|
try {
|
fos.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|
|
/**
|
* 删除文件,可以是单个文件或文件夹
|
*
|
* @param fileName
|
* 待删除的文件名
|
* @return 文件删除成功返回true,否则返回false
|
*/
|
public static boolean delete(String fileName) {
|
File file = new File(fileName);
|
if (!file.exists()) {
|
System.out.println("删除文件失败:" + fileName + "文件不存在");
|
return false;
|
} else {
|
if (file.isFile()) {
|
|
return deleteFile(fileName);
|
} else {
|
return deleteDirectory(fileName);
|
}
|
}
|
}
|
|
/**
|
* 删除单个文件
|
*
|
* @param file 被删除文件
|
* @return 单个文件删除成功返回true,否则返回false
|
*/
|
public static boolean deleteFile(File file) {
|
if (file.isFile() && file.exists()) {
|
file.delete();
|
System.out.println("删除单个文件" + file.getName() + "成功!");
|
return true;
|
} else {
|
System.out.println("删除单个文件" + file.getName() + "失败!");
|
return false;
|
}
|
}
|
|
/**
|
* 删除单个文件
|
*
|
* @param fileName
|
* 被删除文件的文件名
|
* @return 单个文件删除成功返回true,否则返回false
|
*/
|
public static boolean deleteFile(String fileName) {
|
File file = new File(fileName);
|
if (file.isFile() && file.exists()) {
|
file.delete();
|
System.out.println("删除单个文件" + fileName + "成功!");
|
return true;
|
} else {
|
System.out.println("删除单个文件" + fileName + "失败!");
|
return false;
|
}
|
}
|
|
/**
|
* 删除目录(文件夹)以及目录下的文件
|
*
|
* @param dir
|
* 被删除目录的文件路径
|
* @return 目录删除成功返回true,否则返回false
|
*/
|
public static boolean deleteDirectory(String dir) {
|
// 如果dir不以文件分隔符结尾,自动添加文件分隔符
|
if (!dir.endsWith(File.separator)) {
|
dir = dir + File.separator;
|
}
|
File dirFile = new File(dir);
|
// 如果dir对应的文件不存在,或者不是一个目录,则退出
|
if (!dirFile.exists() || !dirFile.isDirectory()) {
|
System.out.println("删除目录失败" + dir + "目录不存在!");
|
return false;
|
}
|
boolean flag = true;
|
// 删除文件夹下的所有文件(包括子目录)
|
File[] files = dirFile.listFiles();
|
for (int i = 0; i < files.length; i++) {
|
// 删除子文件
|
if (files[i].isFile()) {
|
flag = deleteFile(files[i].getAbsolutePath());
|
if (!flag) {
|
break;
|
}
|
}
|
// 删除子目录
|
else {
|
flag = deleteDirectory(files[i].getAbsolutePath());
|
if (!flag) {
|
break;
|
}
|
}
|
}
|
|
if (!flag) {
|
System.out.println("删除目录失败");
|
return false;
|
}
|
|
// 删除当前目录
|
if (dirFile.delete()) {
|
System.out.println("删除目录" + dir + "成功!");
|
return true;
|
} else {
|
System.out.println("删除目录" + dir + "失败!");
|
return false;
|
}
|
}
|
// 删除文件夹
|
// param folderPath 文件夹完整绝对路径
|
|
public static void delFolder(String folderPath) {
|
try {
|
delAllFile(folderPath); // 删除完里面所有内容
|
String filePath = folderPath;
|
filePath = filePath.toString();
|
java.io.File myFilePath = new java.io.File(filePath);
|
myFilePath.delete(); // 删除空文件夹
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
// 删除指定文件夹下所有文件
|
// param path 文件夹完整绝对路径
|
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;
|
}
|
}
|