Jetzt verwende ich den Sax Parser, um die XML-Datei zu analysieren (der folgende Beispielcode kommt von TutorialSpoint). Ich möchte alle Dinge in eine TXT-Datei mit dem BufferedWriter ausgeben, wenn wir die Zeichenfunktion aufrufen, während ich keine Möglichkeit bekomme, dies zu tun. Wenn ich diesen BufferedWriter in die Zeichenfunktion schreibe, gibt er nur die letzte Zeichenfolge aus, da er nur den letzten Anruf aufzeichnet. Wenn ich diesen BufferedWriter in der Hauptfunktion schreibe, konnte der UserHandler den BufferedWriter, der in der Hauptfunktion (der dblpSax-Klasse) erstellt wurde, nicht erkennen, da es sich um zwei Klassen handelt. Ich habe auch versucht, eine Klasseninstanz zu erstellen, während ich immer noch Probleme hatte. Könnten Sie mir einen Weg geben, das zu machen? Vielen Dank.Wie schreibe ich den BufferedWriter außerhalb der Hauptfunktion
Die Bufferwriter ich verwenden möchte, ist wie folgt:
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;
}
}
}
Und das Problem ist was? NB: Der Aufruf createNewFile() 'ist oben redundant. – EJP
Ich möchte alle Dinge in eine TXT-Datei mit dem BufferedWriter ausgeben, wenn wir die Zeichen-Funktion aufrufen, ist die Frage: Wie verwende ich den BufferedWriter? – michael