笔记:java流,io,file,字节字符输入输出流理解

1.file类

文件或目录都被抽象成一个file实例;

File  file = new File(“c:\\demo.txt”); //表示文件
File  dir = new File(“c:\\dir”); 	 //表示目录

2.什么是流?

流是一组有序,有起点和终点的字节的数据序列。包括输入流和输出流.

是指一连串流动的字符,是以先进先出方式发送信息的通道。

3.分类

  • 字节流:8位
  • 字符流:字符,不同编码位数不一样;

4.常用字符字节流

在这里插入图片描述

5.BufferedReader与BufferedWriter读写文本文件

文本缓冲流采用的装饰器模式进行设计,它包装了一个字符流同时内部提供一个缓冲区,这样可以使读写有更好性能。

6.位(bit)、字节(byte)、字符、编码之间的关系

1.位:bit

  • 数据存储的最小单位,每个二进制数字0和1就是1个位。

2.字节:byte

  • 8个位构成一个字节,即:1 byte(字节) = 8 bit(位);

3.字符:

  • a、A、中、+、*、の…均表示一个字符;
  • 一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节;
  • 一般 gbk 编码下,一个汉字 字符 占用 2 个 字节;

4.编码:

  • 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
  • 通俗的说:编码就是按照规则对字符进行翻译成对应的二进制数,在计算器中运行存储,用户看的时候(比如浏览器),在用对应的编码解析出来用户能看懂的;

7.字节输入Input,OutputStream输出流;

  • OutputStream是抽象类,是表示输出字节流的所有超类,操作的数据都是字节,定义了字节输出流的基本共性和方法;
  • InputStream的作用是将文件中的数据读入到内存中

8.字符流Reader和Writer

  • Reader是抽象类,Reader的直接子类有InputStreamReader,它的直接子类有FileReader.这表明Reader是字符输入流的祖宗类。
  • Writer是抽象类,Writer的直接子类有OutputStreamWriter,它的直接子类有FileWriter.这表明Writer字符输出流的子类。

9.字符流和字节流的区别

  • 字节流是以字节为单位传递的,因为所有电脑上的东西都是二进制字节,因此可以传递任何数据,比如图片,各种字符等。字节流只能写入字节,读取字节
  • 字节流FileInputStream读取方法read()是一个字节一个字节的读取,Write()方法是一个字节一个字节的写入
  • 字符流是根据字符所占字节大小而决定读取多少字节的
  • 用字符流,去读取,字符流会根据默认编码一次性的读取一个字符,即若是utf-8编码就会读取3字节,若是gbk编码就会一次读取2个字节

10.字符流读写文件:FileReader和FileWriter;

try ( FileReader fileReader = new FileReader("D:" + File.separator + "123.java");
     FileWriter fileWriter = new FileWriter("D:" + File.separator + "333.txt");
    ){
    int len=-1;
    char[] c=new char[1024];
    //读文件
    while ((len= fileReader.read(c))!=-1){
        String str = new String(c, 0, len); //三个属性:内容 开始 结束
        System.out.println(str);
        //文件写
        fileWriter.write(c,0,len);
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

11.字符缓冲流读文件,合并写;

//两个读合并写进一个
try (BufferedReader bufferedReader1 = new BufferedReader(new FileReader("E:\\122.txt"));
     BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:\\write.txt"));
     BufferedReader bufferedReader = new BufferedReader(new FileReader("E:\\123.txt"))
    ) {
    String line = null;
    //写入第一个
    while((line=bufferedReader.readLine())!=null){
        bufferedWriter.write(line);
        bufferedWriter.newLine();
    }
    //第二个
    while((line=bufferedReader1.readLine())!=null){
        bufferedWriter.write(line);
        bufferedWriter.newLine();
    }
} catch (IOException e) {
}

12.字符流–键盘输入写到文件

try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
     BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\321.txt"));
    ) {
    String str = null;
    while ((str=br.readLine())!=null) {
        System.out.println(str);
        if (str.equals("结束")) {
            System.out.println("写入已经结束");
            break;
        }
        bw.write(str);
        bw.newLine();
    }
} catch (IOException e) {
}

13.字节流读写文件

try (FileInputStream fileInputStream = new FileInputStream("E:\\a1.jpg");
     FileOutputStream fileOutputStream = new FileOutputStream("E:\\aaa.jpg")
    ) {
    //创建缓冲区
    byte[] bytes = new byte[1024 * 10];
    int len = -1;
    while ((len=fileInputStream.read(bytes))!=-1){
        fileOutputStream.write(bytes,0,len);
    }
} catch (IOException e) {
}

14.字节缓冲流读写文件input和output;

try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\cat.gif"));
     BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\333.gif"));
    ) {
    int len = -1;
    byte[] bytes = new byte[1024 * 2000];
    //read()读入缓冲区的字节总数,如果因为已经到达流末尾而没有更多的数据,则返回 -1
    while ((len = bis.read(bytes)) != -1) {
        //write()将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流
        System.out.println(1);
        bos.write(bytes,0,len);
    }
} catch (IOException e) {

}

15.字节缓冲流从网上下载图片,也可下载其他文件

        BufferedOutputStream bos = null;
        BufferedInputStream bis=null;
        try {
            //传入一个图片链接
            URL url = new URL("https://ss1.baidu.com/9.jpg");
            InputStream inputStream = url.openConnection().getInputStream();
            //图片字节流
            bis = new BufferedInputStream(inputStream);
            bos = new BufferedOutputStream(new FileOutputStream("E:\\copy1.jpg"));
            int ben=-1;
            byte[] bytes = new byte[1024 * 10];
            while ((ben = bis.read(bytes)) != -1) {
                bos.write(bytes,0,ben);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                bis.close();
                bos.flush();
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

16.字符流从网站下载文件

BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
    URL url = new URL("https://www.sogou.com/");
    InputStream inputStream = url.openConnection().getInputStream();
    //网站文本字符流  -----字节转字符
    bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
    bufferedWriter = new BufferedWriter(new FileWriter("E:\\copy.html"));

    String line = null;
    while ((line=bufferedReader.readLine()) != null) {
        System.out.println(line);
        bufferedWriter.write(line);
        bufferedWriter.newLine();
    }
} catch (IOException e) {
    e.printStackTrace();
}finally {
    try {
        bufferedReader.close();
        bufferedWriter.flush();
        bufferedWriter.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

17.BufferReader有read和readLine函数;

其他的只有read函数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值