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



我试图将我的数组大小基于从文本文件中读取的行数,该文件具有未知的行数。我试图读取文件两次,第一次通过一个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());         
}
}
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。但除此之外,你的代码中还有一个bug。必须在第二个while语句之前重新设置时间表变量。

最新更新