【问题标题】:Can't read file stored in res/raw无法读取存储在 res/raw 中的文件
【发布时间】:2015-02-15 19:21:48
【问题描述】:

我无法成功获取存储在 res/raw 目录中的公钥文件的内容。

我的目标是将此文件的内容读入File 对象,然后我将传递给另一个需要File 对象作为其参数之一的函数。

请务必注意,此文件包含一个 X509 密钥,我认为这意味着我需要将其内容作为字节(而不是文本)读取。

这是在我的主要活动的 onCreate 方法中:

String filename = context.getResources().getResourceName(R.raw.public_key);
Log.d(TAG, filename);
File publicKeyFile = new File(filename);
if (!publicKeyFile.exists()) Log.d(TAG, "no public key file");

产生这个输出:

raw/public_key
没有公钥文件

我做错了什么?谢谢!

【问题讨论】:

    标签: android android-studio


    【解决方案1】:

    我的目标是将这个文件的内容读入一个 File 对象,然后我将把它传递给另一个需要 File 对象作为其参数之一的函数。

    这是不可能的,除非您自己制作该文件的本地副本。

    我做错了什么?

    原始资源不是文件。它们是作为 APK 文件的 ZIP 存档中的条目。如果您想要File,请在原始资源上打开InputStream,将其内容复制到本地文件,然后使用本地文件。

    【讨论】:

    • 好的。我显然走错了路。我可以把这个公钥文件放在我想要的任何地方。我将它放在资源文件夹中的原因是为了这个特定目的 - 将它读入 File 对象。我应该将它存储在哪个文件夹中以便我可以那样阅读它?我希望不必引用整个文件路径,而只需引用“public_key”(而不是“~/dir/dir/dir/.../public_key”)。感谢您的帮助!
    • @Randall:“我应该将它存储在哪个文件夹中以便我可以这样阅读?” -- 您可以随 APK 一起发布的任何内容都不能直接作为 File 对象进行寻址。如果您想运送它,无论您使用原始资源还是资产,您都可以获得InputStream。如果您正在使用一些仅支持File 的第三方闭源代码,则必须制作数据的本地副本,或者切换到支持InputStream 的其他代码。
    • 好的。谢谢你的建议。我只是浪费了我生命中的两天。回到绘图板。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2011-03-14
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多