java基础---Stream


学习笔记 -  IO流中的Stream

一、IO流使用步骤分析

/**
 * 字符转换流      字节-->字符
 * @author Administrator
 *
 */
/**
 * 1、
 * 源:键盘录入
 * 目的:控制台
 *
 * 2、需求:想把键盘录入的数据存放到一个文件中。
 * 源:键盘
 * 目的:文件
 *
 * 3.需求:想要将一个文件的数据打印到控制台上。
 * 源:文件
 * 目的:控制台
 *
 * 流操作的基本规律
 * 最麻烦的是流对象 有很多,不知道该用哪一个
 *
 * 通过两个明确来完成
 * 1、明确源和目的地
 *  源:输入流。  InputStream Reader
 *  目的:输出流 .  OutputStream  Writer
 *
 * 2.操作的数据是否是纯文本。
 *  是:字符流
 *  否:字节流
 * 3.当体系明确后,在明确要使用哪个具体的对象。
 *  通过设备来进行区分;
 *  源设备:内存,硬盘,键盘;
 *  目的设备:内存,硬盘,控制台。
 * 
 * 1, 将一个文本文件中数据存储到另一个文件中,复制文件
 *     源:应为是源,所以使用读取流   InputStream Reader
 *       是不是操作文本文件。
 *     是,选择Reader
 *    
 *     接下来明确要使用该体系中的那个对象
 *     明确设备:硬盘.上一个文件。
 *     Reader体系中可以操作文件的对象是FileReader
 *    
 *     是否需要提高效率:是,加入Reader体系中的缓冲区,BufferedReader
 *    
 *     FileReader fr = new FileReader("a.txt");
 *     BufferedReader bufr = new BufferedReader(fr);
 *    
 *     目的:OutputStream Writer
 *     是否是纯文本。
 *     是:Writer
 *     设备:硬盘,一个文件
 *     Writer体系中可以操作文件的是FileWriter
 *     是否需要提高效率:是,计入Writer体系中的缓冲区,BufferedWriter
 * 
 *  FileWriter fw = new FileWriter("b.txt");
 *  BufferedWriter bufw = new BufferedWriter(fw);
 */

/**
 * 2.需求:将键盘录入的数据保存到一个文件中。
 *   这个需求中有源和目的都存在。
 *   那么分别分析
 *   源:InputStream Reader
 *   是不是纯文本?是,Reader
 *  
 *   设备:键盘。对应的对象是System.in.
 *   不是选择Reader吗?System.in对应的是字节流?
 *   为了操作键盘的文本数据方便。转成字符流,按照字符串操作是最方便的
 *   所以,既然明确了Reader,那么就将System.in转换成字符流Reader.
 *   用了Reader体系占用转换流,InputStreamReader
 *  
 *   InputStreamReadr isr = new InputStreamReadr(System.in);
 *  
 *   提高效率需要  BufferedReader
 *   BufferedReader bufr = new BufferedReader(isr);
 *
 *   目的:OutputStram Writer
 *   是否是存文本?是,Writer
 *   设备:硬盘。一个文件 。使用FileWriter
 *   FileWriter fw = new FileWriter("b.txt");
 *   需要提高效率吗?需要
 *   BufferedWriter bufw = new BufferedWriter(fw);
 *  
 *   扩展:想要把录入的数据按照指定的编码表(UTF-8),将数据存到文件中

 

二、使用示例

public class TransStreamDemo {

 public static void main(String[] args) throws IOException {
  
  //设置读取的对象
  //System.setIn(new FileInputStream("FileReader.java"));
  
  //设置写入的对象
  //System.setOut(new PrintStream("zzzz.txt"));
  
  
  //获取键盘录入的对象。
  InputStream is = System.in;
  
  //创建字节流转换成字符流的对象
  InputStreamReader isr = new InputStreamReader(is);
  
  //读缓冲区,接收字节流转换为字符流对象
  BufferedReader bufis = new BufferedReader(isr);
  
  
  //获取键盘录入功能的快速生成方法  System.in
  //将文件的信息copy到目标文件  并将字母从小写该为大写
  BufferedReader bufis2 = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\FileReader.txt")));
  
  //写入  :屏幕显示
//  OutputStream out = System.out;
  //创建字符流转换成字节流的对象
//  OutputStreamWriter opw = new OutputStreamWriter(out);
  //写的缓冲区,将字节流转成字符流存入缓冲区
//  BufferedWriter bufw = new BufferedWriter(opw);
  
  //屏幕显示信息的最快捷的方法  System.out
  //将信息的目标文件换成  C:
  
  BufferedWriter bufw2 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Tran.txt")));
  
  
  String line = null;
  while((line = bufis2.readLine())!=null){
   if("over".equals(line))
    break;
   //使用系统的输出
//   System.out.println(line.toUpperCase());
   bufw2.write(line.toUpperCase());
   bufw2.newLine();
   bufw2.flush();
  }
  
  bufis2.close();
 }

}

 

三、FileInputStream和FileOutputStream

/**
 * inputStream  读 将目标文件中的信息,读出来,显示在控制台
 * outputStream     写 写之前没有目标文件,先创建目标文件
 * @author Administrator
 *
 */
public class FileStream {
 public static void main(String [] args) throws IOException{
  writeFile();
  readFile_3();
  
 }
 /**
  * 通过流的方式向目标文件写入数据
  * @throws IOException
  */
 public static void writeFile() throws IOException{
  //不管什么,都写到流中,不需要刷新
  //byte是最下单位,不需要再转换了
  //同样是覆盖原有的文件
  FileOutputStream fos = new FileOutputStream("fos.txt");
  
  fos.write("abcde".getBytes());
  
  fos.close();
 }
 
 /**
  * 这个方法能够读取出\r \n   即他们两个所占用的内存的大小
  * @throws IOException
  */
 public static void readFile_3() throws IOException{
  FileInputStream fis = new FileInputStream("fos.txt");
  //byte[] buf = new byte[fis.available]; //定义一个刚刚好的缓冲区
  //fis.read(buf)
  //System.out.println(new String(buf));
  int num = fis.available();
  System.out.println("num="+num);
  fis.close();
 }
 
 /**
  * 通过byte[] 以缓冲的形式读取数据
  *
  * 最保险,最简洁的方法
  *
  * @throws IOException
  */
 public static void readFile_2() throws IOException{
  FileInputStream fis = new FileInputStream("fos.txt");
  
  byte[] buf = new byte[1024];
  int len = 0;
  while((len = fis.read(buf))!=-1){
   System.out.println(new String(buf,0,len));
  }
  fis.close();
 }
 
 /**
  * 一个一个字节的读取数据
  * @throws IOException
  */
 public static void readFile() throws IOException{
  FileInputStream fis = new FileInputStream("fos.txt");
  int ch = 0;
  while((ch = fis.read())!=-1){
   System.out.println((char)ch);
  }
  fis.close();
 }
 
 
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值