在Android资产文件夹检查文件的存在?

我的应用程序在assets文件夹的子目录中有.txt文件。 它读取这些.txt文件,并把它们放在一个textview中。 这工作很好,没有问题。

我应该关心资产文件夹中的文件被用户删除或丢失。 如果这可能发生,我的应用程序会得到一个错误,因为文件不会在那里,当它试图读取到stream中。

在阅读资产文件之前是否需要检查资产文件的存在,还是由资产pipe理者负责处理? 我也想知道是否有机会,用户会或可以删除​​和资产文件。

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

Solutions Collecting From Web of "在Android资产文件夹检查文件的存在?"

是和不

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

如果你问我,额外的代码是不需要的。 另外,如果你尝试打开一个不存在的文件,你会得到一个抛出的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"

理想情况下,apkbuild立后,没有人可以从中删除任何资产,但是如果有人反编译并重新编译,则可能是有可能的。

虽然对于其他场景,当运行时apk中没有资产时,我们可以检查资产的存在。

在我们的应用程序中,我们有一个使用gradle,ant和eclipse来构build应用程序的规定,并且对于每个构build机制,我们的某些资产文件都绑定在apk中,有些则不是,因此要确定当前构build版本中是否存在任何资产文件在运行时,

我们这样做如下:

 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。

无论如何,我都会亲自围绕任何阅读/写作,只是为了安全起见。