Java File类和I/O流

File类
导包import java.io.File;
java把电脑中的文件和文件夹(目录封装为了一个File类),我们可以使用File类对文件和文件夹进行操作
file:文件 directory:文件夹/目录 path:路径

路径分隔符和文件分隔符

File类中相关的静态方法可以获取
static String pathSeparator 与系统有关的路径分隔符
static char pathSeparatorChar 与系统有关的路径分隔符
Windows:分号; Linux:冒号:
static String separator 与系统有关的名称分隔符
static char separatorChar 与系统有关的名称分隔符
Windows:反斜杠\ Linux:正斜杠/

File类构造方法

File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新File实例

File(String parent,String child)根据parent和child的路径名字符串创建一个新的File实例

File(File parent,String child)根据parent抽象路径名和child的路径名字符串创建一个新的File实例

File类获取功能的方法

public String getAbsolutePath()返回此File的绝对路径名字符串
public String getPath()将此File转换为路径名字符串
public String getName()返回由此File表示的文件或目录的名称
public Long length()返回由此File表示的文件的长度

File类判断功能的方法

public boolean exists()File表示的文件或目录是否实际存在
public boolean isDirectory()File表示的是否为目录
public boolean isFile()File表示的是否为文件

File类创建删除功能的方法

public boolean createNewFile()当且仅当具有改名称的文件尚不存在时,创建一个新的空文件
public boolean delete()删除由此File表示的文件或目录
public boolean mkdir()创建由此File表示的目录
public boolean mkdirs()创建由此File表示的目录,包括任何必需但不存在的父目录

File类遍历文件夹(目录)功能

public String[] list()返回一个String数组,表示该File目录中的所有子文件或目录
public File[] listFiles()返回一个File数组,表示该File目录中的所有的子文件或目录

FileFilter过滤器

File类中有两个和ListFiles重载的方法,方法的参数传递就是过滤器
File[] listFiles(FileFilter filter)
FileFilter是一个过滤器接口,其中有一个抽象方法
boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中
参数File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象

File[] listFiles(FilenameFilter filter)
boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中
FilenameFilter是一个过滤器接口,其中有一个抽象方法
boolean accept(File dir,String name)测试指定抽象路径名是否应该包含在某个路径名列表中
参数File dir:构造方法中传递的被遍历的目录
	String name:使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称

I/O
i:input 输入(读取) 把硬盘中的数据,读取到内存中使用
o:output 输出(写入) 把内存中的数据,写入到硬盘中保存

I/O流顶级父类

输入流输出流
字节流字节输入流InputStream字节输出流OutputStream
字符流字符输入流Reader字符输出流Writer

OutputStream字节输出流
此抽象类是表示字节输出流的所有类的超类

子类共性的成员方法
public void close()关闭此输出流并释放与此流相关联的任何系统资源
public void flush()刷新此输出流并强制任何缓冲的输出字节被写出
public void write(byte[] b)将b.length字节从指定的字节数组写入此输出流
public void write(byte[] b,int off,int len)从指定的字节数组写入len字节,从偏移量off开始输出到此输出流
public abstract void write(int b)将指定的字节输出流

FileOutputStream文件字节输出流
把内存中的数据写入到硬盘的文件中

构造方法:
FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的文件输出流
FileOutputStream(File file)创建一个向指定File对象表示的文件中写入数据的输出文件流
FileOutputStream(String name,boolean append)创建一个向具有指定名称的文件中写入数据的文件输出流
FileOutputStream(File file,boolean append)创建一个向指定File对象表示的文件中写入数据的输出文件流
参数:append表示追加写开关
true:创建对象不会覆盖源文件,继续在文件的末尾追加写数据
false:创建一个新文件,覆盖源文件
换行符号:
Windows:"\r\n" Linux:"/n" mac:"/r"

构造方法的作用:
1.创建一个FileOutputStream对象
2.会根据构造方法中传递的文件/文件路径,创建一个空的文件
3.会把FileOutputStream对象指向创建好的文件

