在androids assets文件夹中检查文件是否存在?

我的应用程序在assets文件夹的子目录中有.txt文件。 它读取那些.txt文件并将它们放在textview中。 它运作良好,没有任何问题。

我是否应该关注资产文件夹中的文件被用户删除或丢失。 如果这种情况发生,我的应用程序会收到一个错误,因为当它试图将其读入流中时,该文件不会出现。

在我阅读资产文件之前是否需要检查资产文件的存在,或者资产经理是否负责这一切? 我也想知道用户是否有机会删除和资产文件。

就像我说的,一切正常,没有我插入代码来检查文件是否存在。 我只是想知道人们每次从资产中读取流时是否都使用.exists()语句。

Solutions Collecting From Web of "在androids assets文件夹中检查文件是否存在?"

是和否。

普通用户将无法删除它们,但是根电话上的用户不知道他们正在做什么……这是一种不同的情况。

如果你问我,不需要额外的代码。 此外,如果您尝试打开不存在的文件,您将在某个时刻抛出exception,捕获该exception并显示对话框(如果您确实需要)。

您可能担心该文件已被删除并且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块亲自围绕任何读/写,只是为了安全起见。