Reputation: 4383
Well, my code is as below. I'd like to know why there's always an exception. The mp3 file is in the same directory as the test.java file. What am I doing wrong? Also, how do I read mp3 files from say my Music Library : 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());
}
}
}
Exception
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)
The mpatric package is 3rd party. I'm guessing that works fine.
What do you mean by "same directory as you run your java process from"? Can you give me a for instance, please?
Upvotes: 0
Views: 3048
Reputation: 6982
As mentioned by @BrianAgnew, you should dump your Exception.
UPDATE Try this and select your file you want to use:
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();
}
}
}
Upvotes: 1
Reputation: 4383
Solved it! System.out.println(System.getProperty("user.dir")); Pasted that into my code, found out the root dir. Apparently it's on the same level as the src and bin folders. Pasted the file there and it works like a charm now.
Alright, if anyone was wondering if you can change the home directory, you can't.
If you want to access another folder, you'll have to resort to directory traversal. Say your music file "Ride the Lightning.mp3" is in C:\Users\"Your Username"\Music\
Then to read that you'll have to do something like this:
mp3file = new Mp3File("../../../Music/Misc/Ride the Lightning.mp3");
Cheers to Brian and Chasmo for the helpful posts.
Upvotes: 0
Reputation: 272297
Printing this:
System.out.println("File not found.");
is misleading, given this:
catch (UnsupportedTagException | InvalidDataException | IOException e)
You need to dump the exception (e.printStackTrace()
to determine the real issue).
Your .mp3
file is in the same directory as your .java
file. But that's not relevant. Is it in the same directory as where you run your java process from ? That's where it needs to be.
e.g.
$ cd /mydir
$ java com.whatever.TestJava
In the above your .mp3
file needs to be in the /mydir
directory
Upvotes: 4