gpt4 book ai didi

java - new PrintWriter(new BufferedWriter(new FileWriter ("output.txt", true))) 不打印

转载 作者:行者123 更新时间:2023-11-30 03:19:57 26 4
gpt4 key购买 nike

我希望将其写入output.txt而不清除它 - 只是附加到末尾。但是,当我使用以下两种方法时:

public void addEmails(ArrayList<String> emails){
for (int i = 0; i < emails.size(); i++){
System.out.println(emails.get(i));
writer.println(emails.get(i));

if (i == emails.size() - 1){
System.out.println();
System.out.println();
writer.println();
writer.println();
}
}

}

public void addFileName(String fn){
String fileName = fn.replace("%DATE%.%FORMAT%", "");
writer.println(fileName);
writer.println();
System.out.println(fileName);
System.out.println();
}

这些是通过以下方法调用的:

public void analyze(String path){

try {
System.out.println(path);



File inputFile = new File(path);
InputStream inputStream= new FileInputStream(inputFile);
Reader reader = new InputStreamReader(inputStream,"UTF-8");

InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");




SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DescriptorHandler descHandler = new DescriptorHandler(this);
saxParser.parse(is, descHandler);
reader.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}



}

Saxparser.parse 对 DefaultHandler 使用以下重载方法:

@Override
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);
if (qName.equalsIgnoreCase("DestinationGroup")) {
bDestinationGroup = true;
} else if (qName.equalsIgnoreCase("EmailDestination")) {
bEmailDestination = true;
} else if (qName.equalsIgnoreCase("Filename")) {
bFileName = true;
}

}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equalsIgnoreCase("DestinationGroup")) {

descriptorAnalyzer.addFileName(filename);

descriptorAnalyzer.addEmails(emails);

emails.clear();


bDestinationGroup = false;
}
}

@Override
public void characters(char ch[], int start, int length)
throws SAXException {


if (bEmailDestination) {
String s = new String(ch, start, length);
emails.add(s);
bEmailDestination = false;
}

else if (bFileName) {
filename = new String(ch, start, length);
bFileName = false;
}

}

声明(在程序启动时调用):

    writer = new PrintWriter(new BufferedWriter(new FileWriter("output.txt", true)));

System.out.println() 正在做我想要的事情。但是,output.txt 保持不变。

编辑:它现在写入文件,但不是追加它,而是清除它并再次写入。

再次编辑:我误解了。经过更多测试后,它仅在第一次调用analyze()时写入文件。在后续调用中,它不会执行任何操作。

编辑3:解决了问题,但使用flush()而不是close(),因此打印器不会关闭。我相信打印器关闭是导致后续写入失败的原因。

最佳答案

BufferedWritter 不会在每次使用 println 时将数据写入文件。它的重点是将其保存在缓冲区中,然后当缓冲区已满时它将写入。当您从未达到缓冲区最大大小并且不对编写器调用刷新时,就会出现问题。BufferedOutputStream 也是如此。

所以你应该在关闭之前调用 writer.flush() 。

关于java - new PrintWriter(new BufferedWriter(new FileWriter ("output.txt", true))) 不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31568548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com