IO流的操作规律

简介:
流的操作规律
之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适.
想知道开发时用到哪些对象,只要通过四个明确即可
1.明确源和目的
源:InputStream Reader
目的:OutputStream Writer
2.明确数据是否是纯文本数据.
源: 是纯文本  Reader
否  InputStream
目的: 是纯文本  Writer
否  OutputStream
到这里,就可以明确需求中具体要使用哪个 体系了
3.明确具体的设备
源设备:
硬盘: File
键盘: System.in
内存:数组
网络:Socket流
目的设备:
硬盘: File
控制台: System.out
内存:数组
网络:Socket流
4.是否需要其他额外功能
a.是否需要高效(缓冲区)
是,就加上buffer
b.转换流  InputStreamReader OutputStreamWriter




需求1:复制一个文本文件
a.明确源和目的
  源:InputStream Reader
  目的: OutputStream Writer
b.是否是纯文本
 是,源:Reader
  目的:Writer
c.明确具体设备
源:硬盘  File
目的:硬盘 File
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
d.需要额外功能
需要,高效,
BufferedReader buff = 
new BufferedReader(fr);
BufferedWriter bufw = new BufferedWriter(fw);
import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class BufferedCopy {

   public static void main(String[] args)throws IOException {

      //创建BufferedReader一样,必须先有流。

      FileReader fr = new FileReader("tempfile\\buf.txt");

      BufferedReader bufr = new BufferedReader(fr);

      //创建一个字符写入流的缓冲区。应该先创建流。

       FileWriter fw = new FileWriter("tempfile\\buf2.txt");

      BufferedWriter bufw = new BufferedWriter(fw);

      String line = null;

      while((line=bufr.readLine())!=null){

         bufw.write(line);

//       换行

         bufw.newLine();

         bufw.flush();

      }

      bufr.close();

      bufw.close();

   }

}   

需求2:读取键盘录入信息,并写入到文本文件中
a.明确源和目的
  源:InputStream Reader
  目的: OutputStream Writer
b.是否是纯文本
 是,源:Reader
  目的:Writer
c.明确具体设备
源:键盘  System.in
目的:硬盘 File
InputStream in = System.in;//字节流,使用InputStreamReader
FileWriter fw = new FileWriter("b.txt");
这样做可以完成,但是麻烦,将读取的字节数据转成字符串,再由字符流操作
d.需要额外功能
转换.将字节流围成字符流,因为明确的源是Reader,这样操作方便数据时,便捷.所以要将已有的字节流转成字符流.使用字节-->字符  使用InputStreamReader
InputStreamReader isr = 
new InputStreamReader(System.in);
FileWriter fw = new FileWriter("b.txt");
需要,高效,
BufferedReader buff = 
new BufferedReader(isr);

BufferedWriter bufw = new BufferedWriter(fw);

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStreamReader;

public class ReadKeyDemo {

   public static void main(String[] args) throws IOException {

       BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//记住:以后读取键盘都用这句,可以背下来。

       BufferedWriter bufw = new BufferedWriter(new FileWriter("d:/a.txt"));

       String line = null;

         while((line=bufr.readLine())!=null){

            //如果输入over,程序结束

            if("over".equals(line))

            {

                break;

            }

            bufw.write(line);

//          换行

            bufw.newLine();

            bufw.flush();

         }

         bufr.close();

         bufw.close();

   }

}

需求3:将一个文件文件内容显示在控制台上
a.明确源和目的
  源:InputStream Reader
  目的: OutputStream Writer
b.是否是纯文本
 是,
 源:Reader
 目的:Writer
    c.明确具体设备
    源:硬盘:File
    目的:控制台:System.out


    FileReader fr = new FileReader("a.txt");
    OutputStream out = System.out;//这样输出内容很麻烦,使用转换流
    d.需要额外功能吗?
    需要:
    转换流
    FileReader fr = new new FileReader("a.txt");
    OutputStreamWriter osw = new OutputStreamWriter(System.out);
    高效,buffer
    BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));

    BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.IOException;

import java.io.OutputStreamWriter;

