Я хочу, чтобы это записывалось в 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 остается без изменений.
Редактировать: теперь он записывает в файл, но вместо того, чтобы добавлять его, он очищает его и записывает снова.
Изменить еще раз: я неправильно понял. После еще нескольких тестов он записывает в файл только при первом вызове analysis(). При последующих вызовах он ничего не делает.
Редактировать 3: проблема решена, но с использованием flush() вместо close(), поэтому принтер не закрывается. Я считаю, что закрытие принтрайтера вызвало сбой при последующей записи.
addEmails
. - person Pshemo   schedule 22.07.2015writer
? - person Some guy   schedule 22.07.2015