Java高级程序设计笔记 • 【第1章 IO流】

时间:2023-06-11 13:24:56

全部章节   >>>>


本章目录

1.1 File类访问文件

1.1.1 File 类

1.1.2 File 类方法

1.1.3 实践练习

1.2 文件过滤器

1.2.1 FilenameFilter接口

1.2.3 实践练习

1.3 字节流

1.3.1 I/O 流

1.3.2 I/O流分类

1.3.3 InputStream和OutputStream

1.3.4 FileInputStream和FileOutputStream

1.3.5 实践练习

1.4 字符流

1.4.1 控制台的输出

1.4.2 Reader类和Writer类

1.4.3 FileReader类

1.4.5 实践练习

总结:


1.1 File类访问文件

1.1.1 File 类

Java中可以使用 java.io.File类对文件、目录进行操作

File类可以执行新建、删除或重命名等操作,但是不能对文件内容进行操作

// 创建 file 对象
File file= new File("text.txt");
//创建file对象
File file= new File("D:\\text");

1.1.2 File 类方法

 File类提供了丰富的方法对文件/目录进行操作

方法名

作用

boolean createNewFile()

当此File对象所对应的文件不存在时,该方法将创建一个该File对象所指定的新文件,成功返回 true,否则返回 false

boolean delete()

删除 File 对象所对应的文件或路径

String getName()

返回此 File 对象所对应的路径名

String getPath()

返回任意文档内容

String getAbsolutePath()

返回此 File 对象所对应的绝对路径名

boolean exists()

判断 File 对象所对应的文件或目录是否存在

boolean isFile()

判断 File 对象所对应的是否是文件,true则代表是文件

Boolean isDirectory()

判断 File 对象所对应的是否是目录,而不是文件

Long length()

返回文件内容的字节长度

Boolean mkdir()

仅可以创建一个目录,创建成功返回 true,否则返回 false

Boolean mkdirs()

可创建多级目录,创建成功返回 true,否则返回 false

File[ ] listFiles()

返回 File 对象的所有的子文件和目录的 File 数组

String[ ] list()

返回 File 对象的所有的子文件和目录的 String 数组

示例:使用 File 类操作文件

Java高级程序设计笔记 • 【第1章 IO流】

// 创建 file 对象
File file= new File("H:\\text.txt");
if(!file.exists()){ // 判断该文件是否存在
System.out.println(" 该文件不存在 ");
try {
// 在H盘中创建 text.txt 文件
file.createNewFile();
System.out.println(" 该文件创建成功 ");
} catch (IOException e) {e.printStackTrace();} }
String fileName=file.getName();//获取文件名
String path=file.getPath();//获取路径
String absolutePath=file.getAbsolutePath();//绝对路径

示例:使用 File 类操作目录

Java高级程序设计笔记 • 【第1章 IO流】

Java高级程序设计笔记 • 【第1章 IO流】

// 创建 file 对象
File file = new File("H://text");
file.mkdir(); //创建1级目录
File file2 = new File("H://text2/text/name");
file2.mkdirs(); //多级目录
File file3 = new File("H://text3”); //text3目录存在
// 获取 file3 下的所有子目录和文件
File[] files = file3.listFiles();
int size = files.length;
System.out.println(" 该目录*有多少个子目录或子文件 :" + size);
for (int i = 0; i < size; i++) {
//可以通过files[i].isDirectory()判断是文件还是目录
}

1.1.3 实践练习

1.2 文件过滤器

1.2.1 FilenameFilter接口

Java中提供了FilenameFilter接口可以快速帮助实现文件的查找过滤

File 类的 list() 方法中可以接受一个 FilenameFilter 参数,通过该参数可以仅列出符合条件的文件

使用时需要实现FilenameFilter接口,且重写accept方法,该方法中完成对文件过滤的逻辑判断处理

示例:实现对.java和.ppt文件的过滤

public class MyFilenameFilter implements FilenameFilter {
// 重写 FilenameFilter 接口的 accept() 方法
public boolean accept(File dir, String name) {
// 如果文件名以“.java”或“.ppt”结尾,则返回true
return name.endsWith(".java") || name.endsWith(".ppt");
}
}

注意:

accept方法名必须遵循接口规范,保持一致 endsWith是判断是否以指定字符串结尾

示例:文件过滤调用

Java高级程序设计笔记 • 【第1章 IO流】

public static void main(String[] args) {
// 创建 file 对象指向目录
File file = new File("H:\text3");
// 使用了自定义的 MyFilenameFilter 类进行过滤返回符合的文件
String[] names = file.list(new MyFillenameFilter());
for (String name : names) {
System.out.println(name);
}
}

System.out.println(name);  这里输出都是以.java或.ppt结尾文件名

1.2.3 实践练习

1.3 字节流

1.3.1 I/O 流

File类只能对文件/目录进行操作,不能操作文件中的内容

如果想读写内容,则需要使用数据流,数据流是一串连续不断的数据的集合,数据如同管道供水般一段一段从一端流向另一端,并按先后顺序形成有序队列

Java 将所有的流类型都放在 java.io 包中,用于实现输入 / 输出功能

1.3.2 I/O流分类

1、按照流的流向进行分类,可以分为输入流和输出流

输入流:只能从中读取数据,而不能向其写入数据

Java高级程序设计笔记 • 【第1章 IO流】

输出流:只能向其写入数据,而不能从中读取数据

Java高级程序设计笔记 • 【第1章 IO流】

注意:

以程序为参照物,将数据从数据源中读取到程序内存的过程称为输入。

以程序为参照物,将数据从内存中写入到目标的过程称为输出。

2、按照数据格式,I/O 流分为字节流和字符流两大类

字节流:数据传输以字节形式实现,可以读写任何文件(文本、图片、视频等)

字符流:数据传输以字符形式实现,一般针对文本文件读写更有优势

3、流读写应用  

程序中的数据存储、读取

文件复制、粘贴

网络中文件传输、下载等

1.3.3 InputStream和OutputStream

字节流中的输入流常用方法由顶层抽象父类InputStream决定,常用方法如下

方法名

作用

public abstract int read()

从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转换为 int 类型)

