1. 课前回顾:
  2. 1.Map:双列集合的顶级接口
  3. 2.HashMap:
  4. a.特点:
  5. 无序,无索引,key唯一,哈希表
  6. b.方法:
  7. put:添加键值对
  8. get:根据key获取value
  9. containsKey:判断是否包含在指定的key
  10. remove:根据key删除value
  11. keySet:获取所有的key存到set集合中
  12. entrySet:获取键值对象(Map.Entry)对存到set集合中
  13. values():获取所有的value
  14. 3.HashMap的子类:LinkedHashMap:有序,无索引,key唯一,哈希表+链表
  15. 4.TreeSet:
  16. a.特点:可以给元素排序 无索引,元素唯一,红黑树
  17. b.构造:TreeSet():给元素进行自然排序
  18. TreeSet(Comparator c)->给元素按照指定的规则排序
  19. 5.TreeMap:
  20. a.可以给key排序 无索引,key唯一,红黑树
  21. b.构造:
  22. TreeMap()-> key做自然排序
  23. TreeMap(Comparator c)->给key按照指定的排序规则排序
  24. 6.HashTableVector
  25. HashTable:
  26. a.特点:线程安全,不能存储nullnull减,哈希表结构,无索引,key唯一,无序
  27. Vector:
  28. a.特点:线程安全,数组结构
  29. 7.Properties属性集:
  30. 特点:
  31. a.是HashTable的子类
  32. b.无序
  33. c.key唯一
  34. d.keyvalue必须是String
  35. e.线程安全,无索引
  36. f.可以和IO结合使用的集合
  37. 方法:
  38. setProperty(k,v)存储keyvalue
  39. getProperty(k)根据key获取value
  40. stringPropertyNames()->获取所有的key
  41. load(输入流对象)->将流中的数据加载到Poperties集合中
  42. 今日重点:
  43. 所有

第一章.File类

一.File类

  1. IO流之前需要知道的常识:
  2. 1.File:代表的是文件
  3. 2.Directory:目录,文件夹
  4. 3.Path:路径
  5. 4.Input:输入
  6. 5.Output:输出
  7. 6.路径分隔符:
  8. 路径是由什么组成的:盘符 文件夹名字 文件名组成
  9. \:代表的是路径中文件夹和文件夹 文件夹和文件之间的分隔符
  10. windows: \ E:\Idea\io
  11. linux : / E:/Idea/io
  12. ; 代表的是路径和其他路经之间的分隔符
  13. 7.问题:
  14. E:\Idea\io\1.jpg
  15. 1.jpg的父路径是谁:E:\Idea\io\
  16. 8.问题:
  17. 名字为1.jpg的一定是图片吗?不一定
  18. 要想判断是否为文件或者文件夹,不要看名字,要看类型
  1. File类:文件和目录路径名的抽象表示形式
  2. 说白了:可以利用File的构造,传递文件或者文件夹的路径,表示一个文件或者文件夹,然后就可以调用File类中的方法去操作表示的文件或者文件夹

二.File的静态成员

  1. static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
  2. static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
  1. public class Demo01File {
  2. public static void main(String[] args) {
  3. // static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
  4. String pathSeparator = File.pathSeparator;
  5. System.out.println(pathSeparator);// ;
  6. // static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
  7. String separator = File.separator;
  8. System.out.println(separator);// \
  9. System.out.println("=======在java中如何表示路径=======");
  10. /*
  11. 在java中 \\ 代表的是 一个 \
  12. */
  13. String path = "E:\\Idea\\io\\1.jpg";
  14. System.out.println(path);
  15. }
  16. }

经验值:如果让代码中的路径更通用

注意: 写代码 做到 一次编写,到处运行

  1. public class Demo02File {
  2. public static void main(String[] args) {
  3. String path = "E:\\Idea\\io\\1.jpg";
  4. System.out.println(path);
  5. System.out.println("=====================");
  6. String path1 = "E:"+File.separator+"Idea"+File.separator+"io"+File.separator+"1.jpg";
  7. System.out.println(path1);
  8. }
  9. }

