Java学习-8

File类

概述:是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

静态成员变量:

构造方法:

一.File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
二.File(String parent, String child) 根据parent 路径名字符串和child 路径名字符串创建一个新File 实例。
参数:把路径分成了两部分
String parent:父路径
String child: 子路径
好处:
父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
三.File(File parent, String child) 根据parent 抽象路径名和child 路径名字符串创建一个新File 实例。
参数:把路径分成了两部分
File parent:父路径
String child:子路径
好处:
父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
父路径是File类型,可以使用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目录中的所有的子文件或目录。


File的过滤器

先来实现一个小案例:遍历一个文件夹里面的所有文件并找出Java类型的文件

以上案例可以使用过滤器来实现
在File类中有和ListFiles重载的方法,方法的参数传递的就是过滤器

java. io.FileFilter接口:用于抽象路径名(FiLe对象)的过源器。

FileFilter过滤器的使用


可以看到基本实现了案例的要求

也可以通过匿名内部类来实现

因为符合Lambda表达式的使用格式,所以可以简化代码

因为他只有一行代码,所以可以进一步优化

IO字节流

字节输出流:java. io. 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 对象表示的文件中写入数据的文件输出流。
参数:写入数据的目的
   String name:目的地是一个文件的路径
  File file:目的地是一个文件

字节输出流的使用步骤:

1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
2.调用FileOutputStream对象中的方法write,把数据写入到文件中
3.释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提供程序的效率)

public abstract void write(int b) : 将指定的字节输出流。

public void write(byte[] b): 将b. length字节从指定的字节数组写入此输出流。
如果写的第一个字节是正数(0-127),那么显示的时候会查询ASCII表。
如果写的第一个字节是负数,那第一个字节会 和第个字节,两个字节组成一 个中文显示,查询系统默认码表(GBK)

写入字符的方法:可以使用String类中的方法把字符串,转换为字节数组

如果写入文件不覆盖原本的内容则需要添加一个ture参数

需要换行写入“\r\n”字符串

java. io. InputStream:字节输入流,此抽象类是表示字节输入流的所有类的超类。

定义了所有子类共性的方法:

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

子类中主要了解的是:
 FileInputStream:文件字节输入流
  作用:把硬盘文件中的数据,读取到内存中使用
使用步骤

1.创建FiLeInputStream对象,构造方法中绑定要读取的数据源
2.使用FileInputStream对象中的方法read,读取文件
3.释放资源


int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。

IO字符流

java. io. Reader:字符输入流,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类

共性的成员方法:

int read() 读取单个字符并返回。
int read(char[] cbuf)一次读取多个字符,将字符读入数组。
void close() 关闭该流并释放与之关联的所有资源。

子类中主要了解的是:
 FileReader:文件字符输入流。
 作用:把硬盘文件中的数据以字符的方式读取到内存中

 构造方法:
  FiLeReader(String fiLeName)
  FileReader(File file)
  参数:读取文件的数据源
   String fileName:文件的路径
   File file:一个文件
  FileReader构造方法的作用:
   1.创建一个FileReader对象
   2.会把FileReader对象指向要读取的文件

字符输入流的使用步骤:

1.创建FileReader对象,构造方法中绑定要读取的数据源
2.使用FileReader对象中的方法read读取文件
3.释放资源

int read() 读取单个字符并返回。

int read(char[] cbuf)一次读取多个字符,将字符读入数组。

java. io. Writer :字符输出流,是所有字符输出流的最顶层的父类,是一个抽象类

共性的成员方法:

void write(int c)写入单个字符。
void write(char[] cbuf)写入字符数组。
abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
void write(String str)写入字符串。
void write(String str, int off, int Len) 写入字符串的某一 部分,off字符串的开始索引,Len写的字符个数。
void flush( )刷新该流的缓冲。
void close()关闭此流,但要先刷新它。

主要了解的是:
 FileWriter:文件字符输出流。
 作用:把内存中字符数据写入到文件中

构造方法:
  FileWriter(File file)根据给定的File 对象构造一个FileWriter 对象。
  Filewriter(string fiLeName) 根据给定的文件名构造一个Filewriter 对象。
  参数:写入数据的目的地
   String fileName :文件的路径
   File file:是一个文件

字符输出流的使用步骤:

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

void write(int c)写入单个字符。

写入数据的其他方法

续写与换行与字节流一模一样

Properties集合

Properties集合是一个唯一和IO流相结合的集合
 可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储
 可以使用Properties集合中的方法Load,把硬盘中保存的文件(键值对),读取到集合中使用
因为继承了Hashtable类,所以有map集合的性质

Properties集合的储存数据与遍历

Properties集合中的方法store

使用步骤:
1.创建Properties集合对象,添加数据
2.创建字节输出流/字符输出流对象,构造方法中绑定要输出的目的地
3.使用Properties集合中的方法store ,把集合中的临时数据持久化写入到硬盘中存储
4.释放资源

Properties集合中的方法Load

缓冲流

在原来IO流的基础上加上一个缓冲区,以提高程序运行的效率。
字节缓冲输出流

字节缓冲输入流

字符缓冲输出流
相比字符输出流特有的成员方法:void newline()写入一个行分隔符。会根据不同的操作系统,获取不同的行分隔符

字符缓冲输入流
相比字符输入流特有的成员方法:String readline() 读取一个文本行。读取一行数据。
 行的终止符号:通过下列字符之一即可认为某行已终止: 换行('\n')、 回车('\r') 或回车后直接跟着换行(\r\n)。
 返回值:
  包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回null

如果循环使用

转换流

在通过IO流储存与读取数据的时候,因为系统与编译器的编码表不一样,所以可能出现乱码的情况,为了防止这种情况所以在编码的时候可以指定以何种编码表进行编码

写的转换流

OutputStreamwriter:是字符流通向字节流的桥粱:可使用指定的charset 将要写入流中的字符编码成字节。(编码:把能看懂的变成看不懂)

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

读的转换流

InputStreamReader :是字节流通向字符流的桥梁:它使用指定的charset 读取字节并将其解码为字符。(解码:把看不懂的变成能看懂的)

使用步骤:
1.创建InputStreamReader对象。构造方法中传递字节输入流和指定的编码表名称

2.使用InputStreamReader对象中的方法read读取文件
3.释放资源

序列化

将对象储存到文件中称之为序列化,从文件里面读取出来称之为反序列化
objectOutputStream:对象的序列化流
 作用:把对象以流的方式写入到文件中保存
特有的成员方法:
 void write0bject(0bject obj)将指定的对象写入objec toutputStream。

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


需要注意的是所有需要序列化或者反序列化的类都必须要实现Serializable接口

反序列化

objectInputStream:对象的反序列化流。

作用:把文件中保存的对象,以流的方式读取出来使用
特有的成员方法:
object readobject() 从ObjectInputStream读取对象。

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

反序列化的前提:

 1.类必须实现Serializable
 2.必须存在类对应的class文件
因此在反序列化的过程中需要抛出多个异常

打印流

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

1.只负责数据的输出,不负责数据的读取
2.与其他输出流不同,PrintStream 永远不会抛出IOException
3.有特有的方法,print, println
 void print (任意类型的值)
 void println(任意类型的值并换行)


还可以通过System.setOut方法传递打印流的目的地让System.out.println打印到文件当中

posted @ 2020-02-23 16:53  白短袖真的是百搭啊  阅读(148)  评论(0编辑  收藏  举报