在Java中将文本文件读入数组

时间:2014-03-17 17:09:18

标签: java arrays

我是Java的新手(目前已加入我的第一个编程课程),所以我的问题的答案可能就在我面前。

我的目标是阅读文本文件,内容如下:

4563123,112211324135412
2312311,222121324135211
2312345,112211324135421
5527687,212111313124412
7867567,111111111111111

其中第一组数字是ID,第二组是一组测试答案(我有密钥)。一旦我读完答案,我就需要将它们存储在一个数组中(我假设只是一个数组,因为我的课程尚未涵盖ArrayLists)。所有这些数据都需要存储在一个数组中,因为我需要在方法结束时返回它。

这是我到目前为止的代码:

public static String[] readFile(String filename)throws IOException{
    Scanner inFile = new Scanner(filename);
    String line;
    String[] results = new String[101];
    int i = 0;
    while (inFile.hasNextLine()){
        line = inFile.nextLine();
        String[] incoming = line.split(",");
        String wid = incoming[0];
        String answer = incoming[1];
        results[i] = wid;
        results[i + 1] = answer;
        i += 2;

    }
    inFile.close();
    return results;
}

忽略String filename是安全的,它是从主要传入的。

每次运行此方法时,我都会遇到ArrayOutOfBoundsException,主要是在我尝试将incoming[1]分配给answer时。

我一直盯着这段代码的时间比对我有用的时间长,但似乎我无法绕过它。任何帮助将不胜感激,无论是告诉我什么是错的或我可以做些什么来改进。

2 个答案:

答案 0 :(得分:1)

由于您使用的是Java 7,因此请使用新的Files API和try-with-resources语句;另外,避免复制空行:

final Path file = Paths.get(filename);
String line;
String[] incoming;
String[] results = new String[101];
int nrElements = 0;

try (
    final BufferedReader reader = Files.newBufferedReader(path,
        StandardCharsets.UTF_8);
) {
    while ((line = reader.readLine()) != null) {
        incoming = line.split(",");
        if (incoming.length != 2)
            continue;
        results[nrElements++] = incoming[0];
        results[nrElements++] = incoming[1];
    }
}

return Arrays.copyOfRange(results, 0, nrElements);

答案 1 :(得分:0)

您的文件中有空行。或者没有任何逗号的垃圾线。因此,在访问Slitted数组之前,只需检查一下。

if(incoming != null && incoming.length >= 2){
    String wid = incoming[0];
    String answer = incoming[1];
    // ... other dependent codes go here!
}

它可以帮助您避免异常。