【问题标题】:Java MP3 File Stream cant pass an argumentJava MP3 文件流无法传递参数
【发布时间】:2017-07-27 03:14:12
【问题描述】:

所以我正在创建这个使用文件输入流读取 MP3 文件的程序。在互联网上查找了我的问题后,它与此处显示的数组有关,但是,我不知道如何解决此问题,因为我是 Java 的初学者: 文件歌曲 = new File(arguments[0]);

然后我遇到了这个错误:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 0 在 com.java24hours.ID3Reader.main(ID3Reader.java:11)

这是我的代码:

package com.java24hours;
import java.io.*;



public class ID3Reader {

    private static String[] arguments;
    public static void main(String[] arguments) {

        File song = new File(arguments[0]);
        try (FileInputStream file = new FileInputStream(song)) {
            int size = (int) song.length();
            file.skip(size - 128);
            byte [] last128 = new byte[128];
            file.read(last128);
            String id3 = new String(last128);
            String tag = id3.substring(0, 3);
            if(tag.equals("TAG")) {
                System.out.println("Title: " + id3.substring(3, 32));
                System.out.println("Artist: " + id3.substring(33, 62));
                System.out.println("Album: " + id3.substring(63, 91));
                System.out.println("Year: " + id3.substring(93, 97));
            } else {
                System.out.println(arguments[0] + " does not contain " + 
                        " ID3 info.");
            }
            file.close();

        } catch (IOException ioe) {
            System.out.println("Error -- " + ioe.toString());
        }
    }


}

谁能帮我解决这个问题?谢谢!

【问题讨论】:

  • 您的格式有点不对...您的代码中的哪一行是第 11 行?
  • 你是如何运行这段代码的?您是否传递了文件名作为输入?
  • Derp,是的,arguments[0] 不存在,因此当您尝试取消引用它时它会失败。您应该为此添加一个检查,例如:if (arguments.length == 0) { throw new Exception("No arguments provided"); }
  • 另一个可能的问题是这段代码只处理 ID3v1 元数据。 ID3v2 元数据在文件的开头,结构有很大不同;见en.wikipedia.org/wiki/ID3
  • 但是......“我不知道如何解决这个问题,因为我是Java的初学者......” - 你不适合问StackOverflow 为您修复程序中的错误。即使你是初学者。这是一个问答网站,不是免费的编程服务。

标签: java arrays mp3 filestream indexoutofboundsexception


【解决方案1】:

您没有为程序提供文件名。

这个程序需要一个文件名 - Mp3 文件名 - 作为参数,它将被放入arguments[0]

如果你不带参数运行程序: java com.java24hours.ID3Reader

你会得到这个输出: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at com.java24hours.ID3Reader.main(ID3Reader.java:11)

因为arguments 数组是空的。

调用该程序时需要提供文件名,例如

java com.java24hours.ID3Reader TheDarkSideOfTheMoon.mp3

其中TheDarkSideOfTheMoon.mp3 必须是有效文件。

如果您的硬盘上没有文件名,您将获得一个 Error -- java.io.FileNotFoundException: TheDarkSideOfTheMoon.mp3 (No such file or directory).

您应该在代码中添加更多检查!

【讨论】:

  • 谢谢!我忘了补充说我正在 Netbeans 中执行此操作,但我会修复该错误!谢谢!
  • 好的,如果这能解决您的问题,请考虑接受我的回答 :)
猜你喜欢
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 2017-10-09
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
相关资源
最近更新 更多