三.File的构造方法

  1. File(String pathname):根据String表示的路径创建File对象
  2. pathname:表示一个文件或者文件夹的路径
  3. File(String parent, String child) :根据路径创建File对象
  4. parent:父路径
  5. child:子路径
  6. File(File parent, String child) :根据路径创建File对象
  7. parent:是一个File对象,表示的是父路径
  8. child:子路径
  1. public class Demo03FileConstructor {
  2. public static void main(String[] args) {
  3. /*
  4. File(String pathname):根据String表示的路径创建File对象
  5. pathname:表示一个文件或者文件夹的路径
  6. */
  7. File file = new File("E:\\Idea\\io\\1.jpg");
  8. System.out.println(file);
  9. /*
  10. File(String parent, String child) :根据路径创建File对象
  11. parent:父路径
  12. child:子路径
  13. */
  14. File file1 = new File("E:\\Idea\\io","1.jpg");
  15. System.out.println(file1);
  16. /*
  17. File(File parent, String child) :根据路径创建File对象
  18. parent:是一个File对象,表示的是父路径
  19. child:子路径
  20. */
  21. File parent = new File("E:\\Idea\\io");
  22. File file2 = new File(parent, "1.jpg");
  23. System.out.println(file2);
  24. System.out.println("========================");
  25. /*
  26. 我们用File表示的路径可以不存在
  27. 但是没有意义
  28. */
  29. File file3 = new File("E:\\Idea\\io1");
  30. System.out.println(file3);
  31. }
  32. }

注:

我们用File表示的路径可以不存在,但是没有意义

四.File的获取方法

  1. - public String getAbsolutePath() :返回此File的绝对路径名字符串。->带盘符的路径
  2. - public String getPath() :将此File转换为路径名字符串。-> 获取的是File的封装路径
  3. new File的时候,传递的是啥路径,getPath方法就获取的是啥路径
  4. - public String getName() :返回由此File表示的文件或目录的名称。
  5. - public long length() :返回由此File表示的文件的长度。->文件的字节数
  6. - public File getParentFile()返回由此File表示的文件或目录的父目录,如果没有父目录,返回null
  1. public class Demo04FileGet {
  2. public static void main(String[] args) {
  3. File file = new File("IO\\1.txt");
  4. // - public String getAbsolutePath() :返回此File的绝对路径名字符串。->带盘符的路径
  5. System.out.println("文件的绝对路径为:"+file.getAbsolutePath());
  6. /*
  7. - public String getPath() :将此File转换为路径名字符串。-> 获取的是File的封装路径
  8. new File的时候,传递的是啥路径,getPath方法就获取的是啥路径
  9. */
  10. System.out.println("封装路径为:"+file.getPath());
  11. // - public String getName() :返回由此File表示的文件或目录的名称。
  12. System.out.println("文件或者文件夹的名称为:"+file.getName());
  13. // - public long length() :返回由此File表示的文件的长度。->文件的字节数
  14. File file1 = new File("E:\\Idea\\io\\io.txt");
  15. System.out.println("文件的字节数为:"+file1.length());
  16. // - public File getParentFile()返回由此File表示的文件或目录的父目录,如果没有父目录,返回null。
  17. System.out.println("1.txt:"+file.getParentFile());
  18. }
  19. }

