Java高级程序设计笔记 • 【第1章 IO流】
全部章节 >>>>
本章目录
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是基于字符的输入、输出流操作类
Java高级程序设计笔记 • 【第1章 IO流】的更多相关文章
- Java高级程序设计笔记 • 【目录】
持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java高级程序设计作业目录(作业笔记) 第1章 Java高级程序设计笔记 • [第1章 IO流] 第2章 Java高级程序设 ...
- Java高级程序设计笔记 • 【第6章 设计模式】
全部章节 >>>> 本章目录 6.1 设计模式 6.1.1 设计模式概述和分类 6.1.2 单列模式介绍 6.1.3 单例模式的实现 6.1.4 实践练习 6.2 单例模式 ...
- Java高级程序设计笔记 • 【第5章 XML解析】
全部章节 >>>> 本章目录 5.1 XML 文档概述 5.1.1 XML文档结构 5.1.1 XML结构说明 5.1.1 XML文档元素 5.1.2 XML文档语法规范 ...
- Java高级程序设计笔记 • 【第4章 网络编程】
全部章节 >>>> 本章目录 4.1 网络基础知识 4.1.1 IP地址 4.1.2 端口号 4.1.3 使用InetAddress 4.1.4 InetAddress 类 ...
- Java高级程序设计笔记 • 【第3章 多线程(二)】
全部章节 >>>> 本章目录 3.1 同步代码块 3.1 线程安全 3.1.1 模拟银行取款 3.1.2 同步代码块的使用 3.1.3 实践练习 3.2 同步方法 3.2. ...
- Java高级程序设计笔记 • 【第2章 多线程(一)】
全部章节 >>>> 本章目录 2.1 线程的概述 2.1.1 进程 2.1.2 多线程优势 2.1.3 Thread 类 2.1.4 实践练习 2.2 Runnable接口 ...
- Javascript高级程序设计笔记 <第五章> 引用类型
一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...
- Java高级程序设计作业目录(作业笔记)
持续更新中............. Java高级程序设计笔记 • [目录] 我的大学笔记>>> 第1章 IO流>>> 1.1.3 编写Java程序,在电脑硬盘里, ...
- Java Web程序设计笔记 • 【目录】
章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...
随机推荐
- swift 实现QQ好友列表功能
最近项目中有类似QQ好友列表功能,整理了一下,话不多说,直接上代码 import UIKit class QQFriend: NSObject { var name: String? var intr ...
- Android Menu的基本用法
使用xml定义Menu 菜单资源文件必须放在res/menu目录中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于设置菜单项和分组 ...
- Oracle decode和case的区别
case在SQL中有两种写法,先建立一个表create table salgrade(grade int, sal int);insert into salgrade values(1,1000);i ...
- MyBatis常用批量方法
<!-- 批量添加派车单子表数据 --> <insert id="addBatch" parameterType="java.util.List&quo ...
- 统计网卡流量的两段shell脚本(使用ifconfig)
一个很小巧的shell脚本,使用ifconfig的不间断输出来统计网卡的流量,有需要的朋友可以参考下 使用shell脚本计算Linux网卡流量,方法中最关键点: ifconfig $eth_name ...
- C语言实现鼠标绘图
使用C语言+EGE图形库(Easy Graphics Engine).思路是通过不断绘制直线来实现鼠标绘图的功能,前一个时刻鼠标的坐标作为直线的起点,现在时刻的坐标作为终点(严格意义是线段而不是直线) ...
- PostgreSql数据库安全加固
1.确保通过"主机" TCP / IP套接字登录已正确配置 描述 大量的身份验证方法可用于使用 TCP / IP套接字,包括: ?信任 ? 拒绝 ?md5 ?scram-sha-2 ...
- Python绘制折线图
一.Python绘制折线图 1.1.Python绘制折线图对应代码如下图所示 import matplotlib.pyplot as pltimport numpy as np from pylab ...
- 【二进制】CTF-Wiki PWN里面的一些练习题(Basic-ROP篇)
sniperoj-pwn100-shellcode-x86-64 23 字节 shellcode "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\ ...
- LuoguB2078 含 k 个 3 的数 题解
Content 给定一个数 \(n\),判断其数位中是否恰好有 \(k\) 个 \(3\). 数据范围:\(1<n\leqslant 10^{15}\),\(1<k\leqslant 15 ...