public class ReadKeyDemo {

   public static void main(String[] args) throws IOException {

      BufferedReader bufr = new BufferedReader(new FileReader("d:/a.txt"));

      BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

      String line = null;

         while((line=bufr.readLine())!=null){

            bufw.write(line);

//          换行

            bufw.newLine();

            bufw.flush();

         }

         bufr.close();

         bufw.close();

   }

}

需求4:读取键盘录入数据,显示在控制台上
a.明确源和目的
  源:InputStream Reader
  目的: OutputStream Writer
b.是否是纯文本
 是,
 源:Reader
 目的:Writer
    c.明确具体设备
    源:键盘:System.in
    目的:控制台:System.out
    InputStream in = System.in;
    OutputStream out = System.out;
    d.明确额外功能?
    需要转换,因为都是字节流,但是操作的却是文本数据
    所以使用字符流操作起来更为便捷
    InputStreamReader isr = 
    new InputStreamReader(System.in);
    OutputStreamWriter osw = 
    new OutputStreamWriter(System.out);
    为了将其高效
    BufferedReader bufr = new BufferedReader(isr);
    BufferedWriter bufw = new BufferedWriter(osw);
/**
录入键盘输入字母并将小写变为大写
*/
import java.io.*;
class readin 
{
	public static void main(String[] args)throws IOException 
	{
		InputStream in = System.in;//引入输入流
		InputStreamReader isr = new InputStreamReader(in);
		StringBuilder sb = new StringBuilder();//新建一个缓冲区
		while(true)
		{
			int ch = in.read();//读入键盘输入
			if(ch=='\r')
				continue;
			if(ch=='\n')
			{
				String s = sb.toString();//讲读入输入转换为字符型
				if("over".equals(s))//判断S是否为OVER
					break;
				else
					System.out.println(s.toUpperCase());//打印出字母大写
				sb.delete(0,sb.length());
			}
			else
				sb.append((char)ch);
		}
	}
}



什么时候使用转换流呢?
  1.源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁,提高对文本操作的便捷.
  2.一旦操作文本涉及到具体的指定编码表时,必须使用转换流
目录
相关文章
|
7月前
|
缓存 Java API
IO流【IO流技术介绍、 IO流的经典写法、 IO流新语法经典写法、Java中流的概念细分 】(一)-全面详解(学习总结---从入门到深化)
IO流【IO流技术介绍、 IO流的经典写法、 IO流新语法经典写法、Java中流的概念细分 】(一)-全面详解(学习总结---从入门到深化)
105 0
|
10天前
io流分类
按流向分类: 输入流:用于从数据源(如文件、键盘)读取数据。 输出流:用于向目标(如文件、屏幕)写入数据。 按操作类型分类: 字节流:以字节为单位进行操作,适用于所有类型的数据。 字符流:以字符为单位进行操作,更便于处理文本数据。
12 4
|
6月前
|
网络协议
一篇文章讲明白IO流实现写入规定的acci码值
一篇文章讲明白IO流实现写入规定的acci码值
33 0
|
7月前
|
Java API 数据库
IO流【转换流、字符输出流、数据流、对象流】(三)-全面详解(学习总结---从入门到深化)
IO流【转换流、字符输出流、数据流、对象流】(三)-全面详解(学习总结---从入门到深化)
70 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-读写流组合使用
前端学习笔记202305学习笔记第二十五天-读写流组合使用
34 0
|
Java 数据处理
IO流的分类
IO流的分类和常用方法
179 0
|
Java
知识单元八 输入输出流
知识单元八 输入输出流
124 0
IO流的演变过程
思维导图分享~
77 0
IO流的演变过程
|
存储 C语言
认知IO流之 — FileDescriptor
FileDescriptor 顾名思义是文件描述符,FileDescriptor 可以被用来表示开放文件、开放套接字等。比如用 FileDescriptor 表示文件来说: 当 FileDescriptor 表示文件时,我们可以通俗的将 FileDescriptor 看成是该文件。但是,我们不能直接通过 FileDescriptor 对该文件进行操作。
166 0