/**
* File文件管理器
*/
public class FileManager {
private static final String TAG = "FileManager";
private static List fileList;
private static int index = -1;
/**
* 创建文件
* @param filePath 文件地址
* @param fileName 文件名
* @return
*/
public static boolean createFile(String filePath, String fileName) {
String strFilePath = filePath + fileName;
//判断文件夹是否存在,如不存在,则创建
File file = new File(filePath);
if (!file.exists()) {
/** 注意这里是 mkdirs()方法 可以创建多个文件夹 */
file.mkdirs();
}
//判断文件是否存在,如不存在,则创建
File subFile = new File(strFilePath);
if (!subFile.exists()) {
try {
return subFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
} else {
return true;
}
return false;
}
/**
* 文件集合List实例化
*/
public static void fileListInit() {
fileList = new ArrayList<>();
}
/**
* 遍历文件夹下的文件
*
* @param file 地址
*/
public static List getListFiles(File file) {
File[] fileArray = file.listFiles();
if (fileArray == null) {
return null;
} else {
for (File f : fileArray) {
if (f.isFile()) {
index ++;
fileList.add(index, f);
} else {
index ++;
fileList.add(index, f);
getListFiles(f);
}
}
}
return fileList;
}
/**
* 删除文件
*
* @param filePath 文件地址
* @return
*/
public static boolean deleteFiles(String filePath) {
List files = getListFiles(new File(filePath));
if (files.size() != 0) {
for (int i = 0; i < files.size(); i++) {
File file = files.get(i);
/** 如果是文件则删除 如果都删除可不必判断 */
if (file.isFile()) {
file.delete();
}
}
}
return true;
}
/**
* 向文件中添加内容
*
* @param strContent 内容
* @param filePath 地址
* @param fileName 文件名
*/
public static void writeToFile(String strContent, String filePath, String fileName) {
//生成文件夹之后,再生成文件,不然会出错
String strFilePath = filePath + fileName;
// 每次写入时,都换行写
File subFile = new File(strFilePath);
if (subFile.exists()) {
RandomAccessFile raf;
try {
//构造函数 第二个是读写方式
raf = new RandomAccessFile(subFile, "rw");
//将记录指针移动到该文件的最后
raf.seek(subFile.length());
//向文件末尾追加内容
raf.write(strContent.getBytes());
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 修改文件内容(覆盖或者添加)
*
* @param path 文件地址
* @param content 覆盖内容
* @param append 指定了写入的方式,是覆盖写还是追加写(true=追加)(false=覆盖)
*/
public static void modifyFile(String path, String content, boolean append) {
try {
FileWriter fileWriter = new FileWriter(path, append);
BufferedWriter writer = new BufferedWriter(fileWriter);
writer.append(content);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读取文件内容
*
* @param filePath 地址
* @param filename 名称
* @return 返回内容
*/
public static String getFileContent(String filePath, String filename) {
FileInputStream inputStream;
InputStreamReader inputStreamReader = null;
try {
inputStream = new FileInputStream(new File(filePath + filename));
inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(inputStreamReader);
StringBuffer sb = new StringBuffer("");
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
/**
* 重命名文件
*
* @param oldPath 原来的文件地址
* @param newPath 新的文件地址
*/
public static void renameFile(String oldPath, String newPath) {
File oleFile = new File(oldPath);
File newFile = new File(newPath);
//执行重命名
oleFile.renameTo(newFile);
}
/**
* 复制文件
*
* @param fromFile 要复制的文件目录
* @param toFile 要粘贴的文件目录
* @return 是否复制成功
*/
public static boolean copyFile(String fromFile, String toFile) {
//要复制的文件目录
File[] currentFiles;
File root = new File(fromFile);
//如同判断SD卡是否存在或者文件是否存在
//如果不存在则 return出去
if (!root.exists()) {
return false;
}
//如果存在则获取当前目录下的全部文件 填充数组
currentFiles = root.listFiles();
//目标目录
File targetDir = new File(toFile);
//创建目录
if (!targetDir.exists()) {
targetDir.mkdirs();
}
//遍历要复制该目录下的全部文件
for (int i = 0; i < currentFiles.length; i++) {
if (currentFiles[i].isDirectory()) {
//如果当前项为子目录 进行递归
copyFile(currentFiles[i].getPath() + "/", toFile + currentFiles[i].getName() + "/");
} else {
//如果当前项为文件则进行文件拷贝
CopySdcardFile(currentFiles[i].getPath(), toFile + currentFiles[i].getName());
}
}
return true;
}
/**
* 要复制的目录下的所有非子目录(文件夹)文件拷贝
* @param fromFile
* @param toFile
* @return
*/
public static boolean CopySdcardFile(String fromFile, String toFile) {
try {
InputStream fosFrom = new FileInputStream(fromFile);
OutputStream fosTo = new FileOutputStream(toFile);
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;
}
}
}
附加1:
/**
* 文件大小格式化
*
* @param fileS
* @return
*/
public static String fileSizeFormat(long fileS) {
DecimalFormat df = new 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) + "M";
} else {
fileSizeString = df.format((double) fileS / 1073741824) + "G";
}
return fileSizeString;
}
/**
* 获取文件最后修改时间
*
* @param time
* @return
*/
public static String getFileLastModifyTime(long time) {
Date date = new Date(time);
String timeStamp =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(date);
return timeStamp;
}
附加2:
/** * 获取指定文件的大小 * * @return * @throws Exception */ public static long getFileSize(File file) { long size = 0; if (file.exists()) { FileInputStream fis = null; try { fis = new FileInputStream(file); //文件的大小 size = fis.available(); } catch (IOException e) { e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } return size; } /** * 获取指定文件夹的大小 * * @param directory * @return */ public static long getDirectorySize(File directory) { long size = 0; //文件夹目录下的所有文件 File fList[] = directory.listFiles(); if (fList == null) { return 0; } else { for (int i = 0; i < fList.length; i++) { if (fList[i].isDirectory()) { //判断是否父目录下还有子目录 size = size + getDirectorySize(fList[i]); } else { size = size + getFileSize(fList[i]); } } } return size; }