我需要合并2个mp3文件(端到端,不要将它们混合在一起)。这些文件位于我的res / raw文件夹中。当我用Media Player播放它们时它们可以工作,但是当我尝试合并它们时,我收到了这个错误:
java.io.FileNotFoundException: /android.content.res.AssetManager$AssetInputStream@65561058: open failed: ENOENT (No such file or directory)
我已经做了几个小时的试验和错误。我想我必须提供错误格式的FileInputStream,但似乎问题是在其他地方,涉及找不到文件或不允许访问目录或其他东西。我确实意识到这个网站上有很多类似的问题,但是我看过无数的问题但仍未找到解决方案。
以下是代码:
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();
}
}
新错误:
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 :(得分:0)
将FileInputStreams更改为InputStreams,并按以下方式获取它们:
InputStream is = getResources()。openRawResource(R.raw.file101);
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();
}
}
新错误:
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)