Karthik Balakrishnan
Karthik Balakrishnan

Reputation: 4383

Reading metadata of mp3 file in Java - file not found exception

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

Answers (3)

Martin Seeler
Martin Seeler

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

Karthik Balakrishnan
Karthik Balakrishnan

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

Brian Agnew
Brian Agnew

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

Related Questions