全部章节 >>>>
本章目录
1.3.3 InputStream和OutputStream
1.3.4 FileInputStream和FileOutputStream
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 类操作文件
// 创建 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 类操作目录
// 创建 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是判断是否以指定字符串结尾
示例:文件过滤调用
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、按照流的流向进行分类,可以分为输入流和输出流
输入流:只能从中读取数据,而不能向其写入数据
输出流:只能向其写入数据,而不能从中读取数据
注意:
以程序为参照物,将数据从数据源中读取到程序内存的过程称为输入。
以程序为参照物,将数据从内存中写入到目标的过程称为输出。
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 的子类,该类用于将文件的数据读取到程序中。
示例: 使用输入流读取文件
// 创建文件实例
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)
2、FileOutputStream
FileOutputStream是outputStream 的子类,该类用于将程序中的数据写入到指定文件中
示例:使用输出流将内容写入到文件
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类
FileReader是Reader的子类,该类用于将文本文件的数据读取到程序中
FileWriter是Writer的子类,该类用于将程序中的文本写入到文件中
需求:使用字符输入和输出流实现文本文件的拷贝
示例:
// 创建 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 王建唐代古诗《辽东行》!");
提醒:如果写入后有乱码,可以将记事本文件另存为UTF-8编码格式
1.4.5 实践练习
总结:
- Java中的File类提供了大量的方法对文件或目录进行操作
- 使用FilenameFilter接口可以辅助实现文件过滤功能
- IO流主要用于读写文件,按功能可以分为输入流、输出流,按内容格式可以分为字节流、字符流
- 字节流可以读写任何文件,包括文本文件、音视频等,字符流只能读写文本文件
- FileInputStream和FileOutputStrem是基于字节流的输入、输出流操作类 Reader和Writer是基于字符的输入、输出流操作类