五.相对路径和绝对路径

  1. 绝对路径:从盘符开始写的路径
  2. 什么时候使用:如果是跨盘符访问,就可以写绝对路径
  3. 相对路径:在idea中相对路径咋写
  4. 规则:
  5. 找参照路径,哪个路径为参照路径,哪个路径就可以省略不写,剩下的就是在代码中相对路径的写法
  6. idea中参照路径是:当前project的绝对路径
  7. 比如:找day17下面io文件夹下面的a.txt的相对路径
  8. a.txt的绝对路径找出来:E:\Idea\idea2019\workspace\210521_bigdata\day17\io\a.txt
  9. 参照路径是谁:E:\Idea\idea2019\workspace\210521_bigdata
  10. 参数路径可以直接不写了,剩下的就是相对路径写法:day17\io\a.txt
  11. 总结: idea中的写相对路径,是从当前的模块名开始写的
  12. 注意: 如果不写模块名,默认位置在当前的project
  1. public class Demo05Path {
  2. public static void main(String[] args)throws Exception {
  3. File file = new File("day17\\io\\a.txt");
  4. System.out.println(file.getAbsolutePath());
  5. System.out.println(file.createNewFile());//在指定模块位置创建
  6. File file1 = new File("b.txt");
  7. System.out.println(file1.getAbsolutePath());
  8. System.out.println(file1.createNewFile());//在当前project下创建
  9. }
  10. }

六.File的创建方法

  1. public boolean createNewFile() :创建新文件
  2. 如果要创建的文件已经存在:则创建失败,返回false
  3. 如果要创建的文件不存在:则创建成功,返回true
  4. public boolean mkdirs() :创建文件夹,可以创建单级文件夹,还可以创建多级文件夹
  5. 如果要创建的文件夹已经存在:则创建失败,返回false
  6. 如果要创建的文件夹不存在:则创建成功,返回true
  1. public class Demo06Create {
  2. public static void main(String[] args)throws IOException {
  3. File file = new File("E:\\Idea\\io\\io.txt");
  4. //File file = new File("E:\\Idea\\io\\io");
  5. /*
  6. public boolean createNewFile() :创建新文件
  7. 如果要创建的文件已经存在:则创建失败,返回false
  8. 如果要创建的文件不存在:则创建成功,返回true
  9. */
  10. System.out.println("文件是否创建成功:"+file.createNewFile());
  11. /*
  12. public boolean mkdirs() :创建文件夹,可以创建单级文件夹,还可以创建多级文件夹
  13. 如果要创建的文件夹已经存在:则创建失败,返回false
  14. 如果要创建的文件夹不存在:则创建成功,返回true
  15. */
  16. File file1 = new File("E:\\Idea\\io\\aa");
  17. //File file1 = new File("E:\\Idea\\io\\aa\\bb\\cc");
  18. //File file1 = new File("E:\\Idea\\io\\bb.txt");
  19. System.out.println("文件夹是否创建成功:"+file1.mkdirs());
  20. }
  21. }

七.File类的删除方法

  1. boolean delete() -> 删除文件夹或者文件 -> 删除的时候要注意:不走回收站
  2. 如果删除文件夹的话,此文件夹必须是空文件夹
  1. public class Demo07Delete {
  2. public static void main(String[] args) {
  3. File file = new File("E:\\Idea\\io\\io.txt");
  4. System.out.println("文件是否删除成功:"+file.delete());
  5. System.out.println("===================");
  6. File file1 = new File("E:\\Idea\\io\\aa");
  7. System.out.println("文件夹是否删除成功:"+file1.delete());
  8. }
  9. }

八.File类的判断方法

  1. boolean exists() -> 判断指定的文件或者文件夹是否存在
  2. boolean isFile() -> 判断是否为文件
  3. boolean isDirectory() ->判断是否为文件夹
  1. public class Demo08Is {
  2. public static void main(String[] args) {
  3. File file = new File("E:\\Idea\\io\\aa");
  4. //boolean exists() -> 判断指定的文件或者文件夹是否存在
  5. System.out.println("文件或者文件夹是否存在:"+file.exists());
  6. //boolean isFile() -> 判断是否为文件
  7. System.out.println("是否为文件:"+file.isFile());
  8. //boolean isDirectory() ->判断是否为文件夹
  9. System.out.println("是否为文件夹:"+file.isDirectory());
  10. }
  11. }

