day18 IO流01 File类 字符编码 IO流操作(四大基流,字节流,字符流)-> java基础大神进阶学习总结之19天(知识点全面覆盖,细节)

java基础总结

day18 IO流01 File类 字符编码 IO流操作(四大基流,字节流,字符流)

File类

  • ​ File课理解为文件和文件夹(目录),用于表示磁盘中某个文件或文件夹的路径。该类包含了文件的创建、删除、重命名、判断是否存在等方法。
  • ​ Windows: 默认情况下是不区分大小写的,使用”\”来分割目录路径。但是在Java中一个”\”表示转义,所以在Windows系统中就得使用两个”\\”。

操作File常见方法:

  • String getName():获取文件名称

  • String getPath():获取文件路径

  • String getAbsolutePath():获取绝对路径

  • File getParentFile():获取上级目录文件

  • boolean exists():判断文件是否存在

  • boolean isFile() :是否是文件

  • boolean isDirectory():判断是否是目录

  • boolean delete() :删除文件

  • boolean mkdirs():创建当前目录和上级目录

  • File[] listFiles() :列出所有文件对象

字符编码

发展:

ASCII编码表(英文符号有限)

-> GB2312编码表(使用两个字节一起来表示一个汉字)

-> Unicode是国际统一编码(某一个字符在全世界任何地方都是固定的)

常见的字符集

  • ASCII:占一个字节,只能包含128个符号。不能表示汉字。

  • ISO-8859-1:也称之为latin-1,占一个字节,收录西欧语言,不能表示汉字。

  • GB2312/GBK/GB18030:占两个字节,支持中文。

  • ANSI:占两个字节,在简体中文的操作系统中ANSI 就指的是 GBK。

  • UTF-8:是一种针对Unicode的可变长度字符编码,是Unicode的实现方式之一,支持中文。在开发中建议使用。

  • UTF-8 BOM:是微软搞出来的一种编码,不要使用。

存储字母、数字、汉字:

​ 存储字母和数字无论是什么字符集都占1个字节.

​ 存储汉字,GBK家族占两个字节,UTF-8家族占3个字节。

​ 不能使用单字节的字符集(ASCII、ISO-8859-1)来存储中文,否则会乱码。

解码与编码:

注意:一定要保证编码和解码的字符相同,才能正确解码出信息。

经典案例:在表单中填写中文,为什么在服务端看到的是乱码问题。

情景分析,比如浏览器使用UTF-8编码,服务器使用ISO-8859-1编码。

此时编码和解码的字符类型不同,那么乱码就出现了。

先来分析乱码产生的原因:

在这里插入图片描述

//编码解码龙哥
//模拟国外服务器用的编码,没有收购中文,导致乱码
String str = "龙哥";
//先解码为二进制
byte[] bytes = str.getBytes("UTF-8");
System.out.println(Arrays.toString(bytes));
//在将二进制转为文字
String s = new String(bytes, "ISO-8859-1");
System.out.println(s);


//解决问题
//将国外浏览器解码后的文字,通过编码转为二进制,在通过utf-8解码成中文
System.out.println("========");
//将文字转为二进制
byte[] bytes1 = s.getBytes("ISO-8859-1");
String s1 = new String(bytes1, "UTF-8");
System.out.println(Arrays.toString(bytes1));
System.out.println(s1);

字节流的IO操作

流向 字节流(单位是字节) 字符流(单位是字符)
输入流 InputStream Reader
输出流 OutputStream Writer

字节输入流FileInputStream,用于读取文件 字节输入流(程序) –-读取数据---- 文件

字节输出流FileOutputStream,用于写文件 字节输出流 (程序) ----写入信息 ----- 文件

    需求:使用文件字节输入流进行输出操作
    //作业目的:掌握输出操作
    //文件源
   File file = new File("src\\IO流01\\第四题\\a.txt");
   //拿到文件--》数据,将数据进行输入到程序中,输入流
   //管道
   //将文件源里输入到程序里,通过管道文件输入流
   InputStream inputStream = new FileInputStream(file);
   System.out.println((char) inputStream.read());
   byte[] buffer = new byte[10]; //每次十个字节
   int read = inputStream.read(buffer);
   System.out.println(read);
   System.out.println(Arrays.toString(buffer));
   System.out.println(new String(buffer));
        需求:使用文件字节输入流进行输入操作
        /* 作业目的:掌握输入操作*/
        //文件源
        File file = new File("src\\IO流01\\第四题\\a.txt");
        //管道
        //输出操作,将程序里的数据写入文件源,通过管道
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        byte[] bytes = new byte[]{97,96};
        fileOutputStream.write(65);
        fileOutputStream.write(bytes);
        String str = "你好啊";
        fileOutputStream.write(str.getBytes());
        fileOutputStream.close();

字符流的IO操作

字符输入流Reader,用于读取文件 字节输入流(程序) –-读取数据---- 文件

字符输出流Writer,用于写文件 字节输出流 (程序) ----写入信息 ----- 文件

        需求:演示字符文件输入流(FileReader)-输入操作
       /*作业目的:掌握字符文件输入流(FileReader)-输入操作*/
       //演示字符文件输入流
       //拿到源头
       File file = new File("src\\IO流01\\第四题\\a.txt");
       //通过源头获取通道
       FileReader fileReader = new FileReader(file);
       char[] chars = new  char[5];
       int len = fileReader.read(chars);
       System.out.println(len);
       System.out.println(Arrays.toString(chars));
       int len2 = fileReader.read(chars);
       System.out.println(len);
       System.out.println(new String(chars,0,1));
       fileReader.close();
           需求:演示字符文件输出流(FileWriter)-输出操作
        //作业目的:掌握字符文件输出流(FileWriter)-输出操作
        File file = new File("src\\IO流01\\第四题\\a.txt");
        FileWriter fileWriter = new FileWriter(file);
        fileWriter.write(97);
        fileWriter.write("牛逼");
        fileWriter.write(new char[]{'l','e'});
        fileWriter.close();

重点注意:

  • ​ 读取字符或者字符的时候的时候,拿到容器里面的东西
  • 字节数组或者字符数组,为容器,可以用来被读取,也可以拿取数据
  • ​ byte[] b =new byte[1024], new String(b,0,len) ,len是每次读取长度
  • ​ char[] c =new char[1024],new String(c,0,len),len是每次读取长度

猜你喜欢

转载自blog.csdn.net/weixin_41340417/article/details/107890635