Java 如何将BufferedWriter从main函数中写入

Java 如何将BufferedWriter从main函数中写入,java,bufferedwriter,Java,Bufferedwriter,现在,我使用sax解析器分析xml文件。以下示例代码来自TutorialPoint。当我们调用characters函数时,我想使用BufferedWriter将所有内容输出到一个txt文件,而我没有办法做到这一点。如果我在characters函数中写入这个BufferedWriter,它将只输出最后一个字符串,因为它只记录最后一次调用。如果我在主函数中编写这个BufferedWriter,因为它们是两个类,UserHandler无法识别在主函数dblpSax类中创建的BufferedWriter

现在,我使用sax解析器分析xml文件。以下示例代码来自TutorialPoint。当我们调用characters函数时,我想使用BufferedWriter将所有内容输出到一个txt文件,而我没有办法做到这一点。如果我在characters函数中写入这个BufferedWriter,它将只输出最后一个字符串,因为它只记录最后一次调用。如果我在主函数中编写这个BufferedWriter,因为它们是两个类,UserHandler无法识别在主函数dblpSax类中创建的BufferedWriter。我还试着做了一个类实例,但我还是遇到了麻烦。你能告诉我怎么做吗?谢谢

我要使用的Bufferwriter如下所示:

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;
      }
   }
}

您需要一个与解析级别相同的BufferedWriter,最好在DefaultHandler之外进行自定义

        try (BufferedWriter out = new BufferedWriter(....)) {
            UserHandler userhandler = new UserHandler(out);
            saxParser.parse(inputFile, userhandler);     
        }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }   
}
类UserHandler扩展了DefaultHandler{ private final BufferedWriter out;//或PrintWriter

UserHandler(BufferedWriter out) {
    this.out = out;
}

然后你可以到处写。

问题是什么?注意,上面的createNewFile调用是多余的。我想使用BufferedWriter将所有内容输出到一个.txt文件。当我们调用characters函数时,问题是:如何使用BufferedWriter?谢谢Joop。这真的很有帮助,我还学习了如何在cl之间交互驴子用一种构造方法。谢谢你的好,甚至有人给了负标记!而我认为他们没有仔细考虑LOL。