因此,我制作了一个在 Java 中拆分 .mp3 文件的程序。基本上,它在某些文件上运行良好,但在某些文件上,第一个拆分文件在播放某些部分后遇到错误。其他文件虽然工作得很好。
我认为这与文件如何不能是我的数组大小的倍数有关,并且应该留下一些 mod 值。任何人都可以找出这段代码中的错误并纠正它吗?
(这里,splitval = 要进行的分割数,filename1= 所选文件)
int splitsize=filesize/splitval;
String filecalled;
try
{
byte []b=new byte[splitsize];
FileInputStream fis = new FileInputStream(filename1);
name1=filename2.replaceAll(".mp3", "");
for(int j=1;j<=splitval;j++)
{
filecalled=name1+"_split_"+j+".mp3";
FileOutputStream fos = new FileOutputStream(filecalled);
int i=fis.read(b);
fos.write(b, 0, i);
//System.out.println("no catch");
}
JOptionPane.showMessageDialog(this, "split process successful");
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
提前致谢!
编辑:我按照建议编辑了代码,运行它。这里:
C:\Users\dell5050\Desktop\Julien.mp3 5383930 bytes
C:\Users\dell5050\Desktop\ Julien_split_1.mp3 1345984 bytes
C:\Users\dell5050\Desktop\ Julien_split_2.mp3 1345984 bytes
C:\Users\dell5050\Desktop\ Julien_split_3.mp3 1345984 bytes
C:\Users\dell5050\Desktop\ Julien_split_4.mp3 1345978 bytes
最后几个字节发生了变化,这意味着文件大小%splitval 已解决。但在播放最后一部分时,包含“_split_1”的第一个文件仍然存在错误。
包含“_split_2”的第二个文件正好从第一个文件结束的地方开始。所以拆分过程是正确的。那么,第一个文件末尾的多余空白到底是什么?
另外,我注意到原始文件的图稿和信息仅保留到第一个文件中。没有其他文件。它与此有关吗?同样的事情不会发生在其他一些 mp3 文件中。
代码:
FileInputStream fis;
FileOutputStream fos;
int splitsize = (int)(filesize / splitval) + (int)(filesize % splitval);
byte[] b = new byte[splitsize];
System.out.println(filename1 + " " + filesize + " bytes");
try
{
fis = new FileInputStream(file);
name1 = filename2.replaceAll(".mp3", "");
for (int j = 1; j <= splitval; j++)
{
String filecalled = name1 + "_split_" + j + ".mp3";
fos = new FileOutputStream(filecalled);
int i = fis.read(b);
fos.write(b, 0, i);
fos.close();
System.out.println(filecalled + " " + i + " bytes");
}
}
catch(IOException ie)
{
System.out.println(ie.getMessage());
}