黑马程序员_12月12日

本文聚焦于Java和Android开发领域的关键实践,详细解析了文件操作、流处理、BufferedReader与BufferedWriter的使用及优化技巧。通过具体代码分析,揭示了如何高效地进行文件读写操作,并提供了避免常见错误的实用建议。适合希望提升编程技能的开发者阅读。
摘要由CSDN通过智能技术生成

---------------------- 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值