javaaudiomp3audio-playerjlayer

java.io.FileNotFoundException even when the file path is correct


the code that i used :

package play;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class Play {

    InputStream music;
    public Play() {
    URL url=getClass().getResource("/music/Whitewoods - College Kill Dream.mp3");
    System.out.println(url.toString());
    try {
        FileInputStream fileInputStream=new FileInputStream(new File(url.toString()));
        fileInputStream.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        
    }
    public static void main(String args[]) {
        new Play();
        
    }
    
    
    
}

the line below int he above code :

System.out.println(url.toString());

prints :
file:/C:/Users/eclipse-workspace/audioboard/bin/music/Whitewoods%20-%20College%20Kill%20Dream.mp3

if i copy this directly and put it in the chrome's url putting box . the file opens but the line :

FileInputStream fileInputStream=new FileInputStream(new File(url.toString()));

gives file not found error.

error stack:

java.io.FileNotFoundException: file:\C:\Users\eclipse-workspace\audioboard\bin\music\Whitewoods%20-%20College%20Kill%20Dream.mp3 (The filename, directory name, or volume label syntax is incorrect)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:155)
    at play.Play.<init>(Play.java:17)
    at play.Play.main(Play.java:26)

thankyou for the help.


Solution

  • You can use the File constructor File(URI uri) transforming your URL url to URI and passing it as an argument for the File constructor like below:

    File file = new File(url.toURI());