如何从包含int和String元素的txt文件中读取一行?

时间:2015-06-16 21:30:09

标签: java exception collections java.util.scanner readfile

我正在尝试通过读取txt文件来创建List。例如:

12345; Mary Jane ; 20
12365; Annabelle Gibson; NA

每行包含:数字;名称;等级(等级可以是String或int)

我创建了以下方法;

public static  List <Pauta>leFicheiro( String nomeF) throws       FileNotFoundException{
    List<Pauta> pautaT = new LinkedList<Pauta>();
    try {
    Scanner s = new Scanner(new File (nomeF));
        try{
            List<Pauta> pautaS =pautaT;
            while ( s.hasNextLine()){
                String line = s.nextLine();
                String tokens[]= line.split(";");
                if(s.hasNextInt()) {
                    System.out.println ("next int = " + s.nextInt());
            }
                pautaS.add(new Pauta (s.nextInt(), tokens[1],tokens[2]);
            }
            pautaT = pautaS;
        }
    finally {
        s.close();
    }
    }
        catch (FileNotFoundException e){
            e.printStackTrace();
        }
        catch (ParseException e){
            e.printStackTrace();
        }       
    return pautaT;
}

Pauta是一个接收作为参数的类(int,String,String),我认为Grade是一个字符串,使它更简单,但是如果你有关于如何通过它创建一个List(主要目标)的想法字符串或int我会很感激。

现在问题是:部分s.nextInt()返回错误:InputMismatchException

所以我把以下代码:

catch (InputMismatchException e) {
System.out.print(e.getMessage());}

表示返回null。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

而不是使用s.nextInt(),将第一个标记解析为整数。

请参阅下面的示例。

public static void main(String... args) throws FileNotFoundException {
        List<Pauta> pautaT = new LinkedList<Pauta>();
        try {
            Scanner s = new Scanner(new File("test.txt"));
            try{
                List<Pauta> pautaS =pautaT;
                while ( s.hasNextLine()){
                    String line = s.nextLine();
                    String tokens[]= line.split(";");
                    pautaS.add(new Pauta (Integer.parseInt(tokens[0]), tokens[1],tokens[2]));
                }
                pautaT = pautaS;
            }
            finally {
                s.close();
            }
        }
        catch (FileNotFoundException e){
            e.printStackTrace();
        }

    }

这会导致填充列表。

答案 1 :(得分:0)

Yo可以使用StringTokenizer并将同一行的每个标记保存到变量中,然后根据需要使用它们。