从res / raw文件夹中获取文件

时间:2014-08-12 15:21:58

标签: android file inputstream

我需要文件帮助。

        int aIdSound=R.raw.sound;  
        String path=getString(aIdSound); // return res/raw/sound.wav

        File file=new File(path);

        if(file.exists()){
            // File doesnt exist.

        }

所以我试过了

       InputStream input=getResources().openRawResource(aIdSound);

但是我需要File类,所以有没有办法如何将InputStream更改为File或任何想法如何通过id获取getFile?

3 个答案:

答案 0 :(得分:0)

您必须阅读InputStream,将其写入包含FileOutputStream的外部文件,以获取原始资源的File实例。

或者我错过了一个API。 :)

答案 1 :(得分:0)

尝试使用:

final int resId = getResources().getIdentifier("fileName.wav", "raw", getPackageName());

如果您正在尝试播放音频,则可能需要调查MediaPlayer。以下是我如何使用它:

try {
        final MediaPlayer player = MediaPlayer.create(this, redId);
        mp.start();
        mp.setOnCompletionListener(new OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.release();
            }
        });
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

如果您决定使用外部保存的文件,则应使用:

File fis = new File(Environment.getExternalStorageDirectory().getPath() + "fileName" + ".wav");
Uri external = Uri.fromFile(fis);

final MediaPlayer player = MediaPlayer.create(this, external);

答案 2 :(得分:0)

将该文件放在Asserts文件夹

您可以使用

获取该文件
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = dbf.newDocumentBuilder();

    // reading a assert file context.getAssets().open("filename.xml")

    Document doc = docBuilder.parse(context.getAssets().open("filename.xml"));

或从外部文件夹(SD卡)

 try{
    // Creating Input Stream 
    File file = new File(context.getExternalFilesDir(null), filename); 
    FileInputStream myInput = new FileInputStream(file);
    }catch (Exception e){
        e.printStackTrace(); 
        Toast.makeText(context, "Error in reading the file",   Toast.LENGTH_SHORT).show();
    }