A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HAnG 中级黑马   /  2013-11-29 15:03  /  1081 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HAnG 于 2013-11-30 23:37 编辑

    毕老师讲到那个限制使用次数的小程序时,关联prop文件用的是字节流FileInputStream和FileOutputStream,我自己写代码时用的是BufferedReader和BufferedWriter,因为不是说读写纯文本文件用字符流更好吗?老师在这里没有详说,所以我有点疑问,各位说说意见。
  1. package cn.hang.io;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.util.Properties;

  9. /*
  10. * 限制程序使用次数
  11. */
  12. public class UsedTimeUp {

  13.         public static void main(String[] args) throws IOException {
  14.                 demo();
  15.         }
  16.         
  17.         public static void demo() throws IOException {
  18.                 Properties prop = new Properties();   //new prop
  19.                 File f = new File("f:\\java\\count.ini");  //File对象关联配置文件
  20.                 //不存在则创建
  21.                 if(!f.exists())
  22.                         f.createNewFile();
  23.                
  24.                 BufferedReader bufr = new BufferedReader(new FileReader(f)); //输入流关联File对象
  25.                 prop.load(bufr);  //prop读取输入流中的配置信息
  26.                 int count = 0;     //new 使用次数
  27.                 String value = prop.getProperty("time");  //获取time值
  28.                 //time值不为空则转换成int型,赋给count,为空则count由0变1
  29.                 if(value != null) {
  30.                         count = Integer.parseInt(value);   
  31.                         if(count >= 5) {
  32.                                 System.out.println("您好,拿钱!");
  33.                                 return;
  34.                         }
  35.                 }
  36.                
  37.                 count++;
  38.                 System.out.println("running");
  39.                
  40.                 prop.setProperty("time", count+""); //设置配置文件
  41.                 BufferedWriter bufw = new BufferedWriter(new FileWriter(f)); //输出流关联File对象
  42.                 prop.store(bufw, "used time +1");//保存配置文件
  43.                 bufr.close();
  44.                 bufw.close();               
  45.         }

  46. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 加油!

查看全部评分

3 个回复

正序浏览
问题解决了就把类型改成提问结束1
回复 使用道具 举报
字符流和字节流都可以,哪个好只是说哪个用起来更方便,可以避免更多的误操作,内部都是一样的字节流FileReader只不过就是字节流按照默认的GDB编码的形式的转换流,底层还是字节流
所以,一下两种方式其实是完全一样的
FileReader fr = new FileReader(“1.txt”);
InputStreamReader isr = new InputStreamReader(new FileInputStream(“1.txt”),”GDB”);

关于效率,带缓冲一定会比不带缓冲效率要高的,因为带缓冲就避免了频繁的读写硬盘,也避免了可能产生的等待资源的时间



评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
毕老师操作文本用字符流,也不是绝对,看情况而定吧
就读取配置文件来说,我的猜想是用字节流效率高,直接操作内存
但是如果配置文件的键值存在中文,那么建议使用字符流,否则会出现乱码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马