2017-12-15 18 views
-3

fromFile 메서드에 입력 한 파일에서 스트림을 설정하려고하는데 내 메서드에서이 메서드에 액세스하려고하면 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까?스캐너에서 Java에서 파일을 읽는 구문은 무엇입니까?

public int[] fromFile(String fileName) 
{ 
    // TO-DO: convert the file to a int[] 
    int[] ret = new int [9]; 
    int i = 0; 

    File file = new File(fileName); 

     while (i < 10){ 
     Scanner s = new Scanner(file); //HERE I get FileNotFoundException 


     ret [i] = Integer.parseInt(s.next()); 
     i++; 


    } 
+2

파일의 PATH가 올바른지 확인하십시오. – HDT

+0

이 메서드는 메서드를 사용할 때마다 fileName에 지정된 새 파일을 가져 오는 것이므로 특정 파일의 경로를 설정할 수 없습니다. – user8655776

+1

* 오류가 발생했습니다 * 오류 *가 구체적으로 무엇인지 알려주지 않는 한 * 문제는 설명이 아닙니다. 그것은 당신 앞에있는 스크린에 있습니다. 여기에 귀하의 게시물에 해당 정보를 포함시키지 않아도되는 이유가 없습니다. 이 질문은 또한 Java와 Scanner 및 파일 읽기에 대해 이미 수십 가지의 질문이 있으므로 연구 노력이 전혀 필요하지 않습니다. 여기에 귀하의 계정을 만들 때 [둘러보기]를 가져 와서 [도움말] 페이지를 읽으십시오. 다음 질문을 게시하기 전에 그렇게하십시오. –

답변

0

실제로 코드에 몇 가지 문제가 있습니다. 먼저 File (또는 누수 파일 핸들)을 래핑 할 때 Scanner을 사용한 후 닫아야합니다. try-with-resources을 사용합니다. 둘째, 파일을 읽으 려하기 전에 File.canRead()을 호출하여 파일이 있고 읽을 수 있는지 확인할 수 있습니다. 또한 수동으로 값을 구문 분석하는 대신 Scanner.nextInt()을 사용할 수 있습니다. 먼저 Scanner.hasNextInt()을 호출해야합니다. 예 :

public static int[] fromFile(String fileName) { 
    int[] ret = new int[9]; 
    int i = 0; 

    File file = new File(fileName); 
    if (!file.canRead()) { 
     try { 
      System.err.printf("Cant read file at %s%n", file.getCanonicalPath()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    try (Scanner s = new Scanner(file)) { 
     while (i < 10 && s.hasNextInt()) { 
      ret[i] = s.nextInt(); 
      i++; 
     } 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 
    return ret; 
}