編輯:關於Android編程
本來遞歸拷貝文件夾是很容易的, 但是Android的assets提供的接口沒有文件操作那麼方便, 昨天寫了一個方法來實現把assets資源拷貝到指定目錄,
/**
* copy assets to releaseDir with full path
*
* @author brian
* @param context
* @param assetsDir
* @param releaseDir
*/
public static void releaseAssets(Context context, String assetsDir,
String releaseDir) {
if (TextUtils.isEmpty(releaseDir)) {
return;
} else if (releaseDir.endsWith(/)) {
releaseDir = releaseDir.substring(0, releaseDir.length() - 1);
}
if (TextUtils.isEmpty(assetsDir) || assetsDir.equals(/)) {
assetsDir = ;
} else if (assetsDir.endsWith(/)) {
assetsDir = assetsDir.substring(0, assetsDir.length() - 1);
}
AssetManager assets = context.getAssets();
try {
String[] fileNames = assets.list(assetsDir);//只能獲取到文件(夾)名,所以還得判斷是文件夾還是文件
if (fileNames.length > 0) {// is dir
for (String name : fileNames) {
if (!TextUtils.isEmpty(assetsDir)) {
name = assetsDir + / + name;//補全assets資源路徑
}
// Log.i(, brian name= + name);
String[] childNames = assets.list(name);//判斷是文件還是文件夾
if (!TextUtils.isEmpty(name) && childNames.length > 0) {
releaseAssets(context, name, releaseDir);//遞歸, 因為資源都是帶著全路徑,
//所以不需要在遞歸是設置目標文件夾的路徑
} else {
InputStream is = assets.open(name);
FileUtil.writeFile(releaseDir + / + name, is);
}
}
} else {// is file
InputStream is = assets.open(assetsDir);
// 寫入文件前, 需要提前級聯創建好路徑, 下面有代碼貼出
FileUtil.writeFile(releaseDir + / + assetsDir, is);
}
} catch (Exception e) {
e.printStackTrace();
}
}
級聯創建folder
public static void checkFolderExists(String path) {
File file = new File(path);
if (file.exists() && !file.isDirectory() || !file.exists()) {
file.mkdirs();
}
}
Android View繪制和顯示原理簡介
現在越來越多的應用開始重視流暢度方面的測試,了解Android應用程序是如何在屏幕上顯示的則是基礎中的基礎,就讓我們一起看看小小屏幕中大大的學問。這也是我下篇文章&mda
Android BLE學習筆記
前言:本文主要描述Android BLE的一些基礎知識及相關操作流程,不牽扯具體的業務實現,其中提供了針對廣播包及響應包的解析思路,希望對正在或即將面臨Android B
Android編程實現自定義ProgressBar樣式示例(背景色及一級、二級進度條顏色)
本文實例講述了Android編程實現自定義ProgressBar樣式。分享給大家供大家參考,具體如下:效果圖如下,本例中設置了第一級進度條和第二級進度條。樣式資源:pro
Android之——殺死用戶選中的進程優化
在上一篇博文《Android之——殺死用戶選中的進程(釋放進程占用的空間)》一文中,向大家介紹了如何殺死用戶選中的進程,但是,遺留了一個問題,那就