Java 使用mp3agic更改相册名称

Java 使用mp3agic更改相册名称,java,mp3,mp3agic,Java,Mp3,Mp3agic,我想循环浏览一个包含ig.mp3文件的文件夹,并使用将它们的相册名称(如果它们没有)更改为它们的标题(例如,标题为“Remix”的Remix.mp3将获得相册“Remix”) 这是我目前的代码: if (mp3file.hasId3v1Tag()) { ID3v1 id3v1Tag = mp3file.getId3v1Tag(); try { if (id3v1Tag.getAlbum().equals("")) { id3v1Tag.s

我想循环浏览一个包含ig.mp3文件的文件夹,并使用将它们的相册名称(如果它们没有)更改为它们的标题(例如,标题为“Remix”的Remix.mp3将获得相册“Remix”)

这是我目前的代码:

if (mp3file.hasId3v1Tag()) {
    ID3v1 id3v1Tag = mp3file.getId3v1Tag();

    try {
        if (id3v1Tag.getAlbum().equals("")) {
            id3v1Tag.setAlbum(id3v1Tag.getTitle());
            mp3file.save(SAVE_DIR + "\\" + child.getName());
            System.out.println(SAVE_DIR + "/" + child.getName());
        } else {
            mp3file.save(SAVE_DIR + "/" + child.getName());
        }
    } catch (Exception e) {
        mp3file.save(SAVE_DIR + "/" + child.getName());
    }
}
我得到以下错误:

线程“main”com.mpatric.mp3agic.notsupported中出现异常异常异常:不支持打包障碍帧 在com.mpatric.mp3agic.id3v2obseletframe.packFrame(id3v2obseletframe.java:32)上 位于com.mpatric.mp3agic.ID3v2Frame.toBytes(ID3v2Frame.java:83) 在com.mpatric.mp3agic.AbstractID3v2Tag.packSpecifiedFrames上(AbstractID3v2Tag.java:275) 在com.mpatric.mp3agic.AbstractID3v2Tag.packFrames上(AbstractID3v2Tag.java:261) 在com.mpatric.mp3agic.AbstractID3v2Tag.packTag(AbstractID3v2Tag.java:227)上 在com.mpatric.mp3agic.AbstractID3v2Tag.toBytes上(AbstractID3v2Tag.java:218) 在com.mpatric.mp3agic.Mp3File.save上(Mp3File.java:450) 位于de.thejetstream.main.Iterator.(Iterator.java:57) 位于de.thejetstream.main.main.main(main.java:12)

在此文件中:

姓名:穿黑色和黄色感觉很好。mp3

标题:穿黑色和黄色感觉良好(壮举:大猩猩与灵魂)

专辑:黑色和黄色-单曲

它在第57行崩溃,这相当于最后一次保存(在捕获中)

这个代码有什么问题?是否仅仅因为文件使用了一种旧的编解码器或类似的东西?

我找到了解决方案:


问题是这些文件使用ip3v2标记而不是ip3v1。只需检查它是哪一个,并相应地调整代码即可解决所有问题。

想想看……为什么需要试一试?如果需要它,那么catch中的mp3agic.save()方法不也需要它吗?此外,你应该始终确保捕捉到正确的异常情况。@DevilsHnd这只是一个用于批量更改某些音乐文件的小程序,以后不会使用。这就是为什么我不使用适当的异常,因为它应该只是在一些文件中循环。我认为损坏的文件可能使用了一个旧的.mp3编解码器,因此不能由mp3agic保存,但我不太确定。