我正在尝试读取一个名为“CityData.txt”的文件,其中只有一个城市名称列表,每行一个。我过去一直在使用扫描程序从文件中读取字符串,并使用它从同一程序中的另一个文件读取整数,但它似乎没有从文件中读取任何内容。
int counter2 = 0;
File strFile = new File("CityData.txt");
Scanner strScanner = new Scanner(strFile);
Scanner strCountScanner = new Scanner(strFile);
while ((strScanner.hasNext() == true)) {
System.out.println(strScanner.nextLine());
counter2++;
}
System.out.println("This is counter2: " + counter2);
String[] array2 = new String[counter2];
while ((strCountScanner.hasNext() == true)) {
for (int i = 0; i < counter2; i++) {
array2[i] = strCountScanner.nextLine();
}
}
理想情况下,counter2会告诉我文件中有多少个城市,然后我会用它们填充array2。但是,程序运行后,counter2保持为0。我已经习惯了一段时间,我希望也许我只是错过了一些愚蠢的东西。
由于
答案 0 :(得分:1)
您是否尝试将城市添加到数组中?
public static void readText throws FileNotFoundException {
ArrayList lines = new ArrayList();
Scanner scan = new Scanner(new File("CityData.txt"));
while(scan.hasNextLine()){
String line = scan.nextLine();
lines.add(line);
}
}
或8中的流
Stream <String> lines = Files.lines(Paths.get("c:\\demo.txt"));
lines.forEach(System.out::println);
lines.close();
答案 1 :(得分:1)
由于您正在阅读字符串,因此使用hasNextLine()
会更合适。您可以尝试下面的代码,它应该按预期工作。 HTH。
int counter2 = 0;
File strFile = new File("CityData.txt");
Scanner strScanner = new Scanner(strFile);
Scanner strCountScanner = new Scanner(strFile);
while((strScanner.hasNextLine() == true)) {
System.out.println(strScanner.nextLine());
counter2++;
}
System.out.println("This is counter2: " + counter2);
String[] array2 = new String[counter2];
while((strCountScanner.hasNextLine() == true)) {
for (int i = 0; i < counter2; i++) {
array2[i] = strCountScanner.nextLine();
}
}
答案 2 :(得分:1)
理想情况下,我会避免两个循环,只是为此目的使用ArrayList。这可以为您提供数量以及使阵列更具动态性的灵活性。另外,我会将Scanner放入try资源块中,因为它会关闭资源本身。以下是供参考的代码。
File strFile = new File("CityData.txt");
try (Scanner strScanner = new Scanner(strFile)) {
ArrayList<String> arrayList = new ArrayList<>();
while (strScanner.hasNext()) {
arrayList.add(strScanner.nextLine());
}
System.out.println("number of cities is " + arrayList.size());
System.out.println("cities are " + arrayList);
}catch (Exception e){
e.printStackTrace();
}