工作中收集的或者自己写的一些关于文件方面的方法集合 /** * 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 ListfileList = 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(); } }