IO流(三)__字节流 标准输入输出流 转换流

一、字节流:FileInputStream 和FileOutputStream

基本操作和字符流类相同,没有flush,但是close还是要的

复制一个字节流文件

private static void copy_1() throws IOException {
        FileInputStream fis=new FileInputStream("d://17-网络编程(TCP协议-练习-上传图片客户端).avi");
        BufferedInputStream bufis=new BufferedInputStream(fis);
        FileOutputStream fos=new FileOutputStream("d://2.avi");
        BufferedOutputStream bufos=new BufferedOutputStream(fos);

        /*byte[] buf =new byte[1024];
        int len=0;

      while((len=fis.read(buf))!=-1){
      fos.write(buf);*/

        int ch=0;
        while((ch=bufis.read())!=-1){
            bufos.write(ch);
        }
        fos.close();
        fis.close();
    }

int len=fis.available() 获得可读取的字节数

private static void demo_read() throws IOException {
    FileInputStream fis=new FileInputStream("demo.txt");
        byte[] buf=new byte[fis.available()];//获取文件大小,但是如果文件过大就会出现溢出
        fis.read(buf);
        System.out.println(new String(buf) );
    }

二、system.insystem.out标准输入输出流InputStream OutputStream

阻塞的意思就是说: 程序一直停在read()方法这里,等待数据。没有数据就不继续往下执行,至到得到数据。

何谓标准输入输出的呢?就是我们最常见的,一般都是命令行窗口,System.in负责从健盘输入,System.out负责从命令窗口输出

private static void readKey() throws IOException {
        InputStream in=System.in;
        int ch=in.read();//阻塞式方法
        System.out.println(ch);
        int ch1=in.read();//阻塞式方法
        System.out.println(ch1);
        int ch2=in.read();//阻塞式方法
        System.out.println(ch2);

        //in.close();//系统流不要关闭,关闭之后就不能再打开

        /*InputStream in2=System.in;
        int ch3=in2.read();
        System.out.println(ch3);*/

    }

练习:获取用户键盘录入的数据,并将数据变成大写显示在控制台上,如果用户输入的是over,结束键盘录入。

思路:
*1.因为键盘录入只读取一个字节,判断是否是over
*需要将读取到的字节拼成字符串,
*2.那就需要一个容器。StringBuilder
*3.在用户回车之前将录入的数据变成字符串判断即可

private static void readKey2() throws IOException {
        //1.创建容器
        StringBuilder sb=new StringBuilder();
        //2.获取键盘读取流
        InputStream in=System.in;
        //3.定义变量记录读取到的字节,并循环获取

        int ch=0;
        while((ch=in.read())!=-1){
            //在存储之前需要判断是否是换行标记,因为换行标记不存储
            if(ch==‘\r‘)
                continue;
            if(ch==‘\n‘){
                String temp=sb.toString();
                if("over".equals(temp))
                    break;
                System.out.println(temp.toUpperCase());
                sb.delete(0,sb.length());
            }
            else
                sb.append((char)ch);

        }
    }

注意:\r \n在windows下都是换行控制符。在此程序中交换\r和\n没有影响。

三、转换流

什么时候使用转换流?
1.源或者目的对应的设备是字节流。但是操作的确实文本数据,可以使用转换作为桥梁提高对文本操作的便捷
2.一旦操作文本设计具体的指定编码表时,必须使用转换流。

public class TransStreamDemo {

    public static void main(String[] args) throws IOException {
        //字节流
        InputStream in= System.in;
        //将字节流转成字符的桥梁。转换流
        InputStreamReader isr=new InputStreamReader(in);
        //缓冲字符流
        BufferedReader buff=new BufferedReader(isr);
        String line=null;
        while((line=buff.readLine())!=null){
            if("over".equals(line))
                break;
            System.out.println(line.toUpperCase());
        }
    }
}

OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk_1.txt"),"GBK");
FileWriter fw=new FileWriter("gbk_1.txt"); 
* 这两句代码的功能是等同的
* FileWriter:其实就是转换流指定了本机默认码表的体现。而且这个转换流的子类对象,可以方便操作文本文件
* 简单说:操作文件的字节流+本机默认的编码表
* 这就是按照默认码表来操作文件的便捷类。
* 如果文本文件需要明确具体的码表,FileWriter就不行了。必须用转换流。

练习:

* 1.需求:将键盘录入的数据写入到一个文件当中
* 2.需求:讲一个文本文件内容显示在控制台上
* 3.需求:将一个文本文件中的内容复制到另一个文件中

public class TransStreamDemo2 {
    public static void main(String[] args) throws IOException {
        //1.需求:将键盘录入的数据写入到一个文件当中
        /*BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")));
        */
        //2.需求:讲一个文本文件内容显示在控制台上
        /*BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
        BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));*/
        //3.需求:将一个文本文件中的内容复制到另一个文件中
        BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
        BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));

        String line=null;
        while((line=bufr.readLine())!=null){
            if("over".equals(line))
                break;
            bufw.write(line.toUpperCase());
            bufw.newLine();
            bufw.flush();
        }

    }

}
时间: 2024-10-10 23:49:56

IO流(三)__字节流 标准输入输出流 转换流的相关文章

Java基础知识强化之IO流笔记61:标准输入输出流的本质

1. 标准输入输出流  System类中的两个成员变量: public static final InputStream in :"标准"输入流. public static final PrintStream out :"标准"输出流. 备注: InputStream is = System.in; PrintStream ps = System.out; 代码示例: 1 package cn.itcast_04; 2 3 import java.io.Print

【IO流】23 - 字节流 - 字节输出流的缓冲流以及字节输入流的缓冲流BufferedOutputStream&BufferedInputStream

package cn.itcast.demo1; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; /* * 字节输出流的缓冲流 * java.io.BufferedOuputStream 作用: 提高原有输出流的写入效率 * BufferedOuputStream 继承 OutputStream * 方法,写入 write 字节,字节数组 * * 构

Java - io输入输出流 --转换流

转换流  转换输出流 OutputStreamWriter: 说明: /* * OutputStreamWriter 这个类的作用 * 就是指定输出流的编码格式 * 这个类的构造方法 需要传递 一个输出流的对象 * FileOutputStream fos = new FileOutputStream("e:gu.txt"); * OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8"); * * *

字符流Reader、Writer,字符转换流 OutputStreamWriter、InputStreamReader

Reader.Writer是所有字符流的超类. Writer类方法 void write(String str) void write(char[] cbuf, int off, int len); void flush() void close OutputStreamWriter构造方法字符编码默认为系统编码,可以不写 FileWriter的append默认为false,可以不写.另一个构造(File file, boolean append) Writer out = new FileWr

15、IO (转换流、缓冲流)

转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去 ? 转换流_字符转字节的过程 * A: 转换流_字符转字节的过程 * a.图解 * 详见day24_source/转换流.JPG图片 ? OutputStreamWriter写文本文件 * A: OutputStreamWriter写文本文件 * a:

24_IO_第24天(转换流、缓冲流)

今日内容介绍1.转换流2.缓冲流 01转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节 * 将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去 02转换流_字符转字节的过程 03OutputStreamWriter写文本文件 * A: OutputStreamWriter写文本文件 * a: OutputStreamWriter * java.io.Outp

转换流和缓冲流

1. 转换流(把字符流转成了字节流所以是桥梁):OutputStreamWriter;是字符输出流;先用FileOutputStream确定要写入的地址;然后再用转换流抓取要写入的地址和码表 2.InputStreamReader:是FileReader的父类并且是它的转换流 3.InputStreamReader和OutputStreamWriter的转换原理(字节流+码表) 4.字符转成字节后再写入:明确目的地:FileOutputStream fos=new FileOutputStrea

Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出流写入稍后由数据输入流读取的数据. · DataOutputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中.然后,应用程序可以使用数据输入流将数据读入. package datastreamdemos; import java.io.*; /** * Created b

黑马程序员--Java基础学习笔记【IO流-字节流、转换流】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- IO 流 常用基类 字节流 InputStreamOutputStream 常用方法 int read() // 读取一个字节,以 int 形式返回 intread(byte[] b) // 读取最多数组长度个字节并存入该数组,返回实际读取字节 void write(int d) // 写出一个字节 voidwrite(byte[] d) // 将给定字节数组中的所有字节全部写出 void w