2013-01-02 8 views
2

저는 Java에 익숙하지 않고 제가 시도하는 모든 것이 작동하지 않습니다. 파일을 읽는 데는 여러 가지 방법이 있으므로 가장 쉬운 방법이 궁금합니다. 기본적으로 Mad Libs 응용 프로그램입니다. 하나의 방법. 이 작업을 성공적으로 실행 하려다가 file.close() 함수에서 오류가 발생합니다. 내가 가져 가면 FileNotFoundException errors이됩니다. 그래서 나는 길을 잃었습니다. 무엇을 바꾸어야합니까?텍스트 파일에서 행 읽기 Java?

public static void main(String[] args) throws Exception { 
    String[] nouns = new String[4]; 
    String[] verbs = new String[6]; 
    String[] adjectives = new String[7]; 
    Scanner s = new Scanner(System.in); 
    System.out.println("Please input 4 nouns, press \"Enter\" after each input."); 
    for(int i=0; i<4; i++){ 
     nouns[i] = s.next(); 
    } 
    System.out.println("Please input 6 verbs, press \"Enter\" after each input."); 
    for(int i=0; i<6; i++){ 
     verbs[i] = s.next(); 
    } 
    System.out.println("Please input 7 adjectives, press \"Enter\" after each input."); 
    for(int i=0; i<7; i++){ 
     adjectives[i] = s.next(); 
    } 
    File file = null; 
    FileReader fr = null; 
    LineNumberReader lnr = null; 

    try { 
     file = new File("H:\\10GraceK\\AP Computer Science\\Classwork\\src\\madlib.txt"); 
     fr = new FileReader(file);   
     lnr = new LineNumberReader(fr); 
     String line = "";   
     while ((line = lnr.readLine()) != null) { 
      System.out.println(line);    
     } 
    } finally { 
     if (fr != null) { 
      fr.close(); 
     } 
     if (lnr != null) { 
      lnr.close(); 
     } 
    } 
} 

그래, 예외가 수정되었습니다. 이제 파일의 텍스트는 동사 [0]을 읽습니다. 그런데 실제로는 배열의 단어가 아닌 동사 [0]을 출력합니다. 배열에있는 문자열을 읽은 문자열에 어떻게 추가합니까?

+5

당신이 전체 예외를 게시 할 수주십시오? –

+0

Scanner 클래스에는 명령 행은 물론 행별로 파일에서 읽을 수있는 클래스가 있습니다. 체크 아웃 할 가치가 있을지도 모른다. 자바 구현이 더 새롭다. (자바 1.4). – kevingreen

+0

예외가 수정되었습니다. 내 코드 아래에 새로운 문제가 있습니다. – savage24x

답변

6

close 메서드는 File에 대해 정의되지 않습니다. 대신 FileReader.close을 사용하십시오. 사실

fr.close(); 

이가 기본이 FileReader을 닫습니다으로 충분합니다 LineNumberReader을 닫는

file.close(); 

교체합니다. finally 블록에 close을 입력 할 수 있습니다. 이 부분을 참조하십시오 example

+0

그 고정 컴파일 오류, 고마워요. – savage24x

+0

위 예외를 게시했지만 여전히 FileNotFound를 얻습니다. 하지만, 적어도 컴파일합니다. 명사 동사와 형용사를 통해 실행할 수 있습니다. 그러면 예외가 발생합니다. – savage24x

2

항상 파일과 스트림을 읽을 때 commons-io을 추천해야합니다. 예를 들어, 사용

시도 : @Reimeus이 누락 된 방법을 언급 한 바와 같이 코드에서

IOUtils.readLines 

오류입니다.

+0

누가 이것을 사용할 수있을 때 누가 버퍼링 된 리더를 사용하고 싶습니까? – CorayThan

0

스캐너 API를 개선하고 더 쉽게 설정 :

try { 
    Scanner sc = new Scanner(new File("text.txt")); 
    sc.useDelimiter(System.getProperty("line.separator")); 
    String ln = sc.next(); 

} catch (FileNotFoundException ex) { 
    Logger.getLogger(this.class.getName()).log(Level.SEVERE, null, ex); 
}