Невозможно объединить два mp3-файла
public class MainActivity extends Activity {
FileInputStream fistream2,fistream1;
File newFile=new File(Environment.getExternalStorageDirectory()
+File.separator
+"newfolder" //folder name
+File.separator
+"media"
+File.separator
+"player"+File.separator+"theonkar10.mp3");
File newFile1=new File(Environment.getExternalStorageDirectory()
+File.separator
+"newfolder" //folder name
+File.separator
+"media"
+File.separator
+"player"+File.separator+"1.mp3");
File newFile2=new File(Environment.getExternalStorageDirectory()
+File.separator
+"newfolder" //folder name
+File.separator
+"media"
+File.separator
+"player"+File.separator+"2.mp3");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
myMethod();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void myMethod() throws IOException
{
FileInputStream fistream1 = new FileInputStream(newFile1.getAbsolutePath()); // first source file
FileInputStream fistream2= new FileInputStream(newFile2.getAbsolutePath());//second source file
//SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
// FileOutputStream fostream = new FileOutputStream("C:\Temp\final.mp3");//destinationfile
FileOutputStream fostream=new FileOutputStream(newFile.getAbsolutePath(),true);
if(!newFile.exists()){
newFile.mkdirs();
int temp;
while( ( temp = sistream.read() ) != -1)
{
System.out.print( (char) temp ); // to print at DOS prompt
fostream.write(temp); // to write to file
}
fostream.close();
sistream.close();
fistream1.close();
fistream2.close();
}
}
}
Я получаю новый файл theonkar10. mp3, но файл имеет 0 байт.Возможно, я упускаю простой шаг.
1 ответ:
Три вещи, чтобы заставить эту штуку работать ^^
Создайте файл, а не каталог!
newFile.createNewFile();
Тогда еще одна важная часть: создайте поток fileoutputstream после того, как вы создали файл!
И в-третьих, кажется, что sequenceinputstream работает неправильно для меня, когда я использую два-arguemnt-конструктор, вместо этого используйте конструктор с перечислителем.
Вот резюме ^^
public void myMethod() throws IOException { FileInputStream fistream1 = new FileInputStream(newFile1 ); // first source file FileInputStream fistream2= new FileInputStream(newFile2 );//second source file Vector<FileInputStream> v = new Vector<FileInputStream>(); v.add(fistream1); v.add(fistream2); SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2); if(!newFile.exists()){ newFile.createNewFile(); FileOutputStream fostream=new FileOutputStream(newFile, true); int temp; while( ( temp = sistream.read() ) != -1) { System.out.print( (char) temp ); // to print at DOS prompt fostream.write((byte)temp); // to write to file } fostream.close(); sistream.close(); fistream1.close(); fistream2.close(); } }
Это работает здесь с моим env...