IO流文字版
作者:互联网
File类
java.io包
File类
-
1.用来表示文件或目录(文件夹)的路径的抽象表示形式。
-
2.File对象可以用来封装一个文件或目录的信息
-
3.注意
- a.File对象封装的信息不一定存在,如果不存在可以通过一些方式让其存在。
-
b.File对象不能操作文件中的数据,仅仅是封装文件相关信息,如:大小,文件名..
-
路径
- 其实就是字符串,文件或目录所在位置的字符串
-
绝对路径
- 带有磁盘名的
-
相对路径
- 不带有磁盘名,相对于当前位置去找
构造方法
-
File(String pathname)
- 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
-
File(File parent, String child)
- 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
-
File(String parent,String child)
- 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
方法
-
创建和删除
-
创建文件
- boolean createNewFile()
-
创建目录
-
boolean mkdir()
- 一级目录
-
boolean mkdirs()
- 多级目录
-
-
-
获取
-
getAbsoluteFile()
- 获取绝对路径(不保证file封装的内容真实存在)
返回file类型
- 获取绝对路径(不保证file封装的内容真实存在)
-
getAbsolutePath()
- 获取绝对路径(不保证file封装的内容真实存在)
返回String类型
- 获取绝对路径(不保证file封装的内容真实存在)
-
getName()
- 获取文件或目录名称
返回String
- 获取文件或目录名称
-
getParent()
- 获取父目录,如果父目录不存在返回null
返回类型为String
- 获取父目录,如果父目录不存在返回null
-
getParentFile()
- 获取父目录,如果父目录不存在返回null
返回类型为file
- 获取父目录,如果父目录不存在返回null
-
getPath()
- 将File转为字符串
-
length()
-
返回文件大小
-
注:
- 不能操作目录,即使操作也是错误结果
-
-
lastModified()
- 获取文件最后一次修改的时间,返回毫秒值
-
-
判断
-
exists()
- 判断文件或目录是否真实存在
-
isAbsolute()
- 是否是绝对路径,仅仅看file封装的内容的写法,与真实存在无关
-
isFile()
- 是否是文件
-
isDirectory()
- 是否是目录
-
isHidden()
- 是否是隐藏文件
-
-
列出
-
list()
- 列出指定目录下的内容
返回String[]
- 列出指定目录下的内容
-
listFiles()
- 列出指定目录下的内容
返回File[]
- 列出指定目录下的内容
-
listRoots()
- 列出根磁盘 返回File[]
-
-
过滤
-
FilenameFilter
-
文件名过滤器
-
boolean accept(File dir,String name)
- dir:指定的目录
- name:指定目录下的每个文件或目录的名称
- 返回值是true,说明存放到返回的数组中,否则就不存放
-
-
FileFilter
-
文件对象过滤器
-
boolean accept(File pathname)
- pathname:指定目录+目录下的每个内容名 组合是一个file对象
- 返回值是true,说明存放到返回数组中,否则就不存放
-
-
-
其他
-
rename(File)
- 重命名返回boolean类型
-
IO流
初步认识
-
I:inout,
O:output
出入输出 -
输入
- 内存角度看,数据进入内存的就是输入操作。数据源,文件
-
输出
- 内存角度看,数据出内存的就是输出操作。
目的地,文件
- 内存角度看,数据出内存的就是输出操作。
-
IO技术
- 不同设备的数据进行传输
-
流
- 要操作的数据
-
根据流的方向分类
- 输入流和输出流
-
根据操作的数据类型分类
- 字节流和字符流
-
难点
-
1、选择字符还是字节流?
- 字节:图片、视频、音频等二进制文件
-
字符:纯文本文件(txt)
-
实在不清楚该选择哪个流,就用字节流,它是万能的。
-
2、选择输入还是输出
- 程序执行时需要数据源数据,---输入 read
-
程序执行时产生一些数据,这些数据要保存 ----输出 write
-
读入写出。
-
-
总结
- 1.创建流对象
- 2.调用read或write方法
- 3.关闭流
-
字节流
- 根类: InputStream OutputStream
- 子类: FileInputStream FileOutputStream
字节流
-
根类
-
输入流:InputStream
-
输出流:OutputStream
-
特点:抽象类
-
OutoutStream
-
方法
-
write(int by)
- 写入一个字节数据到目的地
-
write(byte[] by)
- 将by数组写到目的地
-
write(byte[] by,int index,int length)
- 将by的一部分写到目的地
-
close()
- 关闭流,并释放资源
-
flush()
- 刷新数据到目的地
-
-
子类
-
FileOutputStream
-
用于操作文件,向文件中写入数据
-
构造方法
-
FileOutputStream(String/File filename)
- 覆盖文件
-
FileOutputStream(String/File filename,true)
- 不会覆盖文件,末尾追加数据
-
-
-
-
-
InputStream
-
方法
-
int read()
- 读取一个字节数据,读到末尾返回-1
-
int read(byte[] by)
- 读取数据存储到by中,读到末尾返回-1
-
int read(byte[] by,index,lengh)
- 读取数据存储到
-
close()
- 关闭流,并释放资源
-
int available()
- 返回未被读取的字节数
- 创建字节数组时,可以通过该方法来指定其大小
- 注:文件不能太大,如果过大,创建数组空间很大,导致内存溢出
-
-
子类
-
FileInputStream
-
用于读取文件中的数据
-
构造方法
- FileInputStream(File/String filename)
-
-
-
-
-
字节缓冲流
-
BufferedInputStream和BufferedOutputStream出现的目的就是为了提高读和写的效率。
-
此流是字节流,并且是InputStream和OutputStream的子类。
-
此流不能与数据源和目的地直接建立连接,仅仅是将基础流对象进行包装,增强读写功能。
缓冲流是从缓冲区中进行数据的读和写,缓冲区中的内容是通过基础流操作得来的。 -
close和flush区别
-
close
- 关闭流,并释放与之相关的资源,关闭前会刷新
流一旦关闭,不能再使用
- 关闭流,并释放与之相关的资源,关闭前会刷新
-
flush
- 将缓冲区中的数据刷新到目的地,流可以继续使用
-
-
异常处理
- try(
流对象的创建
){
流的操作(读或写)
}catch(异常类型名 变量名){
异常的处理
} - 使用这种方法方式,不需要手动关闭流,执行完会执行关闭流
- try(
-
解码和编码
-
编码表(字符集)
- ASCII、Unicode、GBK、utf-8
-
解码
- 将字节数据转为字符数据
-
编码
- 将字符数据转为字节数据
-
乱码
- 编码和解码使用的不是同一个编码表
字符流
-
字符流操作字符类型的数据
-
实际原理
- 字节流+编码表的融合
-
字符流
- 内部维护了一个字节数组
-
根类
-
Writer
-
抽象类
-
Writer
-
write(int ch)
- 写一个字符
-
write(char[] ch)
- 写字符数组
-
write(char[] ch,index,length)
- 写子符数组的一部分
-
write(String str)
- 写字符串
-
write(String str,index,length)
- 写字符串的一部分
-
flush()
- 刷新
-
close()
- 关闭,关闭前会刷新
-
-
子类
-
FileWriter
- 用于操作文字文件的输出流
- 编码表和缓冲区大小都是默认的
-
构造方法
-
FileWriter(String/File filename)
- 覆盖文件
-
FileWriter(String/file filename, boolean append)
- 追加文件
-
-
-
-
Reader
-
抽象类
-
Reader
-
int read()
- 读取一个字符串,读取到末尾返回-1
-
int read(char[])
- 读取一个字符数组,返回读取的字符个数,读取到末尾返回-1
-
int read(char[],index,lengh)
-
close()
- 关闭流
-
-
子类
-
FileReader
- 操作文件
-
FileReader(File/String name)
-
注
- 字符流不能操作二进制类型,
如:图片、视频、音频等文件
- 字符流不能操作二进制类型,
-
-
-
-
字符缓冲区对象
-
BufferedWriter
-
将文本写入输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
-
可以指定缓冲区的大小,或者接受默认的大小,大多数情况下,默认值足够用。
-
新增方法
-
void newLine()
- 跨平台的换行符
-
-
-
BufferedReader
-
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
-
可以指定缓冲区的大小,或者可使用默认的大小,大多数情况,默认值就足够大
-
新增方法
-
String readLine()
- 返回一行文本,不包含行终止符,读取到末尾返回null
-
-
-
转换流
-
InputStreamReader和OutputStreamWriter是一对字符流
-
构造方法
- InputStreamReader(InputStream) :字节---字符
- InputStreamReader(InputStream,charsetname):使用charsetname进行读取数据
- OutputStreamWriter(OutputStream):字节---字符
- OutputStreamWriter(OutputStream,charsetName):使用charsetname进行写数据
-
作用
- 可以使用指定的编码表进行读和写数据
- 将字节流转为字符流操作
- 缓冲流--readLine
对象流
-
ObjectInputStream和ObjectOutputStream字节流
-
ObjectOutputStream
-
字节输出流,除了能写字节数组、字节数据外,新增了很多功能,可以向目的地中写基本类型和Object类型数据,方法名格式:write+类型名。
-
构造方法
-
ObjectOutputStream(OutputStream)
- OutputStream指定目的地
-
-
-
ObjectInputStream
-
字节输入流,除了能读字节数组、字节数据外,新增了很多功能,可以读取数据源中写基本类型和Object类型数据,方法名格式:read+类型名
-
构造方法
-
ObjectInputStream(InputStream)
- InputStream指定数据源
-
-
-
这对流可以去读取基本类型数据和引用类型数据,一定要注意写入数据的顺序决定了读取的顺序,按照字节的顺序依次进行写。writeInt(1),写入4个字节,并占用四个字节的空间。
-
序列化与非序列化
-
序列化
- 将数据持久存储,按照字节空间及顺序进行存储
-
反序列化
- 持久存储的数据读取出来,按照字节空间及顺序进行读取
-
自定义对象进行序列化与反序列,需实现一个接口,即java.io.Serializable
- 此接口为标识接口,不需重写
-
注意
- 序列化的是对象的属性值,方法不序列化
- 与系统有关的对象不能序列化,比如:System
-
问题
-
属性不想要序列化,使用static修饰即可,但这种方式不建议;
-
建议专业关键字
- transient
-
-
定义类的版本号
- ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
-
格式化输入和输出
-
输入
-
System.in
-
类型是InputStream
-
数据源:键盘
-
更改数据源
-
setIn(InoutStream in)
- 重新分配"标准"输入流
-
-
-
Scanner
-
是一个扫描器,只能扫描基本类型(char 除外)和字符串类型数据
-
构造方法
-
Scanner(File)
- 扫描文件中数据
-
Scanner(InputStream)
- 扫描键盘录入的数据
-
-
方法
-
next()
- 扫描字符串,遇到空格、回车键、tab键等结束扫描
-
nextLine()
- 扫描一行字符串数据,遇到行终止符停止扫描
-
-
-
-
输出
-
System.out/err
-
数据类型
- PrintStream(字节流)
-
目的地
- 控制台 可以打印不同类型的数据
-
更改目的地
-
setOut(PrintStream out)
- 重新分配"标准"输入流
-
-
-
PrintStream
-
打印字节流
-
构造方法
-
PrintStream(File file)
- 创建具有指定文件且不带自动行刷新的新打印流
-
PrintStream(File file,String csn)
- 创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
-
PrintStream(OutputStream out)
- 创建新的打印流。
-
PrintStream(OutputStream out, boolean autoFlush)
- 创建新的打印流。
-
PrintStream(OutputStream out, boolean autoFlush, String encoding)
- 创建新的打印流
-
PrintStream(String fileName)
- 创建具有指定文件名称且不带自动行刷新的新打印流。
-
PrintStream(String fileName, String csn)
- 创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
-
-
该类中封装了大量重载的print和println方法,可以将不同类型的数据写到指定的目的地,print不写入换行,println会写入换行。当写字符数组时会看到字符数组元素内容,是因为有print(char[])方法,当写其他类型元素的数组时,调用的是print(Object)方法。
-
-
PrintWriter
-
打印字符流
-
该类与PrintStream用法基本一样,注意该类是一个字符流,不要忘记刷新
-
开启自动刷新后,只针对println、printf、format这三个方法有效,其他无效。
-
构造方法
-
PrintWriter(File file)
-
使用指定文件创建不具有自动行刷新的新 PrintWriter。
-
-
PrintWriter(File file, String csn)
-
创建具有指定文件和字符集且不带自动刷行新的新 PrintWriter。
-
-
PrintWriter(OutputStream out)
-
根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。
-
-
PrintWriter(OutputStream out, boolean autoFlush)
-
通过现有的 OutputStream 创建新的 PrintWriter。
-
-
PrintWriter(String fileName)
-
创建具有指定文件名称且不带自动行刷新的新 PrintWriter。
-
-
PrintWriter(String fileName, String csn)
-
创建具有指定文件名称和字符集且不带自动行刷新的新 PrintWriter。
-
-
PrintWriter(Writer out)
-
创建不带自动行刷新的新 PrintWriter。
-
-
PrintWriter(Writer out, boolean autoFlush)
-
创建新 PrintWriter。
-
-
-
-
标签:字符,PrintWriter,String,IO,文字版,File,数据,字节 来源: https://www.cnblogs.com/chenglong0201/p/15032712.html