文件操作
?
package com.myclover.file.service;
?
import android.content.Context;
import android.os.Environment;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
?
public class FileHelper { ??
? ? private Context context; ??
? ? private String SDPATH; ??
? ? private String FILESPATH; ??
?
? ? public FileHelper(Context context) { ??
? ? ? ? this.context = context; ??
? ? ? ? SDPATH = Environment.getExternalStorageDirectory().getPath() + "\\"; ??
? ? ? ? FILESPATH = this.context.getFilesDir().getPath() + "\\"; ??
? ? } ??
?
? ? /** ?
? ? ?* 在SD卡上创建文件 ?
? ? ?* ??
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public File creatSDFile(String fileName) throws IOException { ??
? ? ? ? File file = new File(SDPATH + fileName); ??
? ? ? ? file.createNewFile(); ??
? ? ? ? return file; ??
? ? } ??
?
? ? /** ?
? ? ?* 删除SD卡上的文件 ?
? ? ?* ??
? ? ?* @param fileName ?
? ? ?*/ ?
? ? public boolean delSDFile(String fileName) { ??
? ? ? ? File file = new File(SDPATH + fileName); ??
? ? ? ? if (file == null || !file.exists() || file.isDirectory()) ??
? ? ? ? ? ? return false; ??
? ? ? ? file.delete(); ??
? ? ? ? return true; ??
? ? } ??
?
? ? /** ?
? ? ?* 在SD卡上创建目录 ?
? ? ?* ??
? ? ?* @param dirName ?
? ? ?*/ ?
? ? public File creatSDDir(String dirName) { ??
? ? ? ? File dir = new File(SDPATH + dirName); ??
? ? ? ? dir.mkdir(); ??
? ? ? ? return dir; ??
? ? } ??
?
? ? /** ?
? ? ?* 删除SD卡上的目录 ?
? ? ?* ??
? ? ?* @param dirName ?
? ? ?*/ ?
? ? public boolean delSDDir(String dirName) { ??
? ? ? ? File dir = new File(SDPATH + dirName); ??
? ? ? ? return delDir(dir); ??
? ? } ??
?
? ? /** ?
? ? ?* 修改SD卡上的文件或目录名 ?
? ? ?* ??
? ? ?* @param fileName ?
? ? ?*/ ?
? ? public boolean renameSDFile(String oldfileName, String newFileName) { ??
? ? ? ? File oleFile = new File(SDPATH + oldfileName); ??
? ? ? ? File newFile = new File(SDPATH + newFileName); ??
? ? ? ? return oleFile.renameTo(newFile); ??
? ? } ??
?
? ? /** ?
? ? ?* 拷贝SD卡上的单个文件 ?
? ? ?* ??
? ? ?* @param path ?
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public boolean copySDFileTo(String srcFileName, String destFileName) ??
? ? ? ? ? ? throws IOException { ??
? ? ? ? File srcFile = new File(SDPATH + srcFileName); ??
? ? ? ? File destFile = new File(SDPATH + destFileName); ??
? ? ? ? return copyFileTo(srcFile, destFile); ??
? ? } ??
?
? ? /** ?
? ? ?* 拷贝SD卡上指定目录的所有文件 ?
? ? ?* ??
? ? ?* @param srcDirName ?
? ? ?* @param destDirName ?
? ? ?* @return ?
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public boolean copySDFilesTo(String srcDirName, String destDirName) ??
? ? ? ? ? ? throws IOException { ??
? ? ? ? File srcDir = new File(SDPATH + srcDirName); ??
? ? ? ? File destDir = new File(SDPATH + destDirName); ??
? ? ? ? return copyFilesTo(srcDir, destDir); ??
? ? } ??
?
? ? /** ?
? ? ?* 移动SD卡上的单个文件 ?
? ? ?* ??
? ? ?* @param srcFileName ?
? ? ?* @param destFileName ?
? ? ?* @return ?
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public boolean moveSDFileTo(String srcFileName, String destFileName) ??
? ? ? ? ? ? throws IOException { ??
? ? ? ? File srcFile = new File(SDPATH + srcFileName); ??
? ? ? ? File destFile = new File(SDPATH + destFileName); ??
? ? ? ? return moveFileTo(srcFile, destFile); ??
? ? } ??
?
? ? /** ?
? ? ?* 移动SD卡上的指定目录的所有文件 ?
? ? ?* ??
? ? ?* @param srcDirName ?
? ? ?* @param destDirName ?
? ? ?* @return ?
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public boolean moveSDFilesTo(String srcDirName, String destDirName) ??
? ? ? ? ? ? throws IOException { ??
? ? ? ? File srcDir = new File( srcDirName); ??
? ? ? ? File destDir = new File( destDirName); ??
? ? ? ? return moveFilesTo(srcDir, destDir); ??
? ? } ??
?
?
? ? /**********************************************************************************************************/ ?
? ? /*********************************************************************************************************/ ?
?
? ? /** ?
? ? ?* 删除一个文件 ?
? ? ?* ??
? ? ?* @param file ?
? ? ?* @return ?
? ? ?*/ ?
? ? public boolean delFile(File file) { ??
? ? ? ? if (file.isDirectory()) ??
? ? ? ? ? ? return false; ??
? ? ? ? return file.delete(); ??
? ? } ??
?
? ? /** ?
? ? ?* 删除一个目录(可以是非空目录) ?
? ? ?* ??
? ? ?* @param dir ?
? ? ?*/ ?
? ? public boolean delDir(File dir) { ??
? ? ? ? if (dir == null || !dir.exists() || dir.isFile()) { ??
? ? ? ? ? ? return false; ??
? ? ? ? } ??
? ? ? ? for (File file : dir.listFiles()) { ??
? ? ? ? ? ? if (file.isFile()) { ??
? ? ? ? ? ? ? ? file.delete(); ??
? ? ? ? ? ? } else if (file.isDirectory()) { ??
? ? ? ? ? ? ? ? delDir(file);// 递归 ??
? ? ? ? ? ? } ??
? ? ? ? } ??
? ? ? ? dir.delete(); ??
? ? ? ? return true; ??
? ? } ??
?
? ? /** ?
? ? ?* 拷贝一个文件,srcFile源文件,destFile目标文件 ?
? ? ?* ??
? ? ?* @param path ?
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public boolean copyFileTo(File srcFile, File destFile) throws IOException { ??
? ? ? ? if (srcFile.isDirectory() || destFile.isDirectory()) ??
? ? ? ? ? ? return false;// 判断是否是文件 ??
? ? ? ? FileInputStream fis = new FileInputStream(srcFile); ??
? ? ? ? FileOutputStream fos = new FileOutputStream(destFile); ??
? ? ? ? int readLen = 0; ??
? ? ? ? byte[] buf = new byte[1024]; ??
? ? ? ? while ((readLen = fis.read(buf)) != -1) { ??
? ? ? ? ? ? fos.write(buf, 0, readLen); ??
? ? ? ? } ??
? ? ? ? fos.flush(); ??
? ? ? ? fos.close(); ??
? ? ? ? fis.close(); ??
? ? ? ? return true; ??
? ? } ??
?
? ? /** ?
? ? ?* 拷贝目录下的所有文件到指定目录 ?
? ? ?* ??
? ? ?* @param srcDir ?
? ? ?* @param destDir ?
? ? ?* @return ?
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public boolean copyFilesTo(File srcDir, File destDir) throws IOException { ??
? ? ? ? if (!srcDir.isDirectory() || !destDir.isDirectory()) ??
? ? ? ? ? ? return false;// 判断是否是目录 ??
? ? ? ? if (!destDir.exists()) ??
? ? ? ? ? ? return false;// 判断目标目录是否存在 ??
? ? ? ? File[] srcFiles = srcDir.listFiles(); ??
? ? ? ? for (int i = 0; i < srcFiles.length; i++) { ??
? ? ? ? ? ? if (srcFiles[i].isFile()) { ??
? ? ? ? ? ? ? ? // 获得目标文件 ??
? ? ? ? ? ? ? ? File destFile = new File(destDir.getPath() + "\\" ?
? ? ? ? ? ? ? ? ? ? ? ? + srcFiles[i].getName()); ??
? ? ? ? ? ? ? ? copyFileTo(srcFiles[i], destFile); ??
? ? ? ? ? ? } else if (srcFiles[i].isDirectory()) { ??
? ? ? ? ? ? ? ? File theDestDir = new File(destDir.getPath() + "\\" ?
? ? ? ? ? ? ? ? ? ? ? ? + srcFiles[i].getName()); ??
? ? ? ? ? ? ? ? copyFilesTo(srcFiles[i], theDestDir); ??
? ? ? ? ? ? } ??
? ? ? ? } ??
? ? ? ? return true; ??
? ? } ??
?
? ? public boolean myCopyFilesTo(File srcDir, File destDir) throws IOException {
? ? ? ? boolean isSuccess = true;
? ? ? ? if (!destDir.exists())
? ? ? ? ? ? isSuccess = destDir.mkdirs();
? ? ? ? if (!isSuccess)
? ? ? ? ? ? return false;// 判断目标目录是否存在
?
?
? ? ? ? if (!srcDir.isDirectory() || !destDir.isDirectory())
? ? ? ? ? ? return false;// 判断是否是目录
?
?
?
? ? ? ? File[] srcFiles = srcDir.listFiles();
? ? ? ? for (int i = 0; i < srcFiles.length; i++) {
? ? ? ? ? ? if (srcFiles[i].isFile()) {
? ? ? ? ? ? ? ? // 获得目标文件
? ? ? ? ? ? ? ? File destFile = new File(destDir.getPath() + "\\" + srcFiles[i].getName());
? ? ? ? ? ? ? ? copyFileTo(srcFiles[i], destFile);
? ? ? ? ? ? } else if (srcFiles[i].isDirectory()) {
? ? ? ? ? ? ? ? File theDestDir = new File(destDir.getPath() + "\\" + srcFiles[i].getName());
? ? ? ? ? ? ? ? if (!theDestDir.exists()) {
? ? ? ? ? ? ? ? ? ? theDestDir.mkdirs();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? myCopyFilesTo(srcFiles[i], theDestDir);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return true;
? ? } ??
?
? ? /** ?
? ? ?* 移动一个文件 ?
? ? ?* ??
? ? ?* @param srcFile ?
? ? ?* @param destFile ?
? ? ?* @return ?
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public boolean moveFileTo(File srcFile, File destFile) throws IOException { ??
? ? ? ? boolean iscopy = copyFileTo(srcFile, destFile); ??
? ? ? ? if (!iscopy) ??
? ? ? ? ? ? return false; ??
? ? ? ? delFile(srcFile); ??
? ? ? ? return true; ??
? ? } ??
?
? ? /** ?
? ? ?* 移动目录下的所有文件到指定目录 ?
? ? ?* ??
? ? ?* @param srcDir ?
? ? ?* @param destDir ?
? ? ?* @return ?
? ? ?* @throws IOException ?
? ? ?*/ ?
? ? public boolean moveFilesTo(File srcDir, File destDir) throws IOException { ??
? ? ? ? if (!srcDir.isDirectory() || !destDir.isDirectory()) { ??
? ? ? ? ? ? return false; ??
? ? ? ? } ??
? ? ? ? File[] srcDirFiles = srcDir.listFiles(); ??
? ? ? ? for (int i = 0; i < srcDirFiles.length; i++) { ??
? ? ? ? ? ? if (srcDirFiles[i].isFile()) { ??
? ? ? ? ? ? ? ? File oneDestFile = new File(destDir.getPath() + "\\" ?
? ? ? ? ? ? ? ? ? ? ? ? + srcDirFiles[i].getName()); ??
? ? ? ? ? ? ? ? moveFileTo(srcDirFiles[i], oneDestFile); ??
? ? ? ? ? ? ? ? delFile(srcDirFiles[i]); ??
? ? ? ? ? ? } else if (srcDirFiles[i].isDirectory()) { ??
? ? ? ? ? ? ? ? File oneDestFile = new File(destDir.getPath() + "\\" ?
? ? ? ? ? ? ? ? ? ? ? ? + srcDirFiles[i].getName()); ??
? ? ? ? ? ? ? ? moveFilesTo(srcDirFiles[i], oneDestFile); ??
? ? ? ? ? ? ? ? delDir(srcDirFiles[i]); ??
? ? ? ? ? ? } ??
?
? ? ? ? } ??
? ? ? ? return true; ??
? ? } ??
} ?
实例:将一个文件夹下的所有文件包括文件夹全部拷贝到令一个目录下,如果,目标目录存在要复制的文件夹则不需要重新建立,没有则建立目录:
public class FileHelper {? ? private Context context; ??? ? public FileHelper(Context context) { ??? ? ? ? this.context = context; ??? ? } ???? ? // 复制一个目录到另一个目录,做合并处理? ? public boolean copyDirFilesTo(File srcDir, File destDir) throws IOException {? ? ? ? boolean isSuccess = true;? ? ? ? if (!destDir.exists())? ? ? ? ? ? isSuccess = destDir.mkdirs();? ? ? ? if (!isSuccess)? ? ? ? ? ? return false;// 判断目标目录是否存在? ? ? ? if (!srcDir.isDirectory() || !destDir.isDirectory())? ? ? ? ? ? return false;// 判断是否是目录? ? ? ? File[] srcFiles = srcDir.listFiles();? ? ? ? for (int i = 0; i < srcFiles.length; i++) {? ? ? ? ? ? if (srcFiles[i].isFile()) {? ? ? ? ? ? ? ? // 获得目标文件? ? ? ? ? ? ? ? File destFile = new File(destDir.getPath() + "/" + srcFiles[i].getName());? ? ? ? ? ? ? ? copyFileTo(srcFiles[i], destFile);? ? ? ? ? ? } else if (srcFiles[i].isDirectory()) {? ? ? ? ? ? ? ? File theDestDir = new File(destDir.getPath() + "/" + srcFiles[i].getName());? ? ? ? ? ? ? ? if (!theDestDir.exists()) {? ? ? ? ? ? ? ? ? ? theDestDir.mkdirs();? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? copyDirFilesTo(srcFiles[i], theDestDir);? ? ? ? ? ? }? ? ? ? }? ? ? ? return true;? ? }
? ? // 拷贝一个文件,srcFile源文件,destFile目标文件? ? public boolean copyFileTo(File srcFile, File destFile) throws IOException {? ? ? ? if (srcFile.isDirectory() || destFile.isDirectory())? ? ? ? ? ? return false;// 判断是否是文件? ? ? ? FileInputStream fis = new FileInputStream(srcFile);? ? ? ? FileOutputStream fos = new FileOutputStream(destFile);? ? ? ? int readLen = 0;? ? ? ? byte[] buf = new byte[1024];? ? ? ? while ((readLen = fis.read(buf)) != -1) {? ? ? ? ? ? fos.write(buf, 0, readLen);? ? ? ? }? ? ? ? fos.flush();? ? ? ? fos.close();? ? ? ? fis.close();? ? ? ? return true;? ? }
? ? // 删除一个目录(可以是非空目录)? ? public boolean delDir(File dir) {? ? ? ? if (dir == null || !dir.exists() || dir.isFile()) {? ? ? ? ? ? return false;? ? ? ? }? ? ? ? for (File file : dir.listFiles()) {? ? ? ? ? ? if (file.isFile()) {? ? ? ? ? ? ? ? file.delete();? ? ? ? ? ? } else if (file.isDirectory()) {? ? ? ? ? ? ? ? delDir(file);// 递归? ? ? ? ? ? }? ? ? ? }? ? ? ? dir.delete();? ? ? ? return true;? ? }
}主文件调用:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fileHelper = new FileHelper(? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? YyBackUpSetting.this);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String path = Environment? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .getExternalStorageDirectory()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .toString()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + "/yybackup/";? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? File srcFile = new File(path);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String paString = Environment? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .getExternalStorageDirectorySd()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .toString()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + "/yybackup/";? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? File destFile = new File(paString);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fileHelper.copyDirFilesTo(srcFile,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? destFile);