课前回顾:1.Map:双列集合的顶级接口2.HashMap:a.特点:无序,无索引,key唯一,哈希表b.方法:put:添加键值对get:根据key获取valuecontainsKey:判断是否包含在指定的keyremove:根据key删除valuekeySet:获取所有的key存到set集合中entrySet:获取键值对象(Map.Entry)对存到set集合中values():获取所有的value3.HashMap的子类:LinkedHashMap:有序,无索引,key唯一,哈希表+链表4.TreeSet:a.特点:可以给元素排序 无索引,元素唯一,红黑树b.构造:TreeSet():给元素进行自然排序TreeSet(Comparator c)->给元素按照指定的规则排序5.TreeMap:a.可以给key排序 无索引,key唯一,红黑树b.构造:TreeMap()-> 给key做自然排序TreeMap(Comparator c)->给key按照指定的排序规则排序6.HashTable和VectorHashTable:a.特点:线程安全,不能存储null值null减,哈希表结构,无索引,key唯一,无序Vector:a.特点:线程安全,数组结构7.Properties属性集:特点:a.是HashTable的子类b.无序c.key唯一d.key和value必须是String的e.线程安全,无索引f.可以和IO结合使用的集合方法:setProperty(k,v)存储key和valuegetProperty(k)根据key获取valuestringPropertyNames()->获取所有的keyload(输入流对象)->将流中的数据加载到Poperties集合中今日重点:所有
第一章.File类
一.File类
学IO流之前需要知道的常识:1.File:代表的是文件2.Directory:目录,文件夹3.Path:路径4.Input:输入5.Output:输出6.路径分隔符:路径是由什么组成的:盘符 文件夹名字 文件名组成\:代表的是路径中文件夹和文件夹 文件夹和文件之间的分隔符windows: \ E:\Idea\iolinux : / E:/Idea/io; 代表的是路径和其他路经之间的分隔符7.问题:E:\Idea\io\1.jpg1.jpg的父路径是谁:E:\Idea\io\8.问题:名字为1.jpg的一定是图片吗?不一定要想判断是否为文件或者文件夹,不要看名字,要看类型
File类:文件和目录路径名的抽象表示形式说白了:可以利用File的构造,传递文件或者文件夹的路径,表示一个文件或者文件夹,然后就可以调用File类中的方法去操作表示的文件或者文件夹
二.File的静态成员
static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
public class Demo01File {public static void main(String[] args) {// static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。String pathSeparator = File.pathSeparator;System.out.println(pathSeparator);// ;// static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。String separator = File.separator;System.out.println(separator);// \System.out.println("=======在java中如何表示路径=======");/*在java中 \\ 代表的是 一个 \*/String path = "E:\\Idea\\io\\1.jpg";System.out.println(path);}}
经验值:如果让代码中的路径更通用
注意: 写代码 做到 一次编写,到处运行
public class Demo02File {public static void main(String[] args) {String path = "E:\\Idea\\io\\1.jpg";System.out.println(path);System.out.println("=====================");String path1 = "E:"+File.separator+"Idea"+File.separator+"io"+File.separator+"1.jpg";System.out.println(path1);}}
三.File的构造方法
File(String pathname):根据String表示的路径创建File对象pathname:表示一个文件或者文件夹的路径File(String parent, String child) :根据路径创建File对象parent:父路径child:子路径File(File parent, String child) :根据路径创建File对象parent:是一个File对象,表示的是父路径child:子路径
public class Demo03FileConstructor {public static void main(String[] args) {/*File(String pathname):根据String表示的路径创建File对象pathname:表示一个文件或者文件夹的路径*/File file = new File("E:\\Idea\\io\\1.jpg");System.out.println(file);/*File(String parent, String child) :根据路径创建File对象parent:父路径child:子路径*/File file1 = new File("E:\\Idea\\io","1.jpg");System.out.println(file1);/*File(File parent, String child) :根据路径创建File对象parent:是一个File对象,表示的是父路径child:子路径*/File parent = new File("E:\\Idea\\io");File file2 = new File(parent, "1.jpg");System.out.println(file2);System.out.println("========================");/*我们用File表示的路径可以不存在但是没有意义*/File file3 = new File("E:\\Idea\\io1");System.out.println(file3);}}
注:
我们用File表示的路径可以不存在,但是没有意义
四.File的获取方法
- public String getAbsolutePath() :返回此File的绝对路径名字符串。->带盘符的路径- public String getPath() :将此File转换为路径名字符串。-> 获取的是File的封装路径new File的时候,传递的是啥路径,getPath方法就获取的是啥路径- public String getName() :返回由此File表示的文件或目录的名称。- public long length() :返回由此File表示的文件的长度。->文件的字节数- public File getParentFile()返回由此File表示的文件或目录的父目录,如果没有父目录,返回null。
public class Demo04FileGet {public static void main(String[] args) {File file = new File("IO\\1.txt");// - public String getAbsolutePath() :返回此File的绝对路径名字符串。->带盘符的路径System.out.println("文件的绝对路径为:"+file.getAbsolutePath());/*- public String getPath() :将此File转换为路径名字符串。-> 获取的是File的封装路径new File的时候,传递的是啥路径,getPath方法就获取的是啥路径*/System.out.println("封装路径为:"+file.getPath());// - public String getName() :返回由此File表示的文件或目录的名称。System.out.println("文件或者文件夹的名称为:"+file.getName());// - public long length() :返回由此File表示的文件的长度。->文件的字节数File file1 = new File("E:\\Idea\\io\\io.txt");System.out.println("文件的字节数为:"+file1.length());// - public File getParentFile()返回由此File表示的文件或目录的父目录,如果没有父目录,返回null。System.out.println("1.txt:"+file.getParentFile());}}
五.相对路径和绝对路径
绝对路径:从盘符开始写的路径什么时候使用:如果是跨盘符访问,就可以写绝对路径相对路径:在idea中相对路径咋写规则:找参照路径,哪个路径为参照路径,哪个路径就可以省略不写,剩下的就是在代码中相对路径的写法在idea中参照路径是:当前project的绝对路径比如:找day17下面io文件夹下面的a.txt的相对路径a.txt的绝对路径找出来:E:\Idea\idea2019\workspace\210521_bigdata\day17\io\a.txt参照路径是谁:E:\Idea\idea2019\workspace\210521_bigdata参数路径可以直接不写了,剩下的就是相对路径写法:day17\io\a.txt总结: 在idea中的写相对路径,是从当前的模块名开始写的注意: 如果不写模块名,默认位置在当前的project下
public class Demo05Path {public static void main(String[] args)throws Exception {File file = new File("day17\\io\\a.txt");System.out.println(file.getAbsolutePath());System.out.println(file.createNewFile());//在指定模块位置创建File file1 = new File("b.txt");System.out.println(file1.getAbsolutePath());System.out.println(file1.createNewFile());//在当前project下创建}}
六.File的创建方法
public boolean createNewFile() :创建新文件如果要创建的文件已经存在:则创建失败,返回false如果要创建的文件不存在:则创建成功,返回truepublic boolean mkdirs() :创建文件夹,可以创建单级文件夹,还可以创建多级文件夹如果要创建的文件夹已经存在:则创建失败,返回false如果要创建的文件夹不存在:则创建成功,返回true
public class Demo06Create {public static void main(String[] args)throws IOException {File file = new File("E:\\Idea\\io\\io.txt");//File file = new File("E:\\Idea\\io\\io");/*public boolean createNewFile() :创建新文件如果要创建的文件已经存在:则创建失败,返回false如果要创建的文件不存在:则创建成功,返回true*/System.out.println("文件是否创建成功:"+file.createNewFile());/*public boolean mkdirs() :创建文件夹,可以创建单级文件夹,还可以创建多级文件夹如果要创建的文件夹已经存在:则创建失败,返回false如果要创建的文件夹不存在:则创建成功,返回true*/File file1 = new File("E:\\Idea\\io\\aa");//File file1 = new File("E:\\Idea\\io\\aa\\bb\\cc");//File file1 = new File("E:\\Idea\\io\\bb.txt");System.out.println("文件夹是否创建成功:"+file1.mkdirs());}}
七.File类的删除方法
boolean delete() -> 删除文件夹或者文件 -> 删除的时候要注意:不走回收站如果删除文件夹的话,此文件夹必须是空文件夹
public class Demo07Delete {public static void main(String[] args) {File file = new File("E:\\Idea\\io\\io.txt");System.out.println("文件是否删除成功:"+file.delete());System.out.println("===================");File file1 = new File("E:\\Idea\\io\\aa");System.out.println("文件夹是否删除成功:"+file1.delete());}}
八.File类的判断方法
boolean exists() -> 判断指定的文件或者文件夹是否存在boolean isFile() -> 判断是否为文件boolean isDirectory() ->判断是否为文件夹
public class Demo08Is {public static void main(String[] args) {File file = new File("E:\\Idea\\io\\aa");//boolean exists() -> 判断指定的文件或者文件夹是否存在System.out.println("文件或者文件夹是否存在:"+file.exists());//boolean isFile() -> 判断是否为文件System.out.println("是否为文件:"+file.isFile());//boolean isDirectory() ->判断是否为文件夹System.out.println("是否为文件夹:"+file.isDirectory());}}
九.File的遍历方法
String[] list() ->获取的是文件或者文件夹,只能遍历一级文件夹File[] listFiles() ->获取指定文件夹下的文件或者子文件夹,返回的是File数组 ,只能遍历一级文件夹(要是用,就用listFiles())
public class Demo09ListFile {public static void main(String[] args) {//String[] list() ->获取的是文件或者文件夹,只能遍历一级文件夹File file = new File("E:\\Idea\\io");/* String[] list = file.list();for (String s : list) {System.out.println(s);}*//*File[] listFiles() ->获取指定文件夹下的文件或者子文件夹,返回的是File数组 ,只能遍历一级文件夹listFiles()实现原理:先调用list方法,获取指定的子文件夹或者文件,将获取出来的子文件夹或者文件存放到File[]数组中*/File[] files = file.listFiles();for (File file1 : files) {System.out.println(file1);}}}
练习:遍历指定文件夹下所有的.jpg文件
步骤:1.创建File对象,传递要遍历的文件夹路径2.调用listFiles()方法,对指定的文件夹进行遍历,获取下面的文件或者子文件夹3.遍历File[]数组,把每一个子文件夹和文件的File对象获取出来4.调用getName(),将文件或者文件夹名字获取出来5.判断,如果名字是以.jpg结尾的,就输出
public class Demo10ListFiles {public static void main(String[] args) {//1.创建File对象,传递要遍历的文件夹路径File file = new File("E:\\Idea\\io");method(file);}private static void method(File file) {//2.调用listFiles()方法,对指定的文件夹进行遍历,获取下面的文件或者子文件夹File[] files = file.listFiles();//3.遍历File[]数组,把每一个子文件夹和文件的File对象获取出来for (File newFile : files) {if (newFile.isFile()){//4.调用getName(),将文件或者文件夹名字获取出来String name = newFile.getName();//5.判断,如果名字是以.jpg结尾的,就输出if (name.endsWith(".jpg")){System.out.println(name);}}else{//递归调用method(newFile);}}}}
第二章.字节流
一.IO流介绍以及输入输出以及流向的介绍
1.IO流I:Input 输入O:Output 输出2.概述:将数据从一个设备上传输到另外一个设备上的技术3.为什么学IO流:如果我们想将数据永久的保存起来,我们可以存到硬盘上,我们可以利用IO将数据永久地保存到硬盘上想用数据的时候,还可以从硬盘上将数据读出来4.IO主要作用:数据传输
二.IO流的流向
I:Input 输入将数据从硬盘的文件中读到内存中O:Output 输出从内存出发,利用代码将数据写到硬盘的文件中
![day17[File类_IO流] - 图1](/uploads/projects/liuye-6lcqc@vk53cd/9d00d0ea6ddc2ceb870605ec93f66ed0.png)
三.IO流分类
1.字节流:一切皆字节(图片,音乐,视频,文本等都是字节组成)->万能流字节输出流:父类-> OutputStream(抽象类)字节输入流:父类-> InputStream(抽象类)2.字符流:将数据看做是一个一个的字符操作,专门操作文本文档什么叫文本文档:用记事本或者一些个高级记事本打开,人能看懂的内容,就叫做文本文档.txt .html .css .java.doc(不是)字符输出流:父类-> Writer(抽象类)字符输入流:父类-> Reader(抽象类)
InputStream OutputStream Writer Reader:都是抽象类所以我们学要学他们的子类FileOutputStreamFileInputStreamFileWriterFileReaderBufferedInputStreamBufferedOutputStreamBufferedWriterBufferedReaderOutputStreamWriterInputStreamReaderObjectInputStreamObjectOutputStreamPrintStream
四.OutputStream中子类[FileOutputStream]的介绍以及方法的简单介绍
1.OutputStream:(字节输出流) 抽象类2.子类:FileOutputStream(字节输出流)3.构造:FileOutputStream(File file)->根据文件的路径创建FileOutputStream对象FileOutputStream(String path)->根据文件的路径创建FileOutputStream对象4.注意:输出流可以自动创建不存在的文件(但是不能创建文件夹昂)5.方法:void write(int b) -> 一次写一个字节void write(byte[] b) -> 一次写一个字节数组void write(byte[] b, int off, int len) -> 一次写一个字节数组一部分b:要写的字节数组off:从数组中的哪个索引开始写len:写多少个字节void close() -> 关闭流对象
public class Demo01FileOutputStream {public static void main(String[] args) throws Exception {FileOutputStream fos = new FileOutputStream("day17\\io\\a.txt");// method(fos);// method01(fos);method02(fos);}/*void write(byte[] b, int off, int len) -> 一次写一个字节数组一部分b:要写的字节数组off:从数组中的哪个索引开始写len:写多少个字节*/private static void method02(FileOutputStream fos) throws IOException {byte[] bytes = {97,98,99,100,101,102};fos.write(bytes,0,2);fos.close();}/*void write(byte[] b) -> 一次写一个字节数组*/private static void method01(FileOutputStream fos) throws IOException {byte[] bytes = {97,98,99,100};fos.write(bytes);fos.close();}/*void write(int b) -> 一次写一个字节*/private static void method(FileOutputStream fos)throws IOException {fos.write(97);//关闭流对象fos.close();}}
public class Demo02FileOutputStream {public static void main(String[] args) throws Exception {FileOutputStream fos = new FileOutputStream("day17\\io\\b.txt");//byte[] bytes = "abcd".getBytes();//[97,98,99,100]//byte[] bytes = {97,98,99,100};//fos.write(bytes);fos.write("你好".getBytes());fos.close();}}
![day17[File类_IO流] - 图2](/uploads/projects/liuye-6lcqc@vk53cd/fe5aa7335a9c9f4a58dbb216e8b37fc6.png)
五.FileOutputStream的续写和换行
续写:FileOutputStream(String path,boolean append)->创建对象,并有续写效果append:false -> 没有续写效果,每次运行都会创建新的文件覆盖老文件append:true->没有新文件创建,直接续写追加内容换行:windows: \r\nlinux: \nos: \r
public class Demo03FileOutputStream {public static void main(String[] args) throws Exception {FileOutputStream fos = new FileOutputStream("day17\\io\\c.txt",true);fos.write("窗前明月光".getBytes());fos.write("\r\n".getBytes());fos.write("疑是地上霜".getBytes());fos.write("\r\n".getBytes());fos.write("举头望明月".getBytes());fos.write("\r\n".getBytes());fos.write("低头思故乡".getBytes());fos.write("\r\n".getBytes());fos.write("离离原上草\r\n".getBytes());fos.write("一岁一枯荣\r\n".getBytes());fos.write("野火烧不尽\r\n".getBytes());fos.write("春风吹又生\r\n".getBytes());fos.close();}}
