java - 读取文件 java.io 时出错

标签 java java-io fileinputstream

所以我尝试从文本文件 addToLibrary.txt 读取以下字符串

 file:/Users/JEAcomputer/Music/iTunes/iTunes%20Media/Music/Flight%20Of%20The%20Conchords/Flight%20Of%20The%20Conchords/06%20Mutha'uckas.mp3

但是当我这样做时,我收到以下错误:

java.io.FileNotFoundException: file:/Users/JEAcomputer/Music/iTunes/iTunes%20Media/Music/Flight%20Of%20The%20Conchords/Flight%20Of%20The%20Conchords/06%20Mutha'uckas.mp3 (No such file or directory)

奇怪的是我使用此方法从 fileChooser 获取了该字符串:

public static void addToLibrary(File f) {

    String fileName = "addToLibrary.txt";

    try {
        FileWriter filewriter = new FileWriter(fileName, true);
        BufferedWriter bufferedWriter = new BufferedWriter(filewriter);
        bufferedWriter.newLine();
        bufferedWriter.write(f.toURI().toString());
        System.out.println("Your file has been written");
        bufferedWriter.close();
    } catch (IOException ex) {
        System.out.println(
            "Error writing to file '"
            + fileName + "'");
    } finally {
    }
}

一个更奇怪的错误是我的文件阅读器可以读取另一个文件夹中的内容,但不能读取 iTunes Media 中的任何内容。 我尝试使用以下方法读取不同文件夹中的所有文件:

public void getMusicDirectory() {
    int index = 0;
    try {


        File[] contents = musicDir.listFiles();
        //System.out.println(contents[3].toString());
        for (int i = 0; i < contents.length; i++) {
            //System.out.println("----------------------------------------"+contents.length);
            String name = contents[i].getName();
            //System.out.println(name);

            if (name.indexOf(".mp3") == -1) {
                continue;
            }

            FileInputStream file = new FileInputStream(contents[i]);
            file.read();
            System.out.println(contents[i].toURI().toString());
            songsDir.add(new Song((new MediaPlayer(new Media(contents[i].toURI().toString()))), contents[i]));
            file.close();
        }
    } catch (Exception e) {
        System.out.println("Error -- " + e.toString());
    }
    try(BufferedReader br = new BufferedReader(new FileReader("addToLibrary.txt"))) {

        //System.out.println("In check login try");
        for (String line; (line = br.readLine()) != null; ) {
            FileInputStream file = new FileInputStream(new File(line));
            file.read();
            songsDir.add(new Song(new MediaPlayer(new Media(line)), new File(line)));
            file.close();
        }
        // line is not visible here.
    } catch (Exception e) {
        System.out.println("Error reading add to library-- " + e.toString());
    }


} 

那么我怎样才能做到这一点呢?为什么该方法的第一部分有效但第二部分不起作用?

最佳答案

读取字符串没有问题

file:/Users/JEAcomputer/Music/iTunes/iTunes%20Media/Music/Flight%20Of%20The%20Conchords/Flight%20Of%20The%20Conchords/06%20Mutha'uckas.mp3

来自文件。那部分工作正常。您的问题是在那之后,当您尝试使用以下路径打开文件时:

file:/Users/JEAcomputer/Music/iTunes/iTunes%20Media/Music/Flight%20Of%20The%20Conchords/Flight%20Of%20The%20Conchords/06%20Mutha'uckas.mp3

因为那实际上不是一条路径;它是一个 URI(尽管它可以转换为路径)。

可以将其转换为路径,以便打开它,但您没有理由这样做 - 您的代码实际上并未从文件中读取(除了第一个字节,它是不做任何事情)所以打开它是没有意义的。删除以下行:

FileInputStream file = new FileInputStream(contents[i]); // THIS ONE
file.read(); // THIS ONE
System.out.println(contents[i].toURI().toString());
songsDir.add(new Song((new MediaPlayer(new Media(contents[i].toURI().toString()))), contents[i]));
file.close(); // THIS ONE

FileInputStream file = new FileInputStream(new File(line)); // THIS ONE
file.read(); // THIS ONE
songsDir.add(new Song(new MediaPlayer(new Media(line)), new File(line)));
file.close(); // THIS ONE

关于java - 读取文件 java.io 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006848/

相关文章:

java - 如何在集合中使用二分查找?

java - Glassfish 4.1 在使用 ear/ejb/web 模块时无法运行 RestFul 服务

java - BufferedReader.ready() 行为的差异

java - 在 Web 应用程序中找不到属性文件的路径?

java - JList 使用自定义 ListCellRenderer 获得错误的尺寸

java - Spring Data JPA - 具有 IN、 `=` 和 LIKE 列表的存储库

java - 如何从 java 中的 FileItem 获取 FileInputStream?

java - 如何在 Java 中创建文件并输出到文件

java - 线程中的异常 "main"java.io.FileNotFoundException Java

java - AudioStream找不到文件Java