You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串转为InputStream存入R.raw?及音频字符串转回存储至R.raw

嘿,先得给你划个核心重点:Android里的R.raw目录是编译时生成的只读资源目录,运行时根本没办法往里面添加或修改文件哦!所有存到这里的文件都是你在开发阶段放到res/raw文件夹里,编译后打包进APK的,运行时只能读不能写。所以你的两个问题里,「存储到R.raw目录」这个需求是没法实现的,得换个存储位置(比如应用内部存储、外部存储)。下面给你具体的解决思路:

1. 字符串转InputStream并存储(替代R.raw的方案)

如果你的需求是把字符串转成InputStream后持久化存储,完全可以用应用内部存储(默认仅当前应用可访问,安全性高)或者外部存储来替代R.raw:

  • 第一步:字符串转InputStream
    直接用ByteArrayInputStream就能快速实现:
    String targetString = "你要转换的字符串内容";
    // 指定编码格式避免乱码,推荐UTF-8
    InputStream inputStream = new ByteArrayInputStream(targetString.getBytes(StandardCharsets.UTF_8));
    
  • 第二步:将InputStream内容保存到内部存储
    用openFileOutput方法把内容写入应用专属的文件目录:
    try (FileOutputStream fos = openFileOutput("saved_content.txt", Context.MODE_PRIVATE)) {
        byte[] buffer = new byte[1024];
        int bytesRead;
        // 逐字节读取InputStream并写入文件
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            fos.write(buffer, 0, bytesRead);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    

2. 音频字符串转回原格式并保存(替代R.raw的方案)

你之前把R.raw的音频转成字符串,大概率是把音频的二进制数据转成了Base64字符串(直接转普通字符串会损坏二进制数据),这里就按Base64的情况给你解决方案:

  • 第一步:Base64字符串转回音频字节数组
    String audioBase64Str = "你从R.raw音频转换得到的Base64字符串";
    // 解码回原音频的字节数组
    byte[] audioBytes = Base64.decode(audioBase64Str, Base64.DEFAULT);
    
  • 第二步:将字节数组写入新文件
    可以选择存到内部存储或外部存储:
    // 方案1:存到应用内部存储
    try (FileOutputStream fos = openFileOutput("new_audio.mp3", Context.MODE_PRIVATE)) {
        fos.write(audioBytes);
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    // 方案2:存到外部存储(Android 13+需申请READ_MEDIA_AUDIO等权限)
    File externalMusicDir = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
    if (externalMusicDir != null) {
        File newAudioFile = new File(externalMusicDir, "new_audio.mp3");
        try (FileOutputStream fos = new FileOutputStream(newAudioFile)) {
            fos.write(audioBytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    如果你的字符串不是Base64格式,需要对应使用你转换时的解码方式,但二进制数据转字符串几乎都会用Base64来避免数据丢失。

内容的提问来源于stack exchange,提问作者hyperCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:28:13