【问题标题】:Accessing Files in the Raw folder in Android在 Android 中访问 Raw 文件夹中的文件
【发布时间】:2016-01-16 04:48:20
【问题描述】:

我正在开发 Android 应用程序中的导出功能。这些文件是存储在 res/raw 文件夹中的 wav 文件。如何访问这些文件?

uri = Uri.parse("android.resource://" + getPackageName() + "/raw/" + selection[i]);


            try{
                file[i] = new File(uri.getPath());
                if(file[i].exists()){
                    Log.i("EXIST", "EXIST");
                }else{
                    Log.i("EXIST", "NOT");
                }

            }
            catch(Exception e){
                Log.i("ERROR", "File Not Found");
            }

selection[i] 是我在 res/raw 文件夹中需要的文件的文件名。代码总是返回“NOT”,这意味着它没有从 res/raw 文件夹中找到我想要的文件。任何人都可以帮助我吗?谢谢。

【问题讨论】:

    标签: android audio export wav


    【解决方案1】:

    我不确定您是否可以像这样通过File 访问资源。以下是我在原始文件夹中读取 HTML 文件的方式:

    public static String getStringFromResource(Context context, @RawRes int id) {
        BufferedReader reader = null;
    
        try {
            StringBuilder stringBuilder = new StringBuilder();
            InputStream inputStream = context.getResources().openRawResource(id);
            reader = new BufferedReader(new InputStreamReader(inputStream));
    
            String currentLine;
            while ((currentLine = reader.readLine()) != null ) {
                stringBuilder.append(currentLine);
            }
            return stringBuilder.toString();
        } catch (IOException e) {
            Log.e(TAG, "Error opening raw resource: " + id);
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    Log.e(TAG, "Error closing raw resource: " + id, e);
                }
            }
        }
    
        return null;
    }
    

    对您而言,关键部分是 InputStream inputStream = context.getResources().openRawResource(id); 调用,它将为您提供文件流。使用该流写入您正在导出的输出文件。

    【讨论】:

    • 感谢您的回答。我想访问原始文件夹中的文件,因为需要合并的文件在里面。可以合并的文件可以很多,不限于两个。有没有办法获取原始文件夹的路径,以便 File 构造函数可以访问它?
    • @xiotee 问题是原始文件夹在您的 apk 中。您始终可以将文件加载到内存中(字节 [])并合并它们。或者您可以将文件写入本地路径,然后合并。 developer.android.com/training/basics/data-storage/… 但是,根据您的合并方式,您可以一次打开一个流并将它们写入同一个输出文件。
    • 谢谢。我会试试这个解决方案。
    【解决方案2】:

    这将为您的原始文件返回一个字节数组:

     Resources res = context.getResources();
        InputStream inputStream = res.openRawResource(rawResource);
        try {
            byte[] b = new byte[inputStream.available()];
            inputStream.read(b);
        } catch (Exception e) {
            // exception thrown
        }
    

    【讨论】:

    • 谢谢。无论如何,您是否可以使用 File 构造函数可以用来创建 File 对象的路径访问原始文件夹?
    • 我不知道有什么方法可以做到这一点。我想您可以通过以下方式将其从原始文件夹写入文件(但我尚未对此进行测试):File file = new File(path); FileOutputStream fos=new FileOutputStream(file); fos.write(b); fos.close();
    • 谢谢。我试试看。
    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多