[英]Check for file existence in androids assets folder?
我的應用程序在assets文件夾的子目錄中有.txt文件。 它讀取那些.txt文件並將它們放在textview中。 它運作良好,沒有任何問題。
我是否應該關注資產文件夾中的文件被用戶刪除或丟失。 如果這種情況發生,我的應用程序會收到錯誤,因為當它試圖將其讀入流中時,該文件將不會存在。
在我閱讀資產文件之前是否需要檢查資產文件是否存在,或資產經理是否負責這一切? 我也想知道用戶是否有機會刪除和資產文件。
就像我說的,一切正常,沒有我插入代碼來檢查文件是否存在。 我只是想知道人們每次從資產中讀取流時是否都使用.exists()語句。
您可能會擔心該文件已被刪除並且apk已辭職
你可以檢查使用:
Arrays.asList(getResources().getAssets().list("")).contains("myFile")
如果你真的想檢查文件是否存在:
AssetManager mg = getResources().getAssets();
InputStream is = null;
try {
is = mg.open(pathInAssets);
//File exists so do something with it
} catch (IOException ex) {
//file does not exist
} finally {
if (is != null) {
is.close();
}
}
如果您的文件位於assets/folder/file.ext
,則pathInAssets
將為"folder/file.ext"
理想情況下,在構建apk之后,沒有人可以從中刪除任何資產,但如果有人反編譯它並重新編譯,那么可能。
雖然對於其他情況,當運行時apk中沒有資產時,我們可以檢查資產是否存在。
在我們的應用程序中,我們有一個使用gradle,ant和eclipse構建應用程序的規定,並且對於每個構建機制,我們的一些資產文件被捆綁在apk中,而有些則不是,因此要確定當前構建中是否存在任何資產文件apk在運行時,
我們這樣做如下:
private boolean isAssetExists(String pathInAssetsDir){
AssetManager assetManager = AppContext.get().getResources().getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open(pathInAssetsDir);
if(null != inputStream ) {
return true;
}
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
是和否。
普通用戶無法刪除它們,但是根電話上的用戶不知道他們正在做什么......這是一種不同的情況。
如果你問我,不需要額外的代碼。 此外,如果您嘗試打開不存在的文件,您將在某個時刻拋出異常,捕獲該異常並顯示對話框(如果您確實需要)。
我覺得你應該沒問題。 從我手機中的根目錄開始,我看不到刪除應用程序的任何方法而不刪除應用程序,因為它似乎都包含在.apk文件中。 你可以這樣做,但我認為你需要扎根或使用adb。
無論如何,我會親自圍繞任何帶有try / catch塊的讀/寫,只是為了安全起見。
AssetManager am = getAssets();
try {
List<String> mapList = Arrays.asList(am.list("path/in/assets/folder"));
if (mapList.contains("file_to_check")) {
Log.e("ERROR", "exists");
} else {
Log.e("ERROR", "not exists");
}
} catch ( IOException ex){
ex.printStackTrace();
}
轉換為函數或方法可以很容易;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.