public int read(byte[ ] b)

从输入流中最多读取 b.length 个字节的数据,并将其存储在字节数组中,返回实际读取的字节数

public void close()

将输入流所占用的资源释放关闭

字节流中的输出流常用方法由顶层抽象父类OutputStream决定

方法名

作用

public abstract void write(int b)

将指定的字节写入到输出流中

public void write(byte[ ] b)

将字节数组中的数据写入到输出流中

public void write(byte[ ] b,int off,int len)

将字节数组中从 off 位置开始,长度为 len 的字节

写入到输出流中

public void flush()

刷新缓冲区

public void close()

将输出流所占用的资源释放关闭

注意:InputStream和OutputStream均为抽象类,具体的操作由子类实现

1.3.4 FileInputStream和FileOutputStream

1、FileInputStream

FileInputStream 是 InputStream 的子类,该类用于将文件的数据读取到程序中。

示例: 使用输入流读取文件

Java高级程序设计笔记 • 【第1章 IO流】

// 创建文件实例
File file = new File("H:\note.txt");
// 创建 FileInputStream 实例
FileInputStream fis = new FileInputStream(file);
// 创建字节数组,用于保存从文件中读取到程序中的数据
byte[] byt = new byte[(int) file.length()];
// 读取文件中的数据,保存至 byt 字节数组中
fis.read(byt);
// 将字节数组转换为字符串
String data = new String(byt);
System.out.println("H:\note 文件中的数据 :" + data)

Java高级程序设计笔记 • 【第1章 IO流】

2、FileOutputStream

FileOutputStream是outputStream 的子类,该类用于将程序中的数据写入到指定文件中

示例:使用输出流将内容写入到文件

Java高级程序设计笔记 • 【第1章 IO流】

Java高级程序设计笔记 • 【第1章 IO流】

File file = new File("H:\note.txt");
FileOutputStream fos = new FileOutputStream(file);
String data = "Hello Word";
// 将字符串转换为字节数组
byte[] byt = data.getBytes();
// 将字节数组写入到文件中
fos.write(byt);

提示:使用完毕需要关闭输入输出流对象,以释放资源

1.3.5 实践练习

1.4 字符流

1.4.1 控制台的输出

字节流用于处理字节文件,虽然可以处理字符文件,但不适合

字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,对于常用文本、中文处理起来更加容易

注意:生活中我们面对的文本都是基于字符,所以字符流操作文本更好

1.4.2 Reader类和Writer类

1、Reader类

字符流中的输入流常用方法由顶层抽象父类Reader决定

方法名

作用

public int read()

从输入流中读取字符,返回读取字符数据

public int read(char[ ] c)

从输入流中最多读取 c.length 个字符的数据,并将其存储在字符数组中,返回实际读取的字符数

public abstract void close()

将输入流所占用的资源释放关闭

2、Writer类

字符流中的输出流常用方法由顶层抽象父类Writer决定

方法名

作用

public void write(String str)

将字符串 str 写入到指定的输出流中

public void write(char [ ] c)

将字符数组中的数据写入到输出流中

public abstract void flush()

刷新缓冲区

public abstract void close()

将输出流所占用的资源释放关闭

注意:Reader和Writer均为抽象类,具体的操作由子类实现

1.4.3 FileReader类

FileReaderReader的子类,该类用于将文本文件的数据读取到程序中

FileWriterWriter的子类,该类用于将程序中的文本写入到文件中

 需求:使用字符输入和输出流实现文本文件的拷贝

Java高级程序设计笔记 • 【第1章 IO流】

示例:

// 创建 FileReder 对象
FileReader fd = new FileReader("H:\wen.txt");
// 创建 FileWriter 对象
FileWriter fw = new FileWriter("H:\ 古诗 .txt");
int data;
// 循环读取文件中的字符,读取到文件末尾,则返回 -1
while ((data = fd.read()) != -1) {
// 将数据写入到文件中
fw.write(data);
}
// 将字符串写入到文件中
fw.write("\r\n 王建唐代古诗《辽东行》!");

Java高级程序设计笔记 • 【第1章 IO流】

提醒:如果写入后有乱码,可以将记事本文件另存为UTF-8编码格式

1.4.5 实践练习

总结:

  • Java中的File类提供了大量的方法对文件或目录进行操作
  • 使用FilenameFilter接口可以辅助实现文件过滤功能
  • IO流主要用于读写文件,按功能可以分为输入流、输出流,按内容格式可以分为字节流、字符流
  • 字节流可以读写任何文件,包括文本文件、音视频等,字符流只能读写文本文件
  • FileInputStream和FileOutputStrem是基于字节流的输入、输出流操作类 Reader和Writer是基于字符的输入、输出流操作类