九.File的遍历方法

  1. String[] list() ->获取的是文件或者文件夹,只能遍历一级文件夹
  2. File[] listFiles() ->获取指定文件夹下的文件或者子文件夹,返回的是File数组 ,只能遍历一级文件夹(要是用,就用listFiles())
  1. public class Demo09ListFile {
  2. public static void main(String[] args) {
  3. //String[] list() ->获取的是文件或者文件夹,只能遍历一级文件夹
  4. File file = new File("E:\\Idea\\io");
  5. /* String[] list = file.list();
  6. for (String s : list) {
  7. System.out.println(s);
  8. }*/
  9. /*
  10. File[] listFiles() ->获取指定文件夹下的文件或者子文件夹,返回的是File数组 ,只能遍历一级文件夹
  11. listFiles()实现原理:
  12. 先调用list方法,获取指定的子文件夹或者文件,
  13. 将获取出来的子文件夹或者文件存放到File[]数组中
  14. */
  15. File[] files = file.listFiles();
  16. for (File file1 : files) {
  17. System.out.println(file1);
  18. }
  19. }
  20. }

练习:遍历指定文件夹下所有的.jpg文件

  1. 步骤:
  2. 1.创建File对象,传递要遍历的文件夹路径
  3. 2.调用listFiles()方法,对指定的文件夹进行遍历,获取下面的文件或者子文件夹
  4. 3.遍历File[]数组,把每一个子文件夹和文件的File对象获取出来
  5. 4.调用getName(),将文件或者文件夹名字获取出来
  6. 5.判断,如果名字是以.jpg结尾的,就输出
  1. public class Demo10ListFiles {
  2. public static void main(String[] args) {
  3. //1.创建File对象,传递要遍历的文件夹路径
  4. File file = new File("E:\\Idea\\io");
  5. method(file);
  6. }
  7. private static void method(File file) {
  8. //2.调用listFiles()方法,对指定的文件夹进行遍历,获取下面的文件或者子文件夹
  9. File[] files = file.listFiles();
  10. //3.遍历File[]数组,把每一个子文件夹和文件的File对象获取出来
  11. for (File newFile : files) {
  12. if (newFile.isFile()){
  13. //4.调用getName(),将文件或者文件夹名字获取出来
  14. String name = newFile.getName();
  15. //5.判断,如果名字是以.jpg结尾的,就输出
  16. if (name.endsWith(".jpg")){
  17. System.out.println(name);
  18. }
  19. }else{
  20. //递归调用
  21. method(newFile);
  22. }
  23. }
  24. }
  25. }

第二章.字节流

一.IO流介绍以及输入输出以及流向的介绍

  1. 1.IO
  2. I:Input 输入
  3. O:Output 输出
  4. 2.概述:将数据从一个设备上传输到另外一个设备上的技术
  5. 3.为什么学IO流:
  6. 如果我们想将数据永久的保存起来,我们可以存到硬盘上,我们可以利用IO将数据永久地保存到硬盘上
  7. 想用数据的时候,还可以从硬盘上将数据读出来
  8. 4.IO主要作用:
  9. 数据传输

二.IO流的流向

  1. I:Input 输入
  2. 将数据从硬盘的文件中读到内存中
  3. O:Output 输出
  4. 从内存出发,利用代码将数据写到硬盘的文件中

day17[File类_IO流] - 图1

三.IO流分类

  1. 1.字节流:一切皆字节(图片,音乐,视频,文本等都是字节组成)->万能流
  2. 字节输出流:父类-> OutputStream(抽象类)
  3. 字节输入流:父类-> InputStream(抽象类)
  4. 2.字符流:将数据看做是一个一个的字符操作,专门操作文本文档
  5. 什么叫文本文档:用记事本或者一些个高级记事本打开,人能看懂的内容,就叫做文本文档
  6. .txt .html .css .java
  7. .doc(不是)
  8. 字符输出流:父类-> Writer(抽象类)
  9. 字符输入流:父类-> Reader(抽象类)
  1. InputStream OutputStream Writer Reader:都是抽象类
  2. 所以我们学要学他们的子类
  3. FileOutputStream
  4. FileInputStream
  5. FileWriter
  6. FileReader
  7. BufferedInputStream
  8. BufferedOutputStream
  9. BufferedWriter
  10. BufferedReader
  11. OutputStreamWriter
  12. InputStreamReader
  13. ObjectInputStream
  14. ObjectOutputStream
  15. PrintStream

