android res命名格式,关于android:如何按名称从res / raw读取文件

我想从文件夹res / raw /中打开文件。

我绝对确定该文件存在。

打开我尝试过的文件

File ddd = new File("res/raw/example.png");

命令

ddd.exists();

产生FALSE。 因此,此方法不起作用。

MyContext.getAssets().open("example.png");

最终以getMessage()" null"出现异常。

只需使用

R.raw.example

这是不可能的,因为文件名仅在运行时称为字符串。

为什么访问/ res / raw /文件夹中的文件如此困难?

Android动态资源加载的可能重复项

为什么仅在运行时将其称为字符串? 您能否在字符串和ID之间保持映射?

阅读文档:developer.android.com/guide/topics/resources/

谢谢你的链接。 我将给出正确的解决方案作为单独的答案。

借助给定的链接,我能够自己解决问题。 正确的方法是使用

getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",

"raw", getPackageName());

使其作为InputStream获得

InputStream ins = getResources().openRawResource(

getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION",

"raw", getPackageName()));

只是为了澄清一下:不要在文件名前面加上raw。有效示例:resrawproducts.json的.getIdentifier("products","raw", getPackageName());

正如JJD所述,您不需要FILENAME_WITHOUT_EXTENSION之前的raw /。我发现,如果您想使用扩展名,例如,我有两个文件abc.jpg和abc.zip,我会将它们都以abc_jpg和abc_zip的形式添加到原始文件夹中(忽略原始文件夹中的扩展名),然后分配String变量filename = abc.jpg或abc.zip,然后使用InputStream ins = getResources()。openRawResource(getResources()。getIdentifier(filename.replace("。"," _")," raw",getPackageName()));希望这可以帮助某人:)

记得关闭所有打开的流

我需要文件路径...如何获取它而不是输入流?

这是从原始文件夹获取XML文件的示例:

InputStream XmlFileInputStream = getResources().openRawResource(R.raw.taskslists5items); // getting XML

那么你就可以:

String sxml = readTextFile(XmlFileInputStream);

什么时候:

public String readTextFile(InputStream inputStream) {

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

byte buf[] = new byte[1024];

int len;

try {

while ((len = inputStream.read(buf)) != -1) {

outputStream.write(buf, 0, len);

}

outputStream.close();

inputStream.close();

} catch (IOException e) {

}

return outputStream.toString();

}

问题是我不能使用R.raw.XYZ,因为XYZ的名称只能作为字符串使用。但是simon的链接可以帮助我解决问题。我将给出正确的解决方案作为单独的答案。

这工作得很好InputStream input = Context.getResources().openRawResource(R.raw.configjson);

您可以使用getResources().openRawResource(R.raw.myfilename)以原始/分辨率读取文件。

但是有一个IDE限制,即您使用的文件名只能包含小写字母数字字符和点。 因此,像XYZ.txt或my_data.bin这样的文件名将不会在R中列出。

资源文件名中也可以使用下划线

也允许使用数字(而不是第一个字符)。

不作为第一个字符...因为这不是有效的Java变量标识符

您可以使用以下两种方法使用Kotlin读取原始资源。

您可以通过获取资源ID来获取它。 或者,您可以使用字符串标识符,在其中可以以增量方式以编程方式更改文件名。

队友的欢呼声 ??

// R.raw.data_post

this.context.resources.openRawResource(R.raw.data_post)

this.context.resources.getIdentifier("data_post","raw", this.context.packageName)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值