2013-02-25 5 views
0

.txt 파일의 일부 내용을 새 파일에 복사 한 후 화면에 표시하려고합니다. 텍스트 파일의 내용이 전체적으로 똑같은 구조는 아닙니다. 내가이변수 열 크기로 배열 검색 Java

if (m[11].equals("Channel") && m[12].equals("ID")){ System.out.println("Wavelenght ID = " + m[9]); 

을했을 때

나는 경계 중 오류 배열을 얻었다.

TESTSTEP : DEBUG * FPGA 구성 ECFG * : EED 3 : 채널 ID

이 라인은 내가 그것을 Wavelenght ID = 3

String p = path.replace("\\", "\\\\"); 
    File file = new File(p); 
    File[] files = file.listFiles(); 
    BufferedReader inputStream = null; 
    PrintWriter outputStreamI = null; 
    PrintWriter outputStreamO = null; 

    try { 
     String l,c; 
     for (int i=0; i<files.length; i++){ 

      inputStream = new BufferedReader(new FileReader(files[i].getAbsolutePath())); 
      outputStreamI = new PrintWriter(new FileWriter("S:\\WRED_IBP\\" + files[i].getName().replaceFirst("[.][^.]+$", "")+ "Ingress.txt")); 
      outputStreamO = new PrintWriter(new FileWriter("S:\\WRED_IBP\\" +files[i].getName().replaceFirst("[.][^.]+$", "")+ "Egress.txt")); 

      while ((l = inputStream.readLine())!= null) { 
       String[] m=l.split(" "); 
       for(int d=0; d<m.length; d++){ 
        c=m[d]; 
        if (c.equalsIgnoreCase("ied_wred")){outputStreamI.println(l); if (outputStreamI.checkError()){System.err.println("Error in output stream");}} //|| c.equalsIgnoreCase("WARNING") || c.equals("ERROR") 
        else if (c.equalsIgnoreCase("eed_brc_ibp")){outputStreamO.println(l); if (outputStreamO.checkError()){System.err.println("Error in output stream");}} // || c.equalsIgnoreCase("WARNING") || c.equals("ERROR") 
       } 
      } 
     } 

    } catch(IOException e){ 
     System.err.println("Caught IOException: " + e.getMessage()); 
    }//wait(10); 
    finally { 
     if (inputStream != null) { 
      try{ inputStream.close();} catch (IOException e) {e.printStackTrace();}} 
     if (outputStreamI != null) {outputStreamI.close();} 
     if (outputStreamO != null) {outputStreamO.close();} 

    } 

} 

답변

1

에게 당신을 표시 할 발견 된 경우 사용할 수 있습니다 :

if (m.length > 12 && m[11].equals("Channel") && m[12].equals("ID")){ 
    System.out.println("Wavelenght ID = " + m[9]); 
} 

그래서 색인 범위 밖의 일은 여기서 일어나지 않을 것입니다.

for 루프 전에이 줄을 넣었는지 확인하십시오. 나는이 있으리라 믿고있어

+0

나는 여전히 java.lang.ArrayIndexOutOfBoundsException : 11. 첫 줄에는 코드가 여기에 끝나고 예외가 잡히는 열이 약 3 개 밖에 없다고 알려줍니다. – user2107046

+0

예외가이 줄에 있는지 확인하십시오. 내가 사용한 정확한 라인을 사용 했니? 순서가 중요합니다. – BobTheBuilder

+0

예 예외가이 줄에서 올 것이라고 확신하며 복사하여 붙여 넣은 정확한 코드를 사용했습니다. split 메서드 뒤에 코드를 삽입합니다. while ((l = inputStream.readLine())! = null) { \t \t \t \t \t String [] m = l.split (""); \t \t \t \t \t (m.length> 8 && m [11] .equals ("채널") && m [12] .equals ("ID")) { \t \t \t \t \t 경우에서 System.out.println ("Wavelenght ID ="+ m [9]); \t \t \t \t \t} – user2107046

0

TESTSTEP: DEBUG * Fpga Config ECFG *: EED 3 : Channel ID

이 파일의 텍스트입니다. 이것을 읽으면 공백을 기준으로 분할하려고합니다. 당신이해야 할 일은 :을 기반으로 나누어 져야합니다.

+0

거기에':'이없는 몇몇 줄이 있고 거기에 다른 일을합니다. 그 공간은 모든 사람들에게 적용되는보다 일반적인 분리입니다. 고맙습니다. – user2107046