13.1 File类的概述和构造方法
文件和目录路径名的抽象表示形式
构造方法:
public File(String pathname);根据一个路径得到File对象
public File(String parent,String child);根据一个目录和子文件/子目录得到一 个File对象
public File(File parent,String child);根据一个父File对象和一个子文件/目录 得到File对象
注意:如果创建文件或目录没有盘符,则默认当前项目路径。(例 info.txt)
13.2 File类的创建功能
public boolean createNewFile():创建文件如果存在则不创建(前提目录必须 存在)
public boolean mkdir():创建文件夹如果存在则不创建
public boolean mkdirs():创建多级目录(文件名也叫目录名)
13.3 File类的删除功能
public boolean delete():删除不走回收站 (目录中有内容则不删除)
13.4 File类的重命名功能
public boolean renameTo(File dest):如果源文件和重名的文件 在不同目录下,剪切;在同一目录下,重命名。
13.5 File类的判断功能
public boolean isDirectory():是否是目录
public boolean isFile():是否是文件
public boolean exists():是否存在
public boolean canRead():是否可读
public boolean canWrite():是否可写
public boolean isHidden():是否隐藏
13.6 File类的获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度,字节数
public long lastModified():获取最后一次修改时间 (以毫秒为单位)
13.7 File类的高级获取功能
public String[] list():获取指定目录下的所有文件或文件夹的名称字符串数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
13.8 输出指定目录下指定后缀名的文件名称案例
第一步:封装指定的目录
第二步:获取该目录下所有文件或者文件夹的File数组
第三步:遍历File数组,得到每一个File对象,然后判断
第四步:如果是文件,则判断是否以xxx结尾;否则不管
13.9 文件过滤器改进输出指定目录下指定后缀名的文件名称案例
第一步:先获取所有的,然后遍历的时候,依次判断,如果满足条件就输出
第二步:获取的时候就已经满足条件了,然后输出即可
public String[] list(FilenameFilter filter):创建接口对象,重写accept方法, 添加需求
public File[] listFiles(FileFilter filter):创建接口对象,重写accept方法,添加需求
13.10 批量修改文件名称
第一步:封装目录
第二步:获取该目录下所有的文件的File数组
第三步:遍历该File数组,得到每一个File对象
第四步:拼接一个新的名称,然后重命名
13.11 递归输出指定目录下所有的java文件的绝对路径
第一步:封装目录
第二步:获取目录下所有的文件或者文件夹的File数组
第三步:遍历该File数组,得到每一个File对象
第四步:判断该File对象是否是文件夹 是,回到第一步; 否,继续判断是否以.java结尾?是,输出 否,不管
13.12 递归删除带内容的目录
第一步:封装目录
第二步:获取目录下的所有文件或者文件夹的File数组
第三步:遍历该FIle数组,得到每一个FIle独享
第四步:判断该File对象是否是文件夹 是,回到第一步 否,删除
第五步:最终删除文件夹
13.13 IO流概述及分类
按照数据流向:
输入流:读入数据
输出流:写出数据
注意:流向的划分主要依据内存 向内存内传数据叫输入 将数据从内存中传出叫输出
按照数据类型
字节流:二进制文件
字符流:二进制+编码文件
使用哪种流的场合
如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,使用字符流。其他使用字节流。
如果你什么都不知道,就用字节流。
可以分为四大抽象基类:
字节输入流 InputStream
字节输出流 OutputStream
字符输入流 Reader
字符输出流 Writer
注意:每种基类的子类都以父类名作为后缀名
13.14 IO流基类概述和一个简单的需求分析 往
向文本文件中输入一句话:Hello,IO
第一步:文本文件最好用字符流来做,但是字符流是字节流之后出现的
第二步:由于是从内存向文件中输出数据,所以是输出流
13.15 FileOutputStream的构造方法
FileOutputStream(File file):关联一个File对象的字节输出流
FileOutputStream(String name):关联一个文件名所对应的File对象的字节输出流
注意:可能找不到文件对象!(要有对异常的处理–声明/捕获)
13.16 FileOutputStream写出数据
创建字节输出流对象做了几件事情:
第一步:调用系统功能去创建文件
第二步:创建fos对象
第三步:把fos对象指向这个文件写出之后,关闭 close() 避免占用系统资源。
字节输出流基本操作步骤:(逻辑步骤)
第一步:创建字节输出流对象
第二步:写数据
第三步:释放资源
13.17 FileOutputStream的三个write()方法
public void write(byte[]):写入字节数组(如果是文本,需先转成字节)
public void write(byte[] b.int off,int len):写一个字节数组的一部分
public void write(int b):写入一个字节
13.18 FileOutputStream写出数据实现换行和追加写入
如何实现数据的换行:
写入换行符"\n",但是windows自带文本没显示 因为其换行符号"\r\n"。
linux"\n",Max“\r” ,一般高级记事本都可识别。
如何实现追加写入:
由fos构造函数决定
13.19 FileInputStream读取数据
字节输入流基本操作步骤:
第一步:创建字节输入流徐爱那个
第二步:调用read()方法读取数据
第三步:释放资源
int read():一次读取一个字节 -1则代表结束
int read(byte[]):一次读取一个字节数组
13.20 字节流复制文本文件案例1
数据源:
从哪里来 a.txt 读取数据 一次一个字节 FileInputStream
目的地:
到哪里去 b.txt 写出数据 FileOutputStream
13.21 字节流复制文本文件案例2
跨盘复制文本文件
数据源:
从哪里来 一次一个字节 C:\\a.txt 读取数据 FileInputStream
目的地:
到哪里去 D:\\b.txt 写出数据 FileOutputStream
13.22 字节流复制图片案例
数据源:
从哪里来 一次一个字节 xxx.jpg 读取输入 FileInputStream
目的地:到哪里去 xxx.jpg 写出数据 FileOutputStream
13.23 字节流复制视频案例1
数据源:
从哪里来 一次一个字节 xxx.avi 读取输入 FileInputStream
目的地:
到哪里去 xxx.avi 写出数据 FileOutputStream 1
3.24 FileInputStream读取数据一次一个字节数组
int read(byte[]):一次读取一个字节数组 读取到-1则读完
13.25 字节流复制文本文件案例3
数据源:
哪里来 一次一个字节数组 a.txt 读取数据 FileInputStream
目的地:
到哪里去 b.txt 写除数据 FileOutputStream
13.26 字节流复制视频案例2
数据源:
从哪里来 一次一个字节数组 a.txt 读取数据 FileInputStream
目的地:
到哪里去 b.txt 写除数据 FileOutputStream
13.27 BufferedOutputStream写出数据
通过定义数组的方式确实比以前一次读取字节的方式快很多,所以,缓冲区是一个很好的选择。Java提供了带缓冲区的字节类
缓冲区类(高效类)
BufferedOutputStream
BufferedInputStream
其构造方法可以指定缓冲区的大小,但是我们一般用不上,因为默认缓冲区大小就足够 了。
为什么必须传入OutputStream对象而不是pathname呢?
字节缓冲区仅仅提供缓冲区,为高效而设计,但是,真正的读写操作还得靠基本的流对象实现。
13.28 字节流四种方式复制MP4并测试效率
字节流四种方式复制文件:
基本字节流一次读写一个字节
基本字节流一次读写一个字节数组
高效字节流一次读写一个字节
高校字节流一次读取一个字节数组
13.29 转换流出现的原因及格式
由于字节流操作特殊字符不是很方便,所以,java就提供了转换流 。
字符流=字节流+编码表
13.30 编码表概述和常见编码表
编码表:
由字符及其对应的数值组成的一张表。
常见编码表:
ASCII:美国标准信息交换码 1字节
Unicode:国际标准码,融合了多种文字 2字节 I
SO-8859-1:拉丁码表,欧洲码表 1字节
GB2313:中国的中文编码表 、
GBK:中国的中文编码表升级,融合了更多地中文文字符号
GB18030:GBK的取代版本 BIG5:通行于台湾、香港地区的一个繁体字编码方案
UTF-8:最多用3个字节表示一个字符
UTF-8,它定义了一种“区间规则”,这种规则可以和ASCII编码保持最大程度的兼 容。
它将Unicode编码为00000000-0000007F的字符,用单个字节表示
它将Unicode编码为00000080-000007FF的字符,用两个字节表示
它将Unicode编码为00000800-0000FFFF的字符,用三个字节表示
13.31 String类中的编码和解码问题
编码:把看得懂的变成看不懂的
解码:把看不懂的编程看得懂的
String(byte[] bytes,String charsetName):通过指定的字符集编码解码字节数组
byte[] getBytes(String charSetName):使用指定的字符集合把字符串编码为 字节数组
13.32 转换流OutputStreamWriter的使用
把输出字节流转换为输出字符流
OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转 换为字符流。
OutputStreamWriter(OutputStream out,String charsetName):根据指定编 码把字节流数据转换为字符流。
13.33 转换流InputStreamReader的使用
把输入字节流转换为输入字符流
InputStreamReader(InputStream is):用默认的编码读取数据
InputStreamReader(InputStream is,String charsetName):用指定的编码读 取数据
13.34 字符流的5种写数据的方式
OutputStreamWriter
public void write(int c):写一个字符
public void write(char[] cbuf):写一个字符数组
public void write(char[] cbuf,int off,int len):写一个字符数组的部分
public void write(String str):写一个字符串
public void write(String str,int off,int len):写一个字符串的部分
flush():将缓冲区的数据存入文件,但不关闭流
flush与close的区别:数据量大时最好刷新,单也可以直接close
13.35 字符流的2种读数据的方式
InputStreamReader
public int read():读取一个字符
public int read(char[] cbuf):读取一个字符数组
13.36 字符流复制文本文件案例1
把当前目录下的文件复制到当前另一个文件中
数据源:
a.txt 读取数据 字符转换流 InputStreamReader
目的地:
b.txt 写出数据 字符转换流 OutputStreamWriter
13.37 字符流复制文本文件案例2
转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们的书写,转换流提供了对应的子类
FileWriter
FileReader
13.38 字符缓冲输出流BufferedWriter的使用
字符流为了高效读写,也提供了对应的字符缓冲流
BufferedWriter:字符缓冲输出流
BufferedReader:字符缓冲输入流
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
13.39 字符缓冲流的特殊功能
readLine():根据系统来决定换行符
newLine():一次读取一行数据
13.40 IO流小结图解

