首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并mp3文件FileNotFoundException

合并mp3文件FileNotFoundException
EN

Stack Overflow用户
提问于 2014-11-11 19:01:40
回答 1查看 311关注 0票数 0

我需要合并两个mp3文件(端到端,而不是混合在一起)。这些文件位于res/raw文件夹中。当我使用Media Player播放它们时,它们会工作,但是当我试图合并它们时,我会得到以下错误:

代码语言:javascript
复制
java.io.FileNotFoundException: /android.content.res.AssetManager$AssetInputStream@65561058: open failed: ENOENT (No such file or directory)

我已经试了好几个小时了。我想我一定是给FileInputStream提供了错误的格式或什么的,但问题似乎是在别的地方,包括找不到文件或不允许访问目录或其他什么东西。我意识到在这个网站上有许多类似的问题,但是我已经看了无数的问题,但仍然没有找到解决办法。

以下是代码:

代码语言:javascript
复制
    Handler handler=new Handler();
    handler.postDelayed(new Runnable() {

      @Override
      public void run() {

          File first =  new File(getResources().openRawResource(R.raw.file101).toString());
          File second = new File(getResources().openRawResource(R.raw.file103).toString());

          String filepath = Environment.getExternalStorageDirectory().getPath();
          File file = new File(filepath, "myapp");
          mergeSongs(new File(file.getAbsoluteFile()+"/mergedFile.mp3"), new File[] {first, second});

      }
  },2000);


private void mergeSongs(File mergedFile,File...mp3Files){

    try {
        FileInputStream fis1 = new FileInputStream(mp3Files[0]); //Error is at this line
        FileInputStream fis2 = new FileInputStream(mp3Files[1]);
        Toast.makeText(MainActivity.this, mp3Files[0].toString()+mp3Files[1].toString(), Toast.LENGTH_LONG).show();
        SequenceInputStream sis = new SequenceInputStream(fis1,fis2);

        if(!mergedFile.exists()){
            mergedFile.createNewFile();}

        FileOutputStream fos = new FileOutputStream(mergedFile);

        int temp;

         while ((temp = sis.read())!= -1){

                fos.write((byte)temp);

            }

         fis1.close();
         fis2.close();
         sis.close();
         fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

}

新错误:

代码语言:javascript
复制
11-11 11:46:14.180: W/System.err(23975): java.io.IOException: open failed: ENOENT (No such file or directory)
11-11 11:46:14.180: W/System.err(23975):    at java.io.File.createNewFile(File.java:946)
11-11 11:46:14.180: W/System.err(23975):    at com.myapp.MainActivity.mergeSongs(MainActivity.java:311)
11-11 11:46:14.180: W/System.err(23975):    at com.myapp.MainActivity.access$7(MainActivity.java:300)
11-11 11:46:14.180: W/System.err(23975):    at com.myapp.MainActivity$8.run(MainActivity.java:290)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 19:32:07

将您的FileInputStreams更改为InputStreams,并使其如下所示:

getResources().openRawResource(R.raw.file101);= InputStream

代码语言:javascript
复制
    Handler handler=new Handler();
    handler.postDelayed(new Runnable() {

      @Override
      public void run() {

          InputStream first =  getResources().openRawResource(R.raw.file101);
          InputStream second = getResources().openRawResource(R.raw.file103);

          String filepath = Environment.getExternalStorageDirectory().getPath();
          File file = new File(filepath, "myapp");
          mergeSongs(new File(file.getAbsoluteFile()+"/mergedFile.mp3"), new InputStream[] {first, second});

      }
  },2000);


private void mergeSongs(File mergedFile,InputStream...mp3InputStream){

    try {
        InputStream fis1 = mp3InputStream[0]; //Error is at this line
        InputStream fis2 = mp3InputStream[1];
        Toast.makeText(MainActivity.this, "Something", Toast.LENGTH_LONG).show();
        SequenceInputStream sis = new SequenceInputStream(fis1,fis2);

        if(!mergedFile.exists()){
            mergedFile.createNewFile();}

        FileOutputStream fos = new FileOutputStream(mergedFile);

        int temp;

         while ((temp = sis.read())!= -1){

                fos.write((byte)temp);

            }

         fis1.close();
         fis2.close();
         sis.close();
         fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

}

新错误:

代码语言:javascript
复制
11-11 11:46:14.180: W/System.err(23975): java.io.IOException: open failed: ENOENT (No such file or directory)
11-11 11:46:14.180: W/System.err(23975):    at java.io.File.createNewFile(File.java:946)
11-11 11:46:14.180: W/System.err(23975):    at com.myapp.MainActivity.mergeSongs(MainActivity.java:311)
11-11 11:46:14.180: W/System.err(23975):    at com.myapp.MainActivity.access$7(MainActivity.java:300)
11-11 11:46:14.180: W/System.err(23975):    at com.myapp.MainActivity$8.run(MainActivity.java:290)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26872452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档