在Java程序(Java 1.5)中,我有一个包装文件编写器的BufferedWriter,我多次调用write()...生成的文件非常大...
在这个文件的行中,有些是不完整的......
每次写东西时我是否需要调用flush(但我怀疑它效率低下)或者使用BufferedWriter的另一种方法或者使用另一个类......?
(因为我写了很多行,我确实希望有一些非常有效的东西.)理想的"潮红"时刻是什么?(当我达到BufferedWriter的容量时)......
在里面:
try {
analysisOutput = new BufferedWriter(new FileWriter(
"analysisResults", true));
analysisOutput.newLine();
analysisOutput.write("Processing File " + fileName + "\n");
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
写作:
private void printAfterInfo(String toBeMoved,HashMap<String, Boolean> afterMap, Location location)
throws IOException {
if(afterMap != null) {
for (Map.Entry<String, Boolean> map : afterMap.entrySet()) {
if (toBeMoved == "Condition") {
if (1 <= DEBUG)
System.out.println("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1)
+ " After " + map.getKey() + " "
+ map.getValue() + "\n");
analysisOutput.write("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1)
+ " After " + map.getKey() + " " + map.getValue()
+ "\n");
} else {
if (1 <= DEBUG)
System.out.println("###" + toBeMoved + " " + location + " "
+ map.getKey() + " After "
+ map.getValue() + "\n");
if (conditionalDefs.size() > 0)
analysisOutput.write("###" + toBeMoved + " " + location + " "
+ conditionalDefs.get(conditionalDefs.size() - 1) + " "
+ map.getKey() + " After " + map.getValue()
+ "\n");
else
analysisOutput.write("###" + toBeMoved + " " + location + " " + map.getKey() + " After " + map.getValue() + "\n");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我刚刚发现不完整的行就是"处理文件"之前的行...所以当我从一个我分析的文件切换到另一个文件时就会发生...
收盘:
dispatch(unit);
try {
if (analysisOutput != null) {
printFileInfo();
analysisOutput.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
有时printFileInfo打印出来的信息不会出现在结果文件中......
Jon*_*eet 86
在BufferedWriter当它填充它的缓存就会刷新已.来自以下文件BufferedWriter.write:
通常,此方法将给定数组中的字符存储到此流的缓冲区中, 根据需要将缓冲区刷新到基础流.
(强调我的.)
关键BufferedWriter在于将大量的小写写整合到更少的大写中,因为这通常更有效(但更难以编写代码).你应该不需要做任何特别的事情来让它正常工作,除了确保你在完成它时冲洗它 - 并且调用close()将执行此操作并且无论如何刷新/关闭底层编写器.
换句话说,放松 - 只需写,写,写和关闭:)你通常需要flush手动调用的唯一一次是,如果你真的,真的需要数据现在在磁盘上.(例如,如果你有一个永久记录器,你可能想要经常刷新它,以便无论谁在阅读日志之前都不需要等到缓冲区已满,才能看到新的日志条目!)
| 归档时间: |
|
| 查看次数: |
68249 次 |
| 最近记录: |