13.41 把集合中的数据存储到文本文件案例
ArrayList集合里存储的是字符串
遍历ArrayList集合,读取数据
将数据存储到文件文本中
文本文件说明使用字符流
13.42 把文本文件中的数据存储到集合中案例
数据源是一个文本文件
目的地是一个集合
而且元素是字符串
13.43 随机获取文本文件中的姓名案例
把文本文件中的数据存储到集合中
随机产生一个索引
根据索引获取一个值
13.44 复制单级文件夹案例
第一步:封装目录
第二步:获取该目录下的所有文本的File数组
第三步:遍历该File数组,得到每一个File对象
第四步:把File进行复制
13.45 复制指定目录下指定后缀名的文件并修改名称案例
第一步:封装目录
第二步:获取该目录下的所有文本的File数组
第三步:遍历该File数组,得到每一个File对象
第四步:判断该对象是否符合后缀名
第五步:把File进行复制并改名
13.46 复制多级文件夹案例
第一步:封装数据源File
第二步:封装目的地File
第三步:判读该File是文件还是文件夹
是文件夹: 就在目的地目录下创建该文件夹
获取FIle对象下的所有文件或文件夹File对象
遍历每一个FIle对象
回到第三步
是文件: 直接复制
13.47 本章小结
1.1/0类可以分为文本I/O 和二进制 I/O。文本 I/O将数据解释成字符序列,二进制I /O流将数据解释成原始的二进制数值。文本在文件中如何存储依赖于文件的编码方式。Java自动完成对文本 I/O的编 码和解码。
2.InputStream 类和OutputStream 类是所有二进制 I/O类的根类。FilelnputStream类和 FileOutputStream 类关联文件用于文件输入 /输出。BufferedInputStream 类和 BufferedOutputStream类可以包装任何一个二进制输入 /输出流以提高其性能。DatalnputStream类和 DataOutputStream类可以用来读写基本类型数据和字符串。
3.ObjectlnputStream 类和ObjectOutputStream类除了可以读写基本类型数据值和字符串,还可以读写对象。为实现对象的可序列化,对象的定义类必须实现 java.io.Serializable 标记接口。
4.RandomAccessFile 类允许对文件读写数据。可以打开一个模式为"r"的文件,这个模式表示文件是只读的,也可以打开一个模式为"rw"的文件,这个模式表示文件是可更新的。由于 RandomAccessFile 类实现了 DataInput 和 DataOutput 接口,所以,RandomAccessFile 中的许多方法都与 DatalnputStream 和 DataOutputStream 中的方法一样。
本文详细介绍了Java中File类的使用,包括构造方法、创建、删除、重命名、判断、获取等功能。同时,深入讲解了IO流的概念、分类,如字节流、字符流,并通过实例演示了FileOutputStream、FileInputStream、BufferedOutputStream等流的使用,以及转换流和字符缓冲流在文件复制中的应用。文章最后还涵盖了集合与文件、目录的交互以及文件的批量操作技巧。
584

被折叠的 条评论
为什么被折叠?