字节输出流的使用步骤:

  1. 创建一个FileOutputStream对象,构造方法中传递写入数据目的地
  2. 调用FileOutputStream对象中的方法write,把数据写入到文件中
  3. 释放资源(close)

InputStream字节输入流
此抽象类是表示字节输入流的所有类的超类

子类共性的成员方法
int read()从输入流中读取数据的下一个字节
int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数字b中
void close()关闭此输入流并释放与流关联的所有系统资源

FileInputStream文件字节输入流
把硬盘的文件中的数据读取到内存中使用

构造方法:
FileInputStream(String name)读取文件数据
FileInputStream(File file)读取文件数据

构造方法的作用:
1.创建一个FileInputStream对象
2.会把FileInputStream对象指定构造方法中要读取的文件

字节输入流的使用步骤:

  1. 创建一个FileInputStream对象,构造方法中绑定要读取的数据源
  2. 调用FileInputStream对象中的方法read,读取文件,读到文件的末尾会返回-1
  3. 释放资源(close)

Reader字符输入流
把硬盘文件中的数据以字符的方式读取到内存中

子类共性的成员方法
int read()读取单个字符并返回
int read(char[] buf)一次读取多个字符,将字符读入数组
void close()关闭该流并释放与之关联的所有资源
构造方法:
FileReader(String fileName)
FileReader(File file)
FileReader构造方法的作用:
1.创建一个FileReader对象
2.会把FileReader对象指向要读取的文件

字符输入流的使用步骤:

  1. 创建一个FileReader对象,构造方法中绑定要读取的数据源
  2. 调用FileReader对象中的方法read,读取文件,读到文件的末尾会返回-1
  3. 释放资源(close)

Writer字符输出流
把内存中的数据写入到硬盘的文件中

子类共性的成员方法
public void close()关闭此输出流,但要先刷新它
public void flush()刷新该流的缓冲
void write(int c)写入单个字符
public void write(char[] b)写入字符数组
public abstract void write(char[] b,int off,int len)写入字符数组的某一部分,从偏移量off开始输出到此输出流
public void write(String str)写入字符串
public void write(String str,int off,int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数

FileWriter文件字符输出流

构造方法:
FileWriter(File file)根据给定的File对象构造一个FileWriter对象
FileWriter(String filename)根据给定的文件名构造一个FileWriter对象
FileWriter(String name,boolean append)创建一个向具有指定名称的文件中写入数据的文件输出流
FileWriter(File file,boolean append)
参数:append表示追加写开关
true:创建对象不会覆盖源文件,继续在文件的末尾追加写数据
false:创建一个新文件,覆盖源文件
换行符号:
Windows:"\r\n" Linux:"/n" mac:"/r"

构造方法的作用:
1.创建一个FileWriter对象
2.会根据构造方法中传递的文件/文件路径,创建一个空的文件
3.会把FileWriter对象指向创建好的文件

字节输出流的使用步骤:

  1. 创建一个FileWriter对象,构造方法中传递写入数据目的地
  2. 调用FileWriter对象中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
  3. 使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
  4. 释放资源(会先把内存缓冲区中的数据刷新到文件中)

BufferedOutputStream字节缓冲输出流

构造方法:
BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,以将数据写入指定的底层输出流
BufferedOutputStream(OutputStream out,int size)创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流

使用步骤(重点)
1.创建FiLeOutputStream对象,构造方法中绑定要输出的目的地
2.创建BufferedOutputStream对象,构造方法中传递FiLeOutputStream对象,提高FiLeOutputStreom对象效率
3.使用BufferedOutputStream对象中的方法write,把数据写入到内部缓冲区中
4.使用BufferedOutputStream对象中的方法flush,把内部缓冲区中的数据,刷新到文件中
5.释放资源(会先调用fLush方法刷新数据,4步可以省略)

BufferedInputStream字节缓冲输入流

构造方法:
BufferedInputStream(InputStream in)创建一个BufferedInputStream并保存其参数,即输入流in,以便将来使用
BufferedInputStream(InputStream in,int size)创建具有指定缓冲区大小的BufferedInputStream并保存其参数,即输入流in,以便将来使用 

使用步骤(重点):
1.创建FiLeInputStream对象,构造方法中绑定要读取的数据源
2.创建BufferedInputStream对象,构造方法中传递FiLeInputStreom对象,提高FiLeInputStreom对象的读取效率
3.使用BufferedInputStream对象中的方法read,读取文件
4.释放资源

BufferedWriter字符缓冲输出流

构造方法:
BufferedWriter(Writer out)创建一个使用默认大小的缓冲字符输出流
BufferedWriter(Writer out,int sz)创建一个给定大小输出缓冲区的缓冲字符输出流

特有的成员方法:
void newLine()写入一个行分隔符,不同操作系统,获取不同的行分隔符

BufferedReader字符缓冲输入流

构造方法:
BufferedReader(Reader in)创建一个使用默认大小的缓冲字符输入流
BufferedWriter(Reader in,int sz)创建一个给定大小输出缓冲区的缓冲字符输入流

特有的成员方法:
String readLine()读取一个文本行,读取一行数据
返回值:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回null

OutputStreamWriter转换输出流

构造方法:
OutputStreamWriter(OutputStreamWriter out)创建使用默认字符编码的OutputStreamWriter
OutputStreamWriter(OutputStreamWriter out,String charsetName)创建使用指定字符集的OutputStreamWriter
参数:
charsetName指定编码表名称,不区分大小写

使用步骤:
1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称
2.使用OutputStreamWriter对象中的方法write,把字符转换为字节存储缓冲区中(编码)
3.使用OutputStreamWriter对象中的方法fLush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)
4.释放资源

