2014-05-11 103 views
0

我正在尝试将我的数组大小基于从具有未知数量的行的文本文件中读取的行数。我试过两次读取这个文件,第一次经过一个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());   
} 

} 
+0

你需要使用一个数组吗?为什么不使用'List'? –

回答

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(); 
     } 
    } 
} 

虽然不是数组,将在列表存储。但会为你的目的工作。请注意,它适用于java 7.

0

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

希望这会有所帮助。

相关问题