好吧,我的代码如下。我想知道为什么总会有例外。 mp3文件与test.java文件位于同一目录中。我究竟做错了什么?另外,如何从我的音乐库中读取mp3文件:path - Libraries \ Music
import java.io.IOException;
import com.mpatric.mp3agic.ID3v1;
import com.mpatric.mp3agic.InvalidDataException;
import com.mpatric.mp3agic.Mp3File;
import com.mpatric.mp3agic.UnsupportedTagException;
public class test
{
public static void main(String args[])
{
Mp3File mp3file = null;
try {
mp3file = new Mp3File("dom.mp3");
} catch (UnsupportedTagException | InvalidDataException | IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println("File not found.");
}
if (mp3file.hasId3v1Tag()) {
ID3v1 id3v1Tag = mp3file.getId3v1Tag();
System.out.println("Track: " + id3v1Tag.getTrack());
System.out.println("Artist: " + id3v1Tag.getArtist());
System.out.println("Title: " + id3v1Tag.getTitle());
System.out.println("Album: " + id3v1Tag.getAlbum());
System.out.println("Year: " + id3v1Tag.getYear());
System.out.println("Genre: " + id3v1Tag.getGenre() + " (" + id3v1Tag.getGenreDescription() + ")");
System.out.println("Comment: " + id3v1Tag.getComment());
}
}
}
异常
java.io.FileNotFoundException: File not found dom.mp3
at com.mpatric.mp3agic.FileWrapper.init(FileWrapper.java:26)
at com.mpatric.mp3agic.FileWrapper.<init>(FileWrapper.java:19)
at com.mpatric.mp3agic.Mp3File.<init>(Mp3File.java:53)
at com.mpatric.mp3agic.Mp3File.<init>(Mp3File.java:41)
at test.main(test.java:13)
File not found.
Exception in thread "main" java.lang.NullPointerException at test.main(test.java:19)
mpatric包是第三方。我猜这很好。
你从“运行java进程的目录”是什么意思?你能告诉我一个例子吗?
答案 0 :(得分:4)
打印此内容:
System.out.println("File not found.");
鉴于此,具有误导性:
catch (UnsupportedTagException | InvalidDataException | IOException e)
您需要转储异常(e.printStackTrace()
以确定真正的问题)。
您的.mp3
文件与.java
文件位于同一目录中。但那不相关。它与运行java进程的目录位于同一目录中吗? 这就是它需要的地方。
e.g。
$ cd /mydir
$ java com.whatever.TestJava
在上面,您的.mp3
文件需要位于/mydir
目录
答案 1 :(得分:1)
如@BrianAgnew所述,您应该转储您的例外。
<强>更新强> 试试这个并选择你想要使用的文件:
public class Test
{
public static void main(String args[])
{
Mp3File mp3file = null;
try {
JFileChooser jfc = new JFileChooser();
int fileResult = jfc.showOpenDialog(null);
if (fileResult == JFileChooser.APPROVE_OPTION) {
String path = jfc.getSelectedFile().getPath();
mp3file = new Mp3File(path);
if (mp3file!=null && mp3file.hasId3v1Tag()) {
ID3v1 id3v1Tag = mp3file.getId3v1Tag();
System.out.println("Track: " + id3v1Tag.getTrack());
System.out.println("Artist: " + id3v1Tag.getArtist());
System.out.println("Title: " + id3v1Tag.getTitle());
System.out.println("Album: " + id3v1Tag.getAlbum());
System.out.println("Year: " + id3v1Tag.getYear());
System.out.println("Genre: " + id3v1Tag.getGenre() + "("+id3v1Tag.getGenreDescription() + ")");
System.out.println("Comment: " + id3v1Tag.getComment());
} else {
System.out.println("The mp3 file does not exists or does not have a ID3v1Tag");
}
}
} catch (UnsupportedTagException | InvalidDataException | IOException e) {
System.err.println("File not found.");
e.printStackTrace();
}
}
}
答案 2 :(得分:0)
解决了!的System.out.println(System.getProperty( “user.dir来”));将其粘贴到我的代码中,找到了根目录。显然它与src和bin文件夹处于同一级别。将文件粘贴在那里,现在就像魅力一样。
好吧,如果有人想知道你是否可以改变主目录,你就不能。
如果要访问其他文件夹,则必须使用目录遍历。说你的音乐文件“Ride the Lightning.mp3”在C:\ Users \“你的用户名”\ Music \
然后阅读你必须做这样的事情:
mp3file = new Mp3File("../../../Music/Misc/Ride the Lightning.mp3");
为Brian和Chasmo干杯,感谢他们提供的有用帖子。