InputStreamReader转换输入流

构造方法:
InputStreamReader(InputStreamReader in)创建一个使用默认字符集的InputStreamReader
InputStreamReader(InputStreamReader in,String charsetName)创建一个使用指定字符集的InputStreamReader

使用步骤:
1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称
2.使用InputStreamReader对象中的方法read读取文件
3 .释放资源
注意事项:
构造方法中指定的编码表名称要和文件的编码相同,否则会发生乱码

ObjectOutputStream对象的序列化流
作用:把对象以流的方式写入到文件中保存

构造方法:
ObjectOutputStream(OutputStream out)创建写入指定OutputStreamObjectOutputStream
特有的成员方法:
void writeObject(Object obj)将指定的对象写入ObjectOutputStream

使用步骤:
1.创建ObjectOutputStream对象,构造方法中传递字节输出流
2.使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
3.释放资源

注意:
写入的类必须实现Serializable接口以启用序列化功能,未实现此接口的类将无法使其任何状态序列化或反序列化,Serializable接口也叫标记性接口

ObjectInputStream对象的反序列化流
作用:把文件中保存的对象,以流的方式读取出来使用

构造方法:
ObjectInputStream(InputStream in)创建写入指定InputStreamObjectInputStream
特有的成员方法:
Object readObject()ObjectInputStream读取对象

使用步骤:
1.创建ObjectInputStream对象,构造方法中传递字节输入流
2.使用ObjectInputStream对象中的方法readObject读取保存对象的文件
3.释放资源
4.使用读取出来的对象(打印)

关于static和transient关键字
静态优先于非静态加载到内存中
被static修饰的成员变量不能被序列化,序列化的都是对象
被transient修饰成员变量,不能被序列化

PrintStream打印流
为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式

构造方法:
PrintStream(File file)目的地是一个文件
PrintStream(OutputStream out)目的地是一个字节输出流
PrintStream(String fileName)目的地是一个文件路径
特有方法:
void print(任意类型的值)
void println(任意类型的值并换行)

注意:
使用write时 就会查询编码表 97->a
使用自己特有的方法print/println时 就会数据原样输出97->97

使用System.setOut方法改变输出语句的目的地改为参数中传递的打印流的目的地
static void setOut(PrintStream out)重新分配“标准”输出流
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P_xuebuhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值