全部章节   >>>>


本章目录

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 类操作文件

// 创建 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类

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

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

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

示例:

// 创建 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是基于字符的输入、输出流操作类

Java高级程序设计笔记 • 【第1章 IO流】的更多相关文章

  1. Java高级程序设计笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java高级程序设计作业目录(作业笔记) 第1章 Java高级程序设计笔记 • [第1章 IO流] 第2章 Java高级程序设 ...

  2. Java高级程序设计笔记 • 【第6章 设计模式】

    全部章节   >>>> 本章目录 6.1 设计模式 6.1.1 设计模式概述和分类 6.1.2 单列模式介绍 6.1.3 单例模式的实现 6.1.4 实践练习 6.2 单例模式 ...

  3. Java高级程序设计笔记 • 【第5章 XML解析】

    全部章节   >>>> 本章目录 5.1 XML 文档概述 5.1.1 XML文档结构 5.1.1 XML结构说明 5.1.1 XML文档元素 5.1.2 XML文档语法规范 ...

  4. Java高级程序设计笔记 • 【第4章 网络编程】

    全部章节   >>>> 本章目录 4.1 网络基础知识 4.1.1 IP地址 4.1.2 端口号 4.1.3 使用InetAddress 4.1.4 InetAddress 类 ...

  5. Java高级程序设计笔记 • 【第3章 多线程(二)】

    全部章节   >>>> 本章目录 3.1 同步代码块 3.1 线程安全 3.1.1 模拟银行取款 3.1.2 同步代码块的使用 3.1.3 实践练习 3.2 同步方法 3.2. ...

  6. Java高级程序设计笔记 • 【第2章 多线程(一)】

    全部章节   >>>> 本章目录 2.1 线程的概述 2.1.1 进程 2.1.2 多线程优势 2.1.3 Thread 类 2.1.4 实践练习 2.2 Runnable接口 ...

  7. Javascript高级程序设计笔记 <第五章> 引用类型

    一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...

  8. Java高级程序设计作业目录(作业笔记)

    持续更新中............. Java高级程序设计笔记 • [目录] 我的大学笔记>>> 第1章 IO流>>> 1.1.3 编写Java程序,在电脑硬盘里, ...

  9. Java Web程序设计笔记 • 【目录】

    章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...

随机推荐

  1. mysql外键策略

    1.外键 建表时添加外键:constraint 外键名 foreign key 从表字段 references 主表字段 级联操作 create table dage( create table xi ...

  2. JVM——内存分配与回收策略

    1.对象优先在Eden区分配 大多数情况下,对象在新生代Eden区分配.当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC. 虚拟机提供了 -XX:+PrintGCDetails这 ...

  3. Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  4. js处理title超长问题

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. 分布式系统为什么不用自增id,要用雪花算法生成id???

    1.为什么数据库id自增和uuid不适合分布式id id自增:当数据量庞大时,在数据库分库分表后,数据库自增id不能满足唯一id来标识数据:因为每个表都按自己节奏自增,会造成id冲突,无法满足需求.  ...

  6. vueAPI (data,props,methods,watch,computed,template,render)

    data Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter/setter,从而让 data 的属性能够响应数据变化.实例创建之后,可以通过vm.$data来访问原始数据 ...

  7. frp实现基于反向代理的内网穿透

    个人博客主页: xzajyjs.cn frp是什么 简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP.TCP.UDP等众多协议 ...

  8. Jmeter——SMTP Sampler发送邮件

    在平时测试过程中,也会出一些测试报告,那jmeter在不依托其他工具的情况下,可不可以发送邮件呢,自然是可以的. 我们直接使用SMTP Sampler即可. SMTP Sampler参数 我们来添加个 ...

  9. 转:Android preference首选项框架

    详解Android首选项框架ListPreference 探索首选项框架 在 深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写一个应用 ...

  10. 联盛德 HLK-W806 (十二): Makefile组织结构和编译流程说明

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...