簡體   English   中英

在androids assets文件夾中檢查文件是否存在?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM