今天为了实现Java判断文件是否为真实的MP3文件这个小事搞了几个小时, 在搜索引擎找了好久, 但是没有结果, 最后在外网找到了解决办法.希望这个博客能方便更多的小伙伴!
首先要导入一下这个包
<!-- https://mvnrepository.com/artifact/net.jthink/jaudiotagger -->
<dependency>
<groupId>net.jthink</groupId>
<artifactId>jaudiotagger</artifactId>
<version>2.2.6-PATHRIK</version>
</dependency>
public class InspectMP3Test {
public static void main(String[] args) throws CannotReadException, TagException, InvalidAudioFrameException, ReadOnlyFileException, IOException {
// 这个是你的MP3文件存放的路径(根据自己情况自己修改)
String musicPath = "D:/learning/JAVA/music/夜空中最亮的星.mp3";
// 创建一个新的文件
File musicFile = new File(musicPath);
// 将文件转成MP3格式的
MP3File audioFile = (MP3File) AudioFileIO.read(musicFile);
if(audioFile.hasID3v1Tag()){
System.out.println("该文件含有 ID3v1Tag 标识");
}
if(audioFile.hasID3v2Tag()){
System.out.println("该文件含有 ID3v2Tag 标识");
}
}
}
因为在MP3文件中是否含有 "TAG" 标识是我们普通人判断MP3文件是否是其他类型文件篡改过来的主要依据, 而MP3有分有 ID3V1 和 ID3V2 通过 org.jaudiotagger.audio.mp3.MP3File; 这个类中的 hasID3v2Tag() 和 hasID3v1Tag()方法就能直接得到结果了.
所以要判断一个文件是否是MP3文件就可以引入 org.jaudiotagger.audio.mp3.MP3File 这个包后直接判断:
public class InspectMP3Test {
public static void main(String[] args) throws CannotReadException, TagException, InvalidAudioFrameException, ReadOnlyFileException, IOException {
// 这个是你的MP3文件存放的路径(根据自己情况自己修改)
String musicPath = "D:/learning/JAVA/music/夜空中最亮的星.mp3";
// 创建一个新的文件
File musicFile = new File(musicPath);
// 将文件转成MP3格式的
MP3File audioFile = (MP3File) AudioFileIO.read(musicFile);
/*if(audioFile.hasID3v1Tag()){
System.out.println("该文件含有 ID3v1Tag 标识");
}
if(audioFile.hasID3v2Tag()){
System.out.println("该文件含有 ID3v2Tag 标识");
}*/
// 因为MP3格式可能是 ID3v1Tag 或者 ID3v2Tag 的其中的一种, 所以两种都要判断
if(!audioFile.hasID3v1Tag() && !audioFile.hasID3v2Tag()){
System.out.println("该文件不是MP3格式");
}else{
System.out.println("该文件是MP3格式");
}
}
}