これで、xmlファイルを解析するためにsaxパーサを使用しました(次のサンプルコードはtutorialspointにあります)。文字関数を呼び出すときにBufferedWriterを使ってすべてのものをtxtファイルに出力したいのですが、これを行う方法はありません。このBufferedWriterをcharacters関数に書き込むと、最後の呼び出しのみが記録されるため、最後の文字列が出力されます。このBufferedWriterをmain関数に書き込むと、2つのクラスであるため、UserHandlerはmain関数(dblpSaxクラス)で作成されたBufferedWriterを認識できませんでした。私はまだクラスのインスタンスを作るためにsthを試しましたが、私はまだ問題を抱えていました。これを作る方法を私に教えてください。ありがとう。あなたがたDefaultHandler外最高のカスタマイズ可能な構文解析、と同じレベルにBufferedWriterのを必要とするメイン関数からBufferedWriterを書き込む方法
File writename = new File("output.txt");
writename.createNewFile();
BufferedWriter out = new BufferedWriter(new FileWriter(writename));
public class dblpSax{
public static void main(String[] args){
try {
File inputFile = new File("student.txt");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
UserHandler userhandler = new UserHandler();
saxParser.parse(inputFile, userhandler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class UserHandler extends DefaultHandler {
boolean bFirstName = false;
boolean bLastName = false;
boolean bNickName = false;
boolean bMarks = false;
public void startElement(String uri,
String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equalsIgnoreCase("student")) {
String rollNo = attributes.getValue("rollno");
System.out.println("Roll No : " + rollNo);
} else if (qName.equalsIgnoreCase("firstname")) {
bFirstName = true;
} else if (qName.equalsIgnoreCase("lastname")) {
bLastName = true;
} else if (qName.equalsIgnoreCase("nickname")) {
bNickName = true;
}
else if (qName.equalsIgnoreCase("marks")) {
bMarks = true;
}
}
public void endElement(String uri,
String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("student")) {
System.out.println("End Element :" + qName);
}
}
public void characters(char ch[],
int start, int length) throws SAXException {
if (bFirstName) {
System.out.println("First Name: "
+ new String(ch, start, length));
bFirstName = false;
} else if (bLastName) {
System.out.println("Last Name: "
+ new String(ch, start, length));
bLastName = false;
} else if (bNickName) {
System.out.println("Nick Name: "
+ new String(ch, start, length));
bNickName = false;
} else if (bMarks) {
System.out.println("Marks: "
+ new String(ch, start, length));
bMarks = false;
}
}
}
問題は何ですか?注意 'createNewFile()'呼び出しは上で重複しています。 – EJP
私たちが文字関数を呼び出すときにBufferedWriterを使って.txtファイルにすべてのものを出力したいのですが、問題はBufferedWriterの使い方ですか? – michael