为什么会数组出界?

shockwave_115 2004-10-17 10:08:41
import java.io.*;
public class ReadID3{
public static void main(String[] arguments){
try {
File song = new File(arguments[0]);
FileInputStream file = new FileInputStream(song);
int size = (int)song.length();
file.skip(size-128);
byte[] last128=new byte[200];
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 (Exception e){
System.out.println("Erroe-\n"+e.toString());
}
}
}
执行报错
Erroe-
java.lang.ArrayIndexOutOfBoundsException:0
如果在命令行输入
java ReadID3 xm.mp3
又会报错
Exception in thread"main" java.lang.NoClassDefFoundError: ReadID3
不知道怎么回事
...全文
150 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shockwave_115 2004-10-20
  • 打赏
  • 举报
回复
有人知道原因么?
shockwave_115 2004-10-17
  • 打赏
  • 举报
回复
没有用同样的错误
clwforluv 2004-10-17
  • 打赏
  • 举报
回复
用一个保险的测试方法你试试,把你的这个类文件放到你的JDK\BIN所在的目录,再用javac,java试试看,
shockwave_115 2004-10-17
  • 打赏
  • 举报
回复
我做其他程序都没有问题啊
shockwave_115 2004-10-17
  • 打赏
  • 举报
回复
C:\Program Files\Apache Group\Tomcat 4.1\common\lib\serlet.jar
mk008 2004-10-17
  • 打赏
  • 举报
回复
是你执行的时候路径没配置好,系统找不到ReadID3,看看你的classpath
winterxu416 2004-10-17
  • 打赏
  • 举报
回复
Exception in thread"main" java.lang.NoClassDefFoundError: ReadID3
这句话不应该是执行过程中的问题,可能是你的java环境没有配置好
shockwave_115 2004-10-17
  • 打赏
  • 举报
回复
我当然是先编译再执行喽
还有那个我是赋值了byte[] last128=new byte[128];
还是有问题
winterxu416 2004-10-17
  • 打赏
  • 举报
回复
1、
public static void main(String[] arguments)
File song = new File(arguments[0]);

arguments[0]是一个需要从命令行录入的参数,当你单独执行的时候,arguments没有值,你直接去取arguments[0],当然会出现越界问题

2、
你应该先编译ReadID3.java文件
javac ReadID3.java
然后java ReadID3 xm.mp3

drugon 2004-10-17
  • 打赏
  • 举报
回复
file.read(last128);
你这一行有问题,你读文件的时候没有指定读多少个字节,那么系统会取它的默认值,而你的字符串长度又定义成200个,这个时候它读取的字符串的长度肯定会比200大,所以就越界了。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