想用Java修改一个音频文件.ogg的标题,类似像千千静音里修改文件属性,标题、歌手名什么的可能由于是2进制文件,所以修改保存后的音频文件被破坏,不能用了。请问各位大侠有什么办法解决没有?
以下是我的程序:
FileInputStream bis = new FileInputStream(new File("e:/111.ogg"));
FileOutputStream bos = new FileOutputStream(new File("e:/222.ogg"));
byte b[]=new byte[1024];
int read=0;
int i=0;
while((read=bis.read(b, 0, 1024))!=-1){
if(i==0){
String s=new String(b);
String ss=s.substring(0,162)+"Title=你好 "+s.substring(174,s.length());
byte c[]=ss.getBytes();
i=1;
bos.write(c);
}else{
bos.write(b,0, read);
}
}
bis.close();
bos.close();
以下是我的程序:
FileInputStream bis = new FileInputStream(new File("e:/111.ogg"));
FileOutputStream bos = new FileOutputStream(new File("e:/222.ogg"));
byte b[]=new byte[1024];
int read=0;
int i=0;
while((read=bis.read(b, 0, 1024))!=-1){
if(i==0){
String s=new String(b);
String ss=s.substring(0,162)+"Title=你好 "+s.substring(174,s.length());
byte c[]=ss.getBytes();
i=1;
bos.write(c);
}else{
bos.write(b,0, read);
}
}
bis.close();
bos.close();
如果不全部是的话你的操作就有问题了。我只知道MP3格式的是用最后128位byte存储描述信息。
你把非描述信息读入String类型内部的话会进行字符编码,解码出来应该和原来的2进制不相同了。
我是把整个byte读入String,来确定Title的位置,如你所说应该是影响了其他非描述信息。
我去试试每次只取128byte修改。
或者有没有什么方法能够使这些信息读到String里修改后能还原到文件里?