2014-03-30 3 views
0

줄 단위로 BIND 구성을 구문 분석하려고하지만 작동하지 않습니다. 바인드BIND DNS 구성 파일을 Java로 구문 분석 하시겠습니까?

KEYWORD1 KEY_NAME의 구조를 사용하기 때문에 {

KEYWORD2 key_value;

}};

구성을 저장합니다.

Java로 ISC BIND DNS 구성 파일을 구문 분석하는 방법은 무엇입니까?

예 :

 import java.io.BufferedReader; 
     import java.io.FileReader; 
     import java.io.IOException; 
     import java.util.StringTokenizer; 
     import java.util.regex.Matcher; 
     import java.util.regex.Pattern; 

     public class ScannerTest { 

      public static void main(String[] args) throws IOException { 

       FileReader file = new FileReader("C:/named.conf"); 

       BufferedReader br = new BufferedReader(file); 
       String line; 
       boolean isChannel = false; 
       while ((line = br.readLine()) != null) { 

        if (line.length() <= 0) 
         continue; // skip empty line 
        if (line.charAt(0) == '#' | line.charAt(0) == '/') 
         continue; // skip comment line 

        if (isChannel) { 

         String endChannel = "};"; // end of block 
         String regexEndChannel = endChannel; 
         Pattern patternEndChannel = Pattern.compile(regexEndChannel); 
         Matcher matcherEndChannel = patternEndChannel.matcher(line); 

         if (matcherEndChannel.find() == false) { 

          // get the file name 
          String fileKey = "file"; 
          String regex = "\\b" + fileKey + "\\b"; 
          Pattern pattern = Pattern.compile(regex); 
          Matcher matcher = pattern.matcher(line); 

          while (matcher.find() == true) { 

           String fileName = null; 
           StringTokenizer channelToken = new StringTokenizer(line); 
           if (channelToken.hasMoreTokens()) 
            fileKey = channelToken.nextToken(); 
           if (channelToken.hasMoreTokens()) 
            fileName = channelToken.nextToken(); 
           // get the file name 
           System.out.println("file Name: " + fileName); 

          } 

          // get the severity name 
          String severityKey = "severity"; 
          // don't know why boundary the word "severity" with the \b 
          // but it still match the word print-severity 
          String regexseverity = "\\b" + severityKey + "\\b"; 
          Pattern patternseverity = Pattern.compile(regexseverity); 
          Matcher matcherseverity = patternseverity.matcher(line); 

          while (matcherseverity.find() == true) { 

           String severityName = null; 
           StringTokenizer channelToken = new StringTokenizer(line); 
           if (channelToken.hasMoreTokens()) 
            severityKey = channelToken.nextToken(); 
           if (channelToken.hasMoreTokens()) 
            severityName = channelToken.nextToken(); 
           // get the file name 
           System.out.println("severity Name: " + severityName); 

          } 

          // get the last things 
          // print-time no; 
          // print-severity yes; 
          // print-category yes; 

         } else { 

          isChannel = false; 
         } 
        } 

        String channelKey = "channel"; 
        String regex = "\\b" + channelKey + "\\b"; 
        Pattern pattern = Pattern.compile(regex); 
        Matcher matcher = pattern.matcher(line); 

        while (matcher.find() == true) { 

         isChannel = true; 
         String channelName = null; 
         StringTokenizer channelToken = new StringTokenizer(line); 
         if (channelToken.hasMoreTokens()) 
          channelKey = channelToken.nextToken(); 
         if (channelToken.hasMoreTokens()) 
          channelName = channelToken.nextToken(); 
         // get the channel name 
         System.out.println("Channel Name: " + channelName); 
        } 

       } 

       br.close(); 

      } 

     } 
+0

내가 어떤 자바를 볼 필요 구문 분석해야되는 org.xbill.DNS.Master 클래스로 보면 다음과 같습니다

logging { channel "default" { file "C:\named\etc\default.log" versions 5 size 5m; severity dynamic; print-time yes; print-severity yes; print-category yes; }; channel "general" { severity dynamic; file "C:\named\etc\general.log" versions 5 size 5m; print-time yes; print-severity yes; print-category yes; }; category "default" { "default"; }; category "general" { "general"; }; }; 

내 코드입니다 여기 코드. – EJP

+0

@EJP 감사합니다. 코드를 추가했습니다. – Tuan

+0

좋고, 그 문제는 정확히 무엇입니까? – EJP

답변