工作中收集的或者自己写的一些关于文件方面的方法集合 /** * Created by yuyue on 15/12/18. */public class FileUtil { /** * 移动文件 * * @param srcFileName 源文件完整路径 * @param destDirName 目的目录完整路
/**
* Created by yuyue on 15/12/18.
*/
public class FileUtil {
/**
* 移动文件
*
* @param srcFileName 源文件完整路径
* @param destDirName 目的目录完整路径
* @return 文件移动成功返回true,否则返回false
*/
public static boolean moveFile(String srcFileName, String destDirName, String newName) {
File srcFile = new File(srcFileName);
if (!srcFile.exists() || !srcFile.isFile())
return false;
File destDir = new File(destDirName);
if (!destDir.exists())
destDir.mkdirs();
try {
InputStream fosfrom = new FileInputStream(srcFileName);
OutputStream fosto = new FileOutputStream(destDirName + File.separator + (newName != null ? newName : srcFile.getName()));
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 文件删除成功返回true,否则返回false
*/
public static boolean deleteFile(String filePath) {
if (filePath == null)
return false;
File file = new File(filePath);
if (file.isFile() && file.exists()) {
return file.delete();
}
return false;
}
/**
* 删除文件夹以及目录下的文件
*
* @param filePath 被删除目录的文件路径
* @return 目录删除成功返回true,否则返回false
*/
public static boolean deleteDirectory(String filePath, boolean isDelPath) {
boolean flag = false;
//如果filePath不以文件分隔符结尾,自动添加文件分隔符
if (!filePath.endsWith(File.separator)) {
filePath = filePath + File.separator;
}
File dirFile = new File(filePath);
if (!dirFile.exists() || !dirFile.isDirectory()) {
return false;
}
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(), true);
if (!flag) break;
}
}
if (!flag) return false;
//删除当前空目录
if (isDelPath)
{
dirFile.delete();
}
return true;
}
/**
* 根据路径删除指定的目录或文件,无论存在与否
*
* @param filePath 要删除的目录或文件
* @return 删除成功返回 true,否则返回 false。
*/
public static boolean DeleteFolder(String filePath) {
File file = new File(filePath);
if (!file.exists()) {
return false;
} else {
if (file.isFile()) {
// 为文件时调用删除文件方法
return deleteFile(filePath);
} else {
// 为目录时调用删除目录方法
return deleteDirectory(filePath, true);
}
}
}
/**
* 判断文件夹是否存在若不存在创建一个
*
* @param path
*/
public static void CreateDir(String path) {
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
}
// /**
// * 根据url获取本地路径
// *
// * @param context
// * @param lUri
// * @return
// */
// public static String getPathFromUri(Context context, Uri lUri) {
// String img_path = null;
// if (lUri.toString()
// .startsWith("content://com.google.android.gallery3d")
// || lUri.toString().startsWith(
// "content://com.sec.android.gallery3d")) {
// img_path = lUri.toString();
// }
// if (img_path == null) {
// Cursor actualimagecursor = null;
// ContentResolver localContentResolver = context.getContentResolver();
// try {
// String[] proj = {MediaStore.Images.Media.DATA};
// actualimagecursor = localContentResolver.query(lUri, proj,
// null, null, null);
// actualimagecursor.moveToFirst();
// int actual_image_column_index = actualimagecursor
// .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
// img_path = actualimagecursor
// .getString(actual_image_column_index);
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// if (actualimagecursor != null) {
// actualimagecursor.close();
// actualimagecursor = null;
// }
// }
// }
// if (img_path == null) { // 部分手机uri为图片真实路径
// img_path = lUri.getPath();
// }
// return img_path;
// }
/**
* 复制单个文件
* @param oldPath String 原文件路径 如:c:/fqf.txt
* @param newPath String 复制后路径 如:f:/fqf.txt
* @return boolean
*/
public static void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件不存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
fs.close();
}
}
catch (Exception e) {
System.out.println("复制单个文件操作出错");
e.printStackTrace();
}
}
/**
* 通知媒体库更新文件
* @param context
* @param filePath 文件全路径
*
* */
public static void scanFile(Context context, String filePath) {
Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
scanIntent.setData(Uri.fromFile(new File(filePath)));
context.sendBroadcast(scanIntent);
}
/**
* 复制整个文件夹内容
* @param oldPath String 原文件路径 如:c:/fqf
* @param newPath String 复制后路径 如:f:/fqf/ff
* @return boolean
*/
public void copyFolder(String oldPath, String newPath) {
try {
(new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹
File a=new File(oldPath);
String[] file=a.list();
File temp=null;
for (int i = 0; i < file.length; i++) {
if(oldPath.endsWith(File.separator)){
temp=new File(oldPath+file[i]);
}
else{
temp=new File(oldPath+ File.separator+file[i]);
}
if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath + "/" +
(temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ( (len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if(temp.isDirectory()){//如果是子文件夹
copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);
}
}
}
catch (Exception e) {
System.out.println("复制整个文件夹内容操作出错");
e.printStackTrace();
}
}
/**
* 获取sd卡路径
*
* @return
*/
public static String getSDPath() {
boolean hasSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if (hasSDCard) {
return Environment.getExternalStorageDirectory().toString() + "/saving_picture";
} else
return "/data/data/com.example.pdftest.utils/saving_picture";
}
/**
* Method for return file path of Gallery image
*
* @param context
* @param uri
* @return path of the selected image file from gallery
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
public static String getPath(final Context context, final Uri uri) {
// check here to KITKAT or new version
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/"
+ split[1];
}
}
// DownloadsProvider
else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] { split[1] };
return getDataColumn(context, contentUri, selection,
selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {
// Return the remote address
if (isGooglePhotosUri(uri))
return uri.getLastPathSegment();
return getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
/**
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context
* The context.
* @param uri
* The Uri to query.
* @param selection
* (Optional) Filter used in the query.
* @param selectionArgs
* (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/
public static String getDataColumn(Context context, Uri uri,
String selection, String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = { column };
try {
cursor = context.getContentResolver().query(uri, projection,
selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
/**
* @param uri
* The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri
.getAuthority());
}
/**
* @param uri
* The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri
.getAuthority());
}
/**
* @param uri
* The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri
.getAuthority());
}
/**
* @param uri
* The Uri to check.
* @return Whether the Uri authority is Google Photos.
*/
public static boolean isGooglePhotosUri(Uri uri) {
return "com.google.android.apps.photos.content".equals(uri
.getAuthority());
}
public static byte[] getFileBytes(String path) {
try {
File file = new File(path);
FileInputStream fileIn =new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n = 0;
while ((n = fileIn.read(buf)) != -1)
{
bos.write(buf, 0, n);
}
fileIn.close();
bos.close();
byte[] arr = bos.toByteArray();
return arr;
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
public static byte[] getFileBytes(String path, String fileName) {
return getFileBytes(path+fileName);
}
public static File fileFromAsset(Context context, String assetName) throws IOException {
File outFile = new File(Conts.ROOT, assetName);
copy(context.getAssets().open(assetName), outFile);
return outFile;
}
public static void copy(InputStream inputStream, File output) throws IOException {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(output);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} finally {
if (outputStream != null) {
outputStream.close();
}
}
}
}
static List
fileList = null;
public static List
getFiles(String Path, String[] Extension, boolean IsIterative){ fileList = new ArrayList(); // 结果 List getFilesCore(Path, Extension, IsIterative); return fileList; } private static void getFilesCore(String Path, String[] Extension, boolean IsIterative) // 搜索目录,扩展名(判断的文件类型的后缀名),是否进入子文件夹 { File[] files = new File(Path).listFiles(); for (int i = 0; i < files.length; i++) { File f = files[i]; if (f.isFile()) { for (String s: Extension) { if (f.getPath() .substring(f.getPath().length() - s.length()) .equals(s)) { // 判断扩展名 fileList.add(f.getPath()); break; } } if (!IsIterative) break; //如果不进入子集目录则跳出 } else if (f.isDirectory() && f.getPath().indexOf("/.") == -1) // 忽略点文件(隐藏文件/文件夹) getFiles(f.getPath(), Extension, IsIterative); //这里就开始递归了 } } public static void getFilesCore(Handler handler, String Path, String[] Extension, boolean IsIterative) // 搜索目录,扩展名(判断的文件类型的后缀名),是否进入子文件夹 { File[] files = new File(Path).listFiles(); for (int i = 0; i < files.length; i++) { File f = files[i]; if (f.isFile()) { for (String s: Extension) { if (f.getPath() .substring(f.getPath().length() - s.length()) .equals(s)) { // 判断扩展名 // fileList.add(f.getPath()); Bundle bundle = new Bundle(); bundle.putString("path", f.getPath()); Message message = new Message(); message.what = 1; message.obj = bundle; handler.sendMessage(message); break; } } if (!IsIterative) break; //如果不进入子集目录则跳出 } else if (f.isDirectory() && f.getPath().indexOf("/.") == -1) // 忽略点文件(隐藏文件/文件夹) getFiles(f.getPath(), Extension, IsIterative); //这里就开始递归了 } } public static boolean isFileExit(String filePath){ File file = new File(filePath); return file.exists(); } }
