2012-12-11 2 views
3

Eclipse에서 실행되는 단위 테스트 스위트가 있습니다. 모든 것이 정상적으로 작동합니다. 이들은 20MB보다 큰> 파일에서로드 된 데이터에 의존합니다. 그러나 ANT에서 단위 테스트를 실행하면 일부 데이터가로드되지 않아 테스트가 실패합니다. 무엇 발생하면 전체 파일을 읽지 않습니다 내 파일 읽기 메커니즘입니다, 그냥이의 일부입니다 내 파일이 코드ANT를 통해 실행 중일 때 파일이 올바르게 읽히지 않는 이유

private static void initializeListWithFileContents(
     TreeMap<String, List<String>> treeMap, String fileName) 
{ 
    File file = new File(fileName); 
    Scanner scanner = null; 
    int count = 0; 
    try 
    { 

     scanner = new Scanner(file); 
     while (scanner.hasNextLine()) 
     { 
      String line = scanner.nextLine().toLowerCase().trim();  
      String[] tokens = line.split(" "); 

      if (tokens.length == 3) 
      { 
       String key = tokens[0] + tokens[1]; 
       if (treeMap.containsKey(key)) 
       { 
        List<String> list = treeMap.get(key); 
        list.add(tokens[2]); 
       } 
       else 
       { 
        List<String> list = new ArrayList<String>(); 
        list.add(tokens[2]); 
        treeMap.put(key, list); 
       } 
       count++; 
      } 
     }   
     scanner.close(); 
    } 

    catch (IOException ioe) 
    { 
     ioe.printStackTrace(); 
    } 
    System.out.println(count + " rows added"); 
} 

을 읽고 약 10,000 900,000 라인 여기

을 읽은 후 오류를 부여하지 않고, 정지 웹 앱. 웹 응용 프로그램도 잘 작동하며 전체 파일이 메모리에로드됩니다. 단위 테스트가 의존하는 데이터가 첫 번째 10,000 줄에 포함되면 단위 테스트는 ANT로 성공합니다. 내가 생각할 수있는 유일한 점은 메모리 문제 여야하지만 왜 예외가 발생하지 않는지입니다. Eclipse 내에서 ANT 대상을 실행합니다. 이클립스 JUnit 러너와 동일한 JVM 인수로 구성됩니다 (예 : -Xms512m -Xmx1234m). ANT가 기본 JVM 매개 변수로 시작하면 힙 오류로 인해 실패하므로 올바르게 선택한다는 것을 알고 있습니다. 내가 확인할 수있는 다른 아이디어가 있습니까?

답변

1

Scanner 유형은 입출력 오류를 발생시킵니다. ioException() 메소드를 사용하여 명시 적으로 오류를 확인해야합니다.

문제가 인코딩 오류 인 경우 스캐너를 인스턴스화 할 때 pass the encoding of the file explicitly이 필요합니다.

파일이 손상된 텍스트 파일 인 경우 더 많은 내결함성 디코딩을 수행하는 your own reader을 제공해야 할 수 있습니다. 가능하면 덜 정확하므로 피해야합니다.

+0

@ McDowell, 스캐너를 끄집어 냈습니다. 파일을 읽을 때 일부 오류가 발생했습니다. 정확히 같은 JVM을 사용하고있는 모든 경우처럼 ANT에서 문제가 발생하는 이유는 확실하지 않습니다. 즉, Eclipse, Tomcat 및 ANT – MayoMan

관련 문제