全部章节   >>>>


本章目录

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. iOS-调用系统的短信和发送邮件功能,实现短信分享和邮件分享

    一.邮件分享 1.iOS系统自带邮件设置邮箱(此处以QQ邮箱为例)(http://jingyan.baidu.com/album/6181c3e084cb7d152ef153b5.html?picin ...

  2. Output of C++ Program | Set 4

    Difficulty Level: Rookie Predict the output of below C++ programs. Question 1 1 #include<iostream ...

  3. TCP协议三步挥手与四步挥手

    关于TCP协议 TCP(Transmission Control Protocol, 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.与之对应的是UDP(User Datagram ...

  4. VSCode上发布第一篇博客

    在VSCode上发布到博客园的第一篇博客 前段时间在VSCode安装好插件WriteCnblog,多次检查writeCnblog configuration配置信息也是完全正确的,但是一直没能在VSC ...

  5. 【C#】【MySQL】C#连接MySQL数据库(一)代码

    C#连接MySQL数据库 准备工作 1.环境安装 安装MySQL For Visual Studio<<点击进入官网下载 第一个要下载安装,第二个下载后将MySQL.data添加到Visu ...

  6. Grafana 任意文件读取漏洞 (CVE-2021-43798)学习

    漏洞概述 Grafana是一个跨平台.开源的数据可视化网络应用程序平台.用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告. Grafana 的读取文件接口存在未授权,且未对 ...

  7. Moment.js使用笔记

    零.前情提要 上个月开发了数据平台,用的框架是vue + Ant Design of Vue,其中用了组件[range-picker]日期选择框,涉及到时间方法就去看了momentJS,以此记录~ 如 ...

  8. Mysql脚本 生成测试数据

    使用: ./xie.sh -uroot -p'123456' #!/bin/bash #混合测试数据库脚本 #将创建一个single数据库,其中创建一个s1表 #如果数据库存在,将会写入数据,可以在写 ...

  9. Nginx日志分析脚本

    目录 一.简介 二.脚本 一.简介 运维工作是一个比较复杂的工作,有时候面对上万条的日志,如何作分析?难道一条条的分析? 这估计看两眼就要打哈欠了吧?聪明的人会选择脚本,这就是为什么现在提倡自动化运维 ...

  10. css预处理器和css Modules是干嘛的?

    CSS预处理器 1.css和js的区别 js是编程语言,它可以声明变量,编写逻辑.而css实际上只是个"表",表头是选择器,内容是里面的样式.它并不能写逻辑啥的.也就是说,对于cs ...