編輯:關於Android編程
目錄
獲取文件的所有節點游標
Enumeration entries = zipFile.entries();//ZipFile為java.util.zip.ZipFile
while(entries.hasMoreElements()){
//do something
}
ZipEntry ze = (ZipEntry)entries.nextElement();
boolean b = ze.isDirectory();//是否是目錄
String name = ze.getName();獲取文件/文件夾名稱
String name = new String(name.getBytes("8859_1"),"gb2312");//文件名轉碼
InputStream is = new BufferedInputStream(zipFile.getInputStream(ze));//從該節點獲取輸入流(輸入到內存,ze必須不是目錄)
zipFile.close();//關閉zip文件
/
分割節點名字符串(除了最後一個外均為路徑) 如果分割後字符串數組長度大於1,說明需要先創建文件夾 遍歷分割後的字符串數組(除最後一個)並逐個拼接到目標解壓路徑後,將新的字符串轉碼並調用mkdirs()逐級創建文件夾 將最後一個字符串轉碼並拼接到剛才的路徑字符串上並調用createNewFile()創建文件,此時已得到該節點的目標文件 根據目標文件創建輸出流,根據節點創建輸入流 從輸入流讀取數據復制到輸出流.
/**解壓zip文件到指定路徑*/
public static void unpackZipFile(ZipFile zipFile,String folderPath) {
Enumeration entries = zipFile.entries();
ZipEntry ze=null;
byte[] buf=new byte[1024];
//遍歷節點
while (entries.hasMoreElements()){
ze= (ZipEntry) entries.nextElement();
//region 該節點是目錄
if(ze.isDirectory()){
String dirstr= folderPath+ze.getName();//獲取文件夾名稱
try {
//創建文件夾
dirstr=new String(dirstr.getBytes("8859_1"),"gb2312");
File f=new File(dirstr);
f.mkdir();
}catch (Exception e){
e.printStackTrace();
}
continue;
}
//endregion
//region 該節點是文件
try {
//創建IO流復制文件
OutputStream os = new BufferedOutputStream(new FileOutputStream(getRealFileName(folderPath, ze.getName())));
InputStream is = new BufferedInputStream(zipFile.getInputStream(ze));
int readLen=0;
while ((readLen=is.read(buf,0,1024))!=-1){
os.write(buf,0,readLen);
}
is.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
//endregion
}
//關閉文件
try {
zipFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**根據相對路徑獲取並創建絕對路徑*/
private static File getRealFileName(String baseDir,String absFileName){
String[] dirs=absFileName.split("/");//獲取逐級相對路徑
File ret=new File(baseDir);//用於記錄每一級路徑
String substr=null;
if(dirs.length>1) {
//循環遍歷不包括最後一個節點,因為該節點不是路徑,獨立處理
for (int i = 0; i < dirs.length - 1; i++) {
substr = dirs[i];
try {
substr = new String(substr.getBytes("8859_1"), "gb2312");
} catch (Exception e) {
e.printStackTrace();
}
ret = new File(ret, substr);//記錄該級路徑
}
//創建每級目錄
if (!ret.exists()) {
ret.mkdirs();
}
}
//處理最後一個節點
substr=dirs[dirs.length-1];
try{
substr=new String(substr.getBytes("8859_1"),"gb2312");
}catch (Exception e){
e.printStackTrace();
}
ret=new File(ret,substr);
if(!ret.exists()){
try {
ret.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
return ret;
}
這裡面基本都是android framework層的源碼了。而且最近發現了一個比較不錯的github插件:OctoTree,它 是一個浏覽器插件,它可以讓你在Github
這是Android UI Fundamentals裡的內容 創建自定義視圖 創建自定義UI組件首先要繼承一個視圖類. 首先創建一個簡單的自定義視圖, 展示一條十
Android系統默認的Toast十分簡潔,使用也非常的簡單。但是有時我們的程序使用默認的Toast時會和程序的整體風格不搭配,這個時候我們就需要自定義Toast,使其與
這裡收集了大家常用的一些Android代碼,持續更新中,內容來自自己的平時積累和網絡上看到的文章。如有錯誤歡迎指正裡面可能會有重復內容,請忽略或者提醒我刪除。setBac