四.OutputStream中子类[FileOutputStream]的介绍以及方法的简单介绍

  1. 1.OutputStream:(字节输出流) 抽象类
  2. 2.子类:FileOutputStream(字节输出流)
  3. 3.构造:
  4. FileOutputStream(File file)->根据文件的路径创建FileOutputStream对象
  5. FileOutputStream(String path)->根据文件的路径创建FileOutputStream对象
  6. 4.注意:
  7. 输出流可以自动创建不存在的文件(但是不能创建文件夹昂)
  8. 5.方法:
  9. void write(int b) -> 一次写一个字节
  10. void write(byte[] b) -> 一次写一个字节数组
  11. void write(byte[] b, int off, int len) -> 一次写一个字节数组一部分
  12. b:要写的字节数组
  13. off:从数组中的哪个索引开始写
  14. len:写多少个字节
  15. void close() -> 关闭流对象
  1. public class Demo01FileOutputStream {
  2. public static void main(String[] args) throws Exception {
  3. FileOutputStream fos = new FileOutputStream("day17\\io\\a.txt");
  4. // method(fos);
  5. // method01(fos);
  6. method02(fos);
  7. }
  8. /*
  9. void write(byte[] b, int off, int len) -> 一次写一个字节数组一部分
  10. b:要写的字节数组
  11. off:从数组中的哪个索引开始写
  12. len:写多少个字节
  13. */
  14. private static void method02(FileOutputStream fos) throws IOException {
  15. byte[] bytes = {97,98,99,100,101,102};
  16. fos.write(bytes,0,2);
  17. fos.close();
  18. }
  19. /*
  20. void write(byte[] b) -> 一次写一个字节数组
  21. */
  22. private static void method01(FileOutputStream fos) throws IOException {
  23. byte[] bytes = {97,98,99,100};
  24. fos.write(bytes);
  25. fos.close();
  26. }
  27. /*
  28. void write(int b) -> 一次写一个字节
  29. */
  30. private static void method(FileOutputStream fos)throws IOException {
  31. fos.write(97);
  32. //关闭流对象
  33. fos.close();
  34. }
  35. }
  1. public class Demo02FileOutputStream {
  2. public static void main(String[] args) throws Exception {
  3. FileOutputStream fos = new FileOutputStream("day17\\io\\b.txt");
  4. //byte[] bytes = "abcd".getBytes();//[97,98,99,100]
  5. //byte[] bytes = {97,98,99,100};
  6. //fos.write(bytes);
  7. fos.write("你好".getBytes());
  8. fos.close();
  9. }
  10. }

day17[File类_IO流] - 图2

五.FileOutputStream的续写和换行

  1. 续写:
  2. FileOutputStream(String path,boolean append)->创建对象,并有续写效果
  3. append:false -> 没有续写效果,每次运行都会创建新的文件覆盖老文件
  4. append:true->没有新文件创建,直接续写追加内容
  5. 换行:
  6. windows: \r\n
  7. linux: \n
  8. os: \r
  1. public class Demo03FileOutputStream {
  2. public static void main(String[] args) throws Exception {
  3. FileOutputStream fos = new FileOutputStream("day17\\io\\c.txt",true);
  4. fos.write("窗前明月光".getBytes());
  5. fos.write("\r\n".getBytes());
  6. fos.write("疑是地上霜".getBytes());
  7. fos.write("\r\n".getBytes());
  8. fos.write("举头望明月".getBytes());
  9. fos.write("\r\n".getBytes());
  10. fos.write("低头思故乡".getBytes());
  11. fos.write("\r\n".getBytes());
  12. fos.write("离离原上草\r\n".getBytes());
  13. fos.write("一岁一枯荣\r\n".getBytes());
  14. fos.write("野火烧不尽\r\n".getBytes());
  15. fos.write("春风吹又生\r\n".getBytes());
  16. fos.close();
  17. }
  18. }