---------------------- android培训、java培训、期待与您交流! ----------------------
一、需要注意的一些问题
(1)文件路径中的“\”在字符串中以“\\”代替。(2)FileWriter:
flush()和close()都可以清除缓冲(刷新)并写入文件,close关闭后不能再写入。
(3)流处理注意事项:
1.流对象在使用后总要关闭,必须在finally块中调用close()。但是对象如果在try块中声明,则无法在finally块中使用。
因此需要在try之前声明:
IOObject ioo = null;
然后在try中new对象。
2.在finally中调用close时,对象可能还没创建。需要先判断:
if(IOObject!=null) IOObject.close();
(4)换行符标记:
Windows : "CR + LF" = "\r\n"
Unix/Linux: "LF" = "\n"
(5)FileReader:
在定义字符读入缓冲区时,其大小通常为1024的整数倍。要根据返回的整数值判断有效的读入字符数。
(6)BufferedXXXXX:
关闭这个缓冲区就是在关闭流对象。因此调用此对象close方法后无需再调用流对象的close方法。
二、BufferedWriter的write方法代码分析
public void write(char cbuf[], int off, int len) throws IOException {
synchronized (lock) {
ensureOpen();//确保流处于打开状态
if ((off < 0) || (off > cbuf.length) || (len < 0) || //判断下标是否越界
((off + len) > cbuf.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) { //没有要输出的内容
return;
}
if (len >= nChars) { //本次要写入的内容长度大于缓冲区总长度
flushBuffer(); //将当前缓冲区内容全部输出并清空
out.write(cbuf, off, len); //直接输出本次要写的内容
return;
}
int b = off, t = off + len;
while (b < t) { //如果本次要写的内容还没有完全输出或进入缓冲区
int d = min(nChars - nextChar, t - b); //取缓冲区剩余大小和本次要写的剩余大小的最小值
System.arraycopy(cbuf, b, cb, nextChar, d); //将本次要写的其中长度为d的内容写入缓冲区
b += d; //移动本次要写入内容的头指针
nextChar += d; //移动缓冲区写入点
if (nextChar >= nChars) //缓冲区满则输出
flushBuffer();
}
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima