android - 使用 AssetManager openFD() 时出现问题

标签 android

我有一个扩展 SQLiteOpenHelper 的数据库帮助器类,在 onCreate 中,我想读取各种文本文件,每个文件都包含一个 SQL CREATE 命令。文本文件在我项目的 Assets 文件夹中,我正尝试按如下方式使用 FileReader...

@Override
public void onCreate(SQLiteDatabase db) {

    AssetManager am = context.getAssets();
    FileReader tableListFileReader = new FileReader(am.openFd(context.getString(R.string.db_schema_filelist_filename)).getFileDescriptor());

我得到如下异常...

java.io.FileNotFoundException: /npvr_db_schema_create_tables.txt

这显然似乎是从根目录 ('/') 开始的绝对路径,而其他 AssetManager 'open' 方法被记录为访问 'assets' 文件夹中的文件。不幸的是,这些方法返回一个 InputStream,它不能用于直接实例化一个 FileReader。

这对我来说没有意义 - 当然 AssetManager 应该正如它所说的那样,只需授予对我的 Assets 文件夹的访问权限。我在这里错过了什么吗?我应该如何以更好的方式解决这个问题?

最佳答案

这是一个读取 Assets 的 API 演示。文件名语义与打开 FD 相同:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.html

Assets 是通过将“assets”目录放入与“res”目录相同级别的目录来添加的。 (查看 ApiDemos 完整源代码以了解这一点。)

从字符串资源中获取要加载的 Assets 的文件名是……不寻常的……。您可能不想这样做。

关于android - 使用 AssetManager openFD() 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227874/

相关文章:

java - 静止不动时使用 TYPE_ROTATION_VECTOR 实现当前基本方向方法?

android - 使用 DexClassLoader 与动态加载的库交互

java - Android:ListView文本颜色不可见,我不希望它不可见

android - Android 和 iOS 自定义的 Google map POI 图标

android - Meteor:尝试在我的设备中运行我的应用程序会出现依赖性错误

android - 声音停止时该怎么办? Android Studio

android - VoIP 应用程序的打瞌睡和待机模式

java - 如何将数据从多个Arraylist移动​​到多个Array(Java中)

java - 如何将我的代码变成异步任务?

android - Facebook Android SDK - 应用程序请求不会重定向到 Google Play 商店