Java文件读取错误

时间:2014-10-24 15:01:42

标签: java arrays string file-io

所以我正在阅读文件中的飓风信息,信息的格式在下面

1980年8月945 100艾伦

1983年8月962 100艾丽西亚

1984年9月949 100戴安娜

1985 Jul 1002 65 Bob

以下是我的数组用于保存数据的代码,而while循环用于读取文件

int arrayLength = 59;
String [] year = new String[arrayLength];
String [] month = new String[arrayLength];
String [] pressure = new String[arrayLength];
String [] month = new String[arrayLength];

File fileName = new File("hurcdata2.txt");
    Scanner inFile = new Scanner(fileName);

int index = 0;
    while (inFile.hasNext())
    {
        year[index] = inFile.next();
        month[index] = inFile.next();
        pressure[index] = inFile.next(); 
        windSpeed[index] = inFile.next();
        name[index] = inFile.next();
        index ++;
    }

当我运行这个程序并打印出从文件中读取的内容时,我得到了这个

姓名[Ljava.lang.String; @ 42f7ba93

年[Ljava.lang.String; @ 74cb7e2c

月[Ljava.lang.String; @ 5bc8b69b

压力[Ljava.lang.String; @ 564ca930

我不知道是什么导致程序读取这样的文件,文件名称正确并且与程序在同一目录中。

3 个答案:

答案 0 :(得分:1)

在他们身上打印阵列/调用.toString并不能做你喜欢用Java做的事情。而不是做

System.out.println(name);

你需要做

for (String nm : name) {
  System.out.print(nm);
}

答案 1 :(得分:0)

假设数据存储正确并且打印数据使用以下代码:

int i = 0;

while(i < index)
{
       System.out.println("Name:"+name[i]);
       System.out.println("Year:"+year[i]);
       System.out.println("Month:"+month[i]);
       System.out.println("Pressure:"+pressure[i]);
       i++;
}

答案 2 :(得分:0)

您可能正在使用System.out.println(year),此方法实际调用year.toString()。由于数组是不覆盖toString()的简单对象,因此在打印时会得到默认行为:

/* Object.toString() source */
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

您应该使用Arrays.deepToString(year)方法:

System.out.println(Arrays.deepToString(year));
System.out.println(Arrays.deepToString(month));
System.out.println(Arrays.deepToString(pressure));
System.out.println(Arrays.deepToString(month));

类似但更昂贵的替代方法是创建new ArrayList并打印它:

System.out.println(new ArrayList<>(Arrays.asList(year)));
System.out.println(new ArrayList<>(Arrays.asList(month)));
System.out.println(new ArrayList<>(Arrays.asList(pressure)));
System.out.println(new ArrayList<>(Arrays.asList(month)));

除此之外,您的程序有两个month变量,因此甚至无法编译。