image.png
image.pngimage.png

File类概述

  • File类在包java.io.File下,代表操作系统的文件对象【文件,文件夹】
  • File类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建【文件夹】等功能

    File类创建对象

    image.png
    image.pngimage.png
  1. public class fileObject {
  2. public static void main(String[] args) {
  3. //创建File对象
  4. //路径写法 \\避免 \nXXXXXX出现二义性,也可以直接写/
  5. File f = new File("C:\\Users\\周海权\\Desktop\\e4b1b8e2dffe426b8cf6340cd066f37.jpg");
  6. long length = f.length();
  7. System.out.println(length);
  8. //2.File创建对象既支持绝对路径也支持相对路径
  9. //相对路径一般定义模块里面的文件,相对路径相对与工程下
  10. File f1 = new File("Jave-SE\\JDBC\\src\\data.txt");
  11. boolean exists = f1.exists();
  12. System.out.println(exists);
  13. }
  14. }

image.png

File类常用API

判断文件类型,获取文件信息

image.png

  1. //创建File对象
  2. //路径写法 \\避免 \nXXXXXX出现二义性,也可以直接写/
  3. File f = new File("C:\\Users\\周海权\\Desktop\\e4b1b8e2dffe426b8cf6340cd066f37.jpg");
  4. //a,获取文件的绝对路径
  5. System.out.println(f.getAbsolutePath());
  6. //获取文件定义时使用的路径
  7. System.out.println(f.getPath());
  8. //获取文件的名称带后缀
  9. System.out.println(f.getName());
  10. //获取文件的大小字节个数
  11. System.out.println(f.length());
  12. //获取文件的最后修改时间
  13. long time = f.lastModified();
  14. System.out.println("最后修改的时间"+new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));

image.png

创建文件、删除文件功能

image.png

遍历文件夹

image.png

  1. //创建一个空的文件
  2. File f3 = new File("Jave-SE\\JDBC\\src\\data2.txt");
  3. boolean newFile = f3.createNewFile();
  4. System.out.println(newFile);
  5. //创建一级目录
  6. File f4 = new File("D:\\java基础\\aaa");
  7. System.out.println(f4.mkdir());
  8. //创建多级目录
  9. File f5 = new File("D:\\java基础\\bbb\\ccc\\ddd");
  10. System.out.println(f5.mkdirs());
  11. //删除文件或者文件夹
  12. System.out.println(f5.delete());
  13. //只能删除空的文件夹

字符集

常见字符集介绍

字符集基础知识

  • 计算机底层是不可以直接存储字符的。计算机中底层只能存储二进制(0,1)
  • 二进制是可以转换成十进制的

image.png
结论:计算机底层可以表示十进制编号。计算机可以给人类字符进行编号存储,这套编号规则就是字符集。

ASCII字符集

  • ASCII:包括了数字、英文、符号
  • ASCII使用一个字节存储一个字符,一个字节是8位,总共可以表示128个字符信息,对于英文,数字来说够用。

01100001=97=>a
01100010=98=>b
GBK
windows系统默认的码表。兼容ASCII码表,也包含几万个汉字,并支持繁体汉字以及部分日韩文字。
注意:GBK知中国的码表,一个中文以两个字节的形式存储。但不包含世界上所有国家的文字。
2^16位=35536基本够用
Unicode码表:

  • unicode(又称统一码,万国码、单一码)是计算机科学领域里的一项业界字符编码标准。
  • 容纳世界上大多数国家的所有常见文字和符号
  • 由于Unicode先通过UTF-8,UTF-16以及UTF-32的编码成二进制后在存储到计算机,其中最常见的是UTF-8
  • image.png

    字符集的编码、解码操作

    image.png
    为什么编码解码就能直到3个字节就是汉字呢,那是因为负数开头就是汉字,可以直接检测到。

总结:
1.字符串常见的字符串底层组成是什么样的?

  • 英文和数字等在任何国家的字符集中都占1个字节
  • GBK字符中一个中文字符占2个字节
  • UTF-8编码中中文占3个字节

2.编码前的字符集和解码好的字符集有什么要求?
必须一致,否则会出现中文乱码
英文和数字不会乱码

  1. public class codeencode {
  2. public static void main(String[] args) {
  3. String str = "abc哈哈哈";
  4. //编码成数字 byte就是代表字节
  5. byte[] bytes = str.getBytes();
  6. String a = new String(bytes);
  7. for (byte b:bytes)
  8. System.out.println(b);
  9. System.out.println(a);
  10. }
  11. }

image.png

IO流概述

IO流也称为输入、输出流,就是用来读写数据的
image.png
image.png
IO流的分类
image.png
image.png
image.png
image.png

字节流的使用

