javaAPI(字符流,转换流)

io流体系

FileWriter
/**
 * FileWriter类的使用
 * 该类是写入字符文件的快捷类
 */
public classFileWriterDemo {
       public static voidmain(String[] args)throws Exception {
              //第一步:创建字符流输出对象
              FileWriter fw = new FileWriter("readme.txt");

              //第二步:调用写入数据方法
              fw.write("注意事项"+System.getProperty("line.separator"));
              fw.write("1、上课不能玩手机"+System.getProperty("line.separator"));
              fw.write("2、不能迟到早退"+System.getProperty("line.separator"));

              //第三步:调用刷新缓冲区功能,该功能会将缓冲区的数据写入到文件,并且清空缓冲区中的内容
              fw.flush();

              //第四步:关闭流,释放资源
              fw.close();
       }
}

flush 方法和close方法的区别
flush只刷新缓冲区,不释放流资源,流对象还可以继续使用
close刷新并且释放流资源,流对象不可以继续使用
、如何实现数据换行
window:\r\n
linux:\n
mac:\r
通用解决方案:String line = System.getProperty(“line.separator”);//根据应的换行符

怎么实现追加数据
调用FileWriter(String fileName, true)构造方法创建对象 建
FileReder

tjava.io.FileReader;
public classFileReaderDemo {
       public static voidmain(String[] args)throws Exception {
              //第一步:创建字符流输入对象
              FileReader fr = new FileReader("readme.txt");

              //第二步:调用读取数据方法,并显示
              /*
               *方式1::一次读取一个字符,效率低 ,不推荐
               */
              int ch = 0;
              while((ch=fr.read()) != -1){
                     System.out.print((char)ch);
              }


              /*
               * 方式2:一次读取一个字符数组,效率高推荐
               */
              fr = newFileReader("readme.txt");//必须重新赋值,或者注释掉方式1中的代码,因为fr对象已经读取到末尾了,必须重新开始读取
              char[] chs = new char[1024];
              int len = 0;
              while((len = fr.read(chs)) != -1){
                     System.out.println(newString(chs,0,len));
              }


              //第三步:关闭流,释放资源,该对象无法继续使用
              fr.close();

}




缓冲区是提高效率用的,给谁提高呢?
BufferedWriter:是给字符输出流提高效率用的,那就意味着,缓冲区对象建立时,必须要先有流对象。明确要提高具体的流对象的效率。
FileWriter fw = new FileWriter(“bufdemo.txt”);
BufferedWriter bufw = new BufferedWriter(fw);//让缓冲区和指定流相关联。
BufferedReader:
FileReader fr = new FileReader(“bufdemo.txt”);
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null){ //readLine方法返回的时候是不带换行符的。
System.out.println(line);
}
转换流
为什么要用转换流?
因为从控制台获取数据时获取到的是字节流,但是我们输入的是字符,所以操作字符流会更加方便,这时就需要转换流
转换流就是字符流和字节流之间的一个桥梁,别人给你一个字节流,明知道里面存的是文本,用字符流操作更方便,所以就要用转换流

  /*输入转换流演示*/
//System.in 是个输入流,可以看成FileInputStream
              BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
              String line = reader.readLine();
              System.out.println(line);
              reader.close();


             /*输出转换流演示*/
              //System.out 是个字节输出流,这里看成 new FileOutputStream();就可以了
              BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
              writer.write("你好");
              writer.flush();
              writer.close();

转换流编码问题
读取转换流和写入转换流都有带参的构造,可以指定编码,可以设置以何种编码读取字节或写入字节
InputStreamReader(InputStream in, String charsetName)
OutputStreamWriter(OutputStream, out, String charsetName)

 /*输入转换流演示*/
//System.in 是个输入流,可以看成FileInputStream
              BufferedReader reader = new BufferedReader(new InputStreamReader(System.in,"UTF-8"));
              String line = reader.readLine();
              System.out.println(line);
              reader.close();      

              /*输出转换流演示*/
              //System.out 是个字节输出流,这里看成 new FileOutputStream();就可以了
              BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out,"UTF-8"));
              writer.write("你好");
              writer.flush();
              writer.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值