数组大小基于正在读取的文件

时间:2014-05-11 02:47:18

标签: java arrays

我正在尝试将我的数组大小基于从文本文件中读取的行数,该文件具有未知的行数。我试过两次读取文件,第一次使用while循环并递增一个int然后将其用于数组大小,但这似乎不起作用。然后我尝试将行的值放入列表中并获取列表大小,但这也无效。任何帮助都会很棒。

第一次使用int来递增。我没有得到任何回报。

import java.io.*;

import java.util.*;

public class Scan {

public static void main(String args[]) throws IOException {
    String routeName = " ";
    String stationName = " ";
    Scanner timetable = new Scanner(new File("fileName.txt"));
    int i = 0;
    while(timetable.hasNext()){ 
    i++;
    }
    int count = 0;
    String [] s = new String[i];
    while (timetable.hasNext()) {
        String line = timetable.nextLine();
        s[count++] = line;      
    }
    routeName = s[0];
    stationName = s[1];
    System.out.println(routeName.toString());
    System.out.println(stationName.toString());         
}

}

第二次使用列表。我得到一个NullPointerException。

import java.io.*;

import java.util.*;

public class Scan {

public static void main(String args[]) throws IOException {
    String routeName = " ";
    String stationName = " ";
    Scanner timetable = new Scanner(new File("fileName.txt"));
    List<String> list = new ArrayList<String>();
    while(timetable.hasNext()){ 
    list.add(timetable.next);
    }
    int i = list.size(); 
    int count = 0;
    String [] s = new String[i];
    while (timetable.hasNext()) {
        String line = timetable.nextLine();
        s[count++] = line;      
    }
    routeName = s[0];
    stationName = s[1];
    System.out.println(routeName.toString());
    System.out.println(stationName.toString());         
}

}

2 个答案:

答案 0 :(得分:0)

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class ReadFile {
    public static void main(String[] args) {
        String fileName = "path";


        try {
            List<String> lines = Files.readAllLines(Paths.get(fileName),
                    Charset.defaultCharset());
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

虽然它不是数组,但它将存储在List中。但是会为你的目的而努力。请注意,它适用于java 7。

答案 1 :(得分:0)

如上所述,最好使用List。但除此之外,您的代码中还有一个错误。您必须在第二个while语句之前再次重置时间表变量。

希望这有帮助。