从java中的文件中获取输入

时间:2016-04-28 00:45:01

标签: java file-io

我不能为我的生活似乎接受这个文件的内容,我一直在第25行得到没有这样的元素异常,所有有助于欣赏。下面是文件link

的链接

继承我的代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class practiceFinal {

    public static void main(String[] args) {
        String fileName = args[0];
        int length = fileLength(fileName);
        int[] array = new int[length];
        String[] list = new String[length];
        arrayPopulate(array, list, fileName);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]);
        }

    }

    public static int fileLength(String fileName) {
        File file = new File(fileName);
        Scanner fileScan = new Scanner(fileName);
        int counter = 0;
        while (fileScan.hasNext()) {
            fileScan.next();
            counter++;
        }

        return counter;
    }

    public static void arrayPopulate(int[] array, String[] list, String fileName) {
        File file = new File(fileName);
        Scanner fileScan = null;
        try {
            fileScan = new Scanner(file);
        } catch (FileNotFoundException e) {
            System.out.println("details: " + e.getMessage());
        }
        for (int i = 0; i < array.length; i++) {
            array[i] = fileScan.nextInt();
            list[i] = fileScan.next();
        }

    }

}

3 个答案:

答案 0 :(得分:0)

而不是使用int length = fileLength(fileName);要查找长度,请使用int length = fileName.length();

答案 1 :(得分:0)

根据您的文件格式和当前代码,length代表&#34;字数&#34;在文件中。在你的循环中,你需要将i提高2而不是1,因为它消耗了两个&#34;单词&#34;每次迭代。这也意味着每个阵列的长度应该是它应该的两倍。使用length/2实例化它们。

for (int i = 0; i < array.length; i += 2) {
    array[i] = fileScan.nextInt();
    list[i] = fileScan.next();
}

或者,您可以使length表示文件中的行数。为此,请在计数循环中使用hasNextLine()nextLine()。然后按原样保留所有其余代码。

while (fileScan.hasNextLine()) {
    fileScan.nextLine();
    counter++;
}

此外,请确保为Scanner传递了适当的参数。 String有效,但不适用于文件I / O.您需要先使用File创建fileName对象。

Scanner fileScan = new Scanner(new File(fileName));

答案 2 :(得分:0)

这里有一些问题。首先,您使用fileScan.next();来尝试获取文件的长度。这将给你2倍的长度,因为你正在计算每个令牌fileScan.next()抓取,这将是首先是数字然后是字母。

线条的长度为144,但是当你计算它时,它会返回288。

所以使用fileScan.nextLine();,现在有些人已经提到了这一点但是你的程序仍然没有正常工作,因为你通过了Scanner fileScan = new Scanner(fileName); // mistake passed fileName instead of file

以下是我在fileLength()方法中所做的更改:

 File file = new File(fileName);
 Scanner fileScan = new Scanner(file); // mistake passed fileName instead of file, changed from Scanner fileScan = new Scanner(fileName)

 while (fileScan.hasNextLine()) {
        fileScan.nextLine(); // changed from fileScan.next()
        counter++;
    }

您的输出如下:

84c89C11w71h110B96d61H92d10B3p40c97G117X13....

打印结果时,请将打印语句更改为

 System.out.print(array[i]);
 System.out.print(" " + list[i]);
 System.out.println();

现在输出如下:

84 c
89 C
11 w
71 h
....