"не удается найти указанный файл", проверено несколько раз и выглядит правильно - PullRequest
0 голосов
/ 03 июля 2018

Почему мой файл не читается правильно? Я проверил, и папка res является ресурсом в этом проекте.

public class Testing {

    private File file;
    private Clip clip;
    private AudioInputStream audioIn;

    public Testing() {
        String path = "/res/shot.mp3";
        file = new File(path);
        System.out.println(file.toString());
        try {
            audioIn = AudioSystem.getAudioInputStream(file);
            clip = AudioSystem.getClip();
            clip.open(audioIn);
            clip.start();
        } catch(Exception e) {
            e.printStackTrace();
        }
        // java.io.FileNotFoundException: \res\shot.mp3 
        // (The system cannot find the path specified)
    }

    public static void main(String[] args) {

        new Testing();
    }
}

My Package Explorer.

enter image description here

Я попытался изменить путь на /SoundTest/res/shot.mp3, но все равно не повезло. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Независимо от наличия файла, вы уверены, что хотите использовать .mp3 -файл? AudioSystem.getAudioFileTypes() возвращает WAVE, AU и AIFF как поддерживаемые типы на моей машине.

Кроме того, исключение, которое вы представляете в своем вопросе, соответствует исходному коду, которым вы поделились? В вашем коде это shot.mp3, но исключение относится к файлу .wav.

0 голосов
/ 03 июля 2018

Нет, вы не можете использовать

file = new File(path);
audioIn = AudioSystem.getAudioInputStream(file);

Если вы хотите получить файл в папке ресурсов, вы должны получить метод getResource()

Измените это в своем коде:

    URL url = Testing.class.getResource("/res/shot.mp3");
    AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);
    Clip clip = AudioSystem.getClip();
    clip.open(audioIn);//surround with try catch block i didn't use here

надеюсь, что это может помочь

0 голосов
/ 03 июля 2018

/res/shot.mp3 - это абсолютный путь. Это будет работать, только если res находится в корневом каталоге вашей файловой системы. Вы говорите: «Папка ресурса - это папка в этом проекте». На скриншоте структура каталогов выглядит примерно так:

/home/your_user_dir/your_project_dir
                                    /src ...
                                    /bin
                                    /res

Таким образом, вам нужно изменить создание вашего File объекта так, чтобы он либо имел правильный относительный путь, либо использовал абсолютный путь.

Вы можете использовать

InputStream is = this.getClass().getClassLoader().getResourceAsStream("/res/shot.mp3");

, а затем создайте AudioInputStream с помощью AudioSystem.getAudioInputStream(InputStream) - документации

Поэтому измените свой код на

    String path = "/res/shot.mp3";
    InputStream is = this.getClass().getClassLoader().getResourceAsStream(path);
    try {
        audioIn = AudioSystem.getAudioInputStream(is);
        clip = AudioSystem.getClip();
        clip.open(audioIn);
        clip.start();
    } catch(Exception e) {
        e.printStackTrace();
    }
...