2017-12-30 138 views
0

그래서 이름이있는 파일을 읽으려고하고 있는데 파일의 모든 사용자와 목록을 만들고 싶습니다. . 텍스트 파일은 people.txt이며 성/성 \ n 성/성 등과 같이 구성됩니다. 파일은 올바른 위치에 있어야합니다.스캐너를 사용할 때 java.util.NoSuchElementException이 발생하는 이유

코드 :

public class UI { 
public static void main(String[] args) { 
    String naam; 
    ArrayList <Person> people = new ArrayList<>(); 
    Scanner sc = new Scanner("people.txt"); 
    while(sc.hasNextLine()) { 
     Scanner line = new Scanner(sc.nextLine()); 
     line.useDelimiter("/"); 
     String name = line.next(); 
     String surname= line.next(); 
     Person a = new Person(name, surname); 
     people.add(a); 
    } 
    System.out.println(people.size()); 
} 

오류 :

Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at domain.UI.main(UI.java:14) 

답변

2

문제는 여기에 있습니다 :

Scanner sc = new Scanner("people.txt"); 

이 파일이라는 사람에서 새 Scanner 받고 정보를하지 않습니다. txt. 문자 그대로 "people.txt"라는 텍스트를 포함하는 새로운 Scanner을 만듭니다. 한 줄만 있기 때문에 두 번째 줄을 가져 오려고하면 오류가 발생합니다. 당신이 Class ScannerInterface Path 객체를 사용

Scanner(Path source)

: 다음과 같은 생성자를 사용하려면 같은

는 소리.

Path p1 = Paths.get(“people.tx”); 
Scanner sc = new Scanner(p1); 
2

은 대신 텍스트 "people.txt", 파일을 읽는되지 않으며, 따라서 line.useDelimiter("/");는 효과가 없습니다. 당신은 String name = line.next(); 텍스트 "people.txt"를 소모하기 때문에 오류가 발생하고

당신은 아래와 같은 java.io.File을 사용해야한다는 점이 throwa에 텍스트의 왼쪽과 String surname= line.next();가 없습니다 :

Scanner sc = new Scanner(new File("pathToFile/people.txt"));