image.png

image.png

  1. public static void main(String[] args) throws IOException {
  2. //1.创建一个文件字节输入流管道与源文件相通
  3. InputStream is = new FileInputStream("JavaSE/src/data.txt");
  4. //读取一个字节返回(每次读取一滴水)
  5. int b1 = is.read();
  6. System.out.println((char) b1);
  7. int b2 = is.read();
  8. System.out.println((char)b2);
  9. int b3 = is.read();
  10. System.out.println((char) b3);
  11. int b4 = is.read();
  12. System.out.println(b4);//读取完毕返回-1
  13. int b;
  14. while ((b=is.read())!=-1){
  15. System.out.print((char)b);
  16. }
  17. //一次只能读取一个字节不能读取中文,有乱码
  18. }

image.pngimage.png

文件字节输入流:一次读取一个字节数组

image.png
image.png

  1. public static void main(String[] args) throws IOException {
  2. //1.创建一个文件字节输入流管道与源文件接通
  3. InputStream is = new FileInputStream("JavaSE/src/data2.txt");
  4. //2.一次读取三个字节
  5. byte[] buffer = new byte[3];
  6. int len;
  7. while ((len = is.read(buffer))!=-1){
  8. //读到buffer里面了
  9. //读字节是采用追加的方式进行的比如abcab,一次性读3个字节第一次buffer abc 都二次的结果就是abc,而不是ab,所以解码的时候需要指定长度
  10. String str = new String(buffer,0,len);
  11. //解码
  12. System.out.print(str);
  13. }
  14. }

思考:如何使用字节输入流读取中文内容输出不乱码呢?

  • 定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。

直接把文件数据读取到一个字节数组可以避免乱码,是否存在问题?

  • 如果文件过大,字节数组可能引起内存溢出。

image.png
image.png

字节输出流
image.png
image.png
image.png
image.png
文件拷贝
image.png
image.png
image.png

资源释放的方式

image.png

try-catch-final

image.png
image.png

try-with-resource

image.png
image.png
总结
image.png

字符流的使用

文件字符输入流-一次读取一个字符

image.png
image.png
image.png

  1. //目标每次读取一个字符
  2. //1.创建一个字符输入流管道,与原文件接通
  3. Reader fr = null;
  4. try {
  5. fr = new FileReader("JavaSE/src/data.txt");
  6. int len ;
  7. while ((len=fr.read())!=-1){
  8. System.out.print((char) len);
  9. }
  10. }catch (Exception e){
  11. e.printStackTrace();
  12. }finally {
  13. fr.close();
  14. }
  15. }
  16. }

image.png

文件字符输入流-一次读取一个字符数组

image.png
image.png

  1. //目标每次读取一个字符
  2. //1.创建一个字符输入流管道,与原文件接通
  3. Reader fr = null;
  4. try {
  5. fr = new FileReader("JavaSE/src/data.txt");
  6. char[] srt = new char[5];
  7. int len ;
  8. //读取一个字符返回,如果没有就返回-1
  9. while ((len=fr.read(srt))!=-1){
  10. System.out.print(srt);
  11. }
  12. }catch (Exception e){
  13. e.printStackTrace();
  14. }finally {
  15. fr.close();
  16. }
  17. }
  18. }

image.png

文件字符输出流

image.png

  1. Writer rw = null;
  2. try {
  3. rw = new FileWriter("JavaSE/src/out05.txt",true);
  4. rw.write("我爱你中国");
  5. rw.write("你好中国");
  6. }catch (Exception e){
  7. e.printStackTrace();
  8. }finally {
  9. rw.close();
  10. }
  11. }

image.png

缓冲流

缓冲流概述image.png

image.png

image.png image.png

字节缓冲流

image.png
image.png
image.png
image.png

字符缓冲流

image.png
image.png
image.png

转换流

1.之前我们使用字符流读取中文是否有乱码?
没有的,因为代码编码和文件编码都是UTF-8
2.如果代码编码和文件编码不一致,使用字符流直接读取还能不乱吗?
会乱码
文件编码和读取的编码必须一致才不会乱码。
如何解决呢?

  • 使用字符输入转换流
  • 可以提取文件GBK的原始字节流,原始字节不会存在问题
  • 然后把字节流以指定编码转换成字符输入流,这样字符输入流中的字符就不会乱码了

image.png
image.png
image.png

字符输出转换流

image.png

image.png
image.png

序列化对象

image.png
image.png
image.png

image.png
image.png
image.png
image.pngimage.png

打印流

PrintStream、PrintWriter


image.png
image.png
image.png
image.png
image.png

输出语句的重定向

image.png

补充知识:Properties

image.png
image.png
image.png
image.png

image.png
image.png