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();
}
}
내가 어떤 자바를 볼 필요 구문 분석해야되는
내 코드입니다 여기 코드. – EJPorg.xbill.DNS.Master
클래스로 보면 다음과 같습니다@EJP 감사합니다. 코드를 추가했습니다. – Tuan
좋고, 그 문제는 정확히 무엇입니까? – EJP