gpt4 book ai didi

java - PrintWriter 未按正确顺序附加内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:59 24 4
gpt4 key购买 nike

我有一个包含对象的列表(其构造函数包含另一个内部对象)。当我尝试将列表打印到文件时,我遍历每个对象并调用对象各自的编写器方法。

public void writer(String file, boolean append) {
File path = new File("../Opdracht6_2/src/" + file);
try {
PrintWriter write = new PrintWriter(new FileOutputStream(path,
append));
for (SuperObject o : this.list) {
if (o instanceof Object1) {
((subObject1) w).writer1(file);
}
if (o instanceof Object2) {
((subObject3) w).writer2(file);

}if (o instanceof Object3) {
((subObject3) w).writer3(file);

}
}
write.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

在对象的 writer 方法中,我尝试首先打印一行说明它是什么类型,然后调用 innerobject 的 writer 方法。之后,我希望打印当前对象的参数,然后返回到列表编写器方法

public void writer1(String file) {
File path = new File("../Opdracht6_2/src/" + file);
try {
PrintWriter write = new PrintWriter(
new FileOutputStream(path, true));
//below is the string I want to print before the innerobject appends
//its own arguments to the file
write.append("String\r\n");
this.innerobject.innerwriter();
write.append(this objects arg);
write.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

内部对象的作者

public void innerwriter(String file) {
File path = new File("../Opdracht6_2/src/" + file);
try {
PrintWriter write = new PrintWriter(
new FileOutputStream(path, true));
write.append(this objects arg);
write.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

现在实际发生的事情是,我首先尝试附加的行被附加到内部对象的参数之后,即使我已经将它放在调用内部对象的编写器的方法之前。它在文件中看起来像这样:

inner objects arg

string

outer objects arg

谁能解释一下为什么?

最佳答案

这里的每个方法最好不要使用Writer。使用单个 StringBuilder 附加内容并将其传递给方法。可能是 Writer 没有按照附加内容的顺序正确刷新内容。具体来说,innerwriter 中的语句 write.close() 会在 "String\r\n" 之前刷新内部对象的内容实际上是由 Writer 在调用方法中编写的。

您可以避免创建多个 Writer,而是使用 StringBuilder:

// pass a StringBuilder to append
public void innerwriter(StringBuilder sb) {
sb.append(this objects arg);
}

当您完成附加所有内容后,使用仅创建一次的 Writer 编写它:

PrintWriter write = new PrintWriter(new FileOutputStream(path,
append));
StringBuilder sb = new StringBuilder();
for (SuperObject o : this.list) {
if (o instanceof Object1) {
((subObject1) w).writer1(sb);
}
if (o instanceof Object2) {
((subObject3) w).writer2(sb);

} if (o instanceof Object3) {
((subObject3) w).writer3(sb);

}
}

write.append(sb.toString());
write.close();

关于java - PrintWriter 未按正确顺序附加内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31231980/

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