我有以下方法:
public void writeToFile(
String id,
String no,
int systol,
int diastol,
int pulsDiff,
double speedAvg,
double spread
) {
String line =
id + "\t" + no + "\t" + systol + "/" + diastol + "\t" + pulsDiff
+ "\t" + speedAvg + "\t" + spread + "\r\n";
File fil = new File("resultat.txt");
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(fil, true));
writer.write(line);
writer.close();
} catch (Exception e) {
System.err.println("Fejl: " + e.getMessage());
}这可能是以不同的方式进行的吗?用不同的方法?这样做有什么好处呢?
我试着理解拥有bufferedWriter的好处。我还在开头,我正试着理解这句话:“
通常,Writer将其输出立即发送到基础字符或字节流。除非需要提示输出,否则最好将BufferedWriter封装在任何写操作可能代价高昂的Writer (例如FileWriters和OutputStreamWriters )周围。例如,
PrintWriter out = new PrintWriter(new BufferedWriter(new
FileWriter("foo.out"))); 将把PrintWriter的输出缓冲到文件中。在没有缓冲的情况下,每次调用print()方法都会导致字符被转换成字节,然后将字节立即写入文件中,这可能非常低效。
特别是“通常情况下,Writer将其输出立即发送到基础字符或字节流”部分。
发布于 2014-01-05 11:00:17
因为您正在为编写器编写一个字符串,所以在这种情况下缓冲是无用的。
但是,真正应该修复的是异常处理和关闭作者的方式。如果写入或关闭没有成功,则应该使用异常警告调用方,而不是简单地记录错误并继续进行,就好像什么都没有发生一样。
并且作者应该在一个最后的块中关闭,或者使用try-构造,以确保它总是关闭的。
发布于 2014-01-05 11:04:32
假设您是一个与操作系统对话的Java指令。如果没有缓冲,情况就像(大大简化了):
Java -> OS: Hello, operating system, I'd like to write character c to file F
OS -> HDD : Hello, disk, please append character c to file F
HDD -> OS after a few milliseconds : I'm done.
OS -> Java : Done如果你把许多字符写到一个文件中,这种交流是不必要的--他们仍然在谈论同样的问题,这是浪费时间!所以我们才用缓冲器。看看情况如何变化:
Java -> OS: Hello, operating system, I'd like to write bunch of characters c[] to file F
OS -> HDD : Hello, disk, please append characters c[] to file F
HDD -> OS after a few tens of milliseconds : I'm done.
OS -> Java : Done句号。整个机器,所有的磁盘,等等,只被调用一次。
发布于 2014-01-05 10:59:25
使用BufferedReader或BufferedWriter的优点是减少了从磁盘读取和写入磁盘的物理数据的数量。它利用缓冲系统,同时执行读写操作。因此,效率更高。您可以尝试使用或者不使用BufferedReader/BufferedWriter来读取/写入一个大文件,并查看不同之处。
https://stackoverflow.com/questions/20932697
复制相似问题