2024春季蓝旭工作室培训第三周预习

目录

前言

一、Java IO流基础

1.1什么是IO流

1.2Java中的IO流

1.2.1导包

 1.2.2Java中的流

 二、部分IO流的使用

2.1文件专属

2.1.1java.io.FileInputStream

2.1.2java.io.FileOutputStream

2.1.3java.io.FileReader

2.1.4java.io.FileWriter

2.2缓冲流专属和转换流

2.2.1java.io.BufferedReader和java.io.InputStreamReader

2.2.2java.io.BufferedWriter和java.io.OutputStreamWriter

2.3标准输出流

2.3.1java.io.PrintStream

三、File类

 四、Path类


前言

这篇文章主要学习了Java的IO流、File和Path等知识。


一、Java IO流基础

1.1什么是IO流

IO易知是input和output,即输入和输出。通过IO流,我们可以将数据在硬盘上读写

IO流的分类:

  • 按照IO流的方向来分:我们把数据去往内存中的过程称为输入,即为读;把数据从内存中取出的过程称为输出,即为写
  • 按照读取数据的方式不同:我们把按照字节来读取数据(即一次一个字节)的方式称为字节流;把按照字符来读取数据的方式称为字符流

对于字节流和字符流:字节流适用于任何文件,是万能的,包括视频文件、文本文件、图片、声音文件……而字符流仅适用于纯文本文件(能用记事本打开的任何文件)。

1.2Java中的IO流

1.2.1导包

 注意:

  • 这四个都是抽象类
  • 这四个都实现了java.io.Closeable接口,都有.close()方法。用来关闭流
  • 这四个都实现了java.io.Flushable接口,都有.flush()方法。用来刷新流。(用于清空)
  • 小tip:java中类名以“Stream”结尾都是字节流以“Reader/Writer”结尾都是字符流

 1.2.2Java中的流

文件专属
  • java.io.FileInputStream
  • java.io.FileOutputStream
  • java.io.FileReader
  • java.io.FileWriter

转换流(将字节流转换成字符流)

  • java.io.InputStreamReader
  • java.io.OutputStreamWriter

缓冲流专属

  • java.io.BufferedReader
  • java.io.BufferedWriter
  • java.io.BufferedInputStream
  • java.io.BufferedOutputStream

数据流专属

  • java.io.DataInputStream
  • java.io.DataOutputStream

标准输出流

  • java.io.PrintWriter
  • java.io.PrintStream

对象专属流

  • java.io.ObjectInputStream
  • java.io.ObjectOutputStream

File文件类

  • java.io.File

 二、部分IO流的使用

2.1文件专属

2.1.1java.io.FileInputStream

构造方法:

构造方法名备注
FileInputStream(String name)name为文件路径
FileInputStream(File file)

 一般方法:

方法名作用
int read()读取一个字节,返回值为该字节ASCII码;读到文件末尾返回-1
int read(byte[] b)读b数组长度的字节到b数组中,返回值为读到的字节个数;读到文件末尾返回-1
int read(byte[] b, int off, int len)从b数组off位置读len长度的字节到b数组中,返回值为读到的字节个数;读到文件末尾返回-1
int available()返回文件有效的字节数
long skip(long n)跳过n个字节
void close()关闭文件输入流

 实践代码:

 文本文档:

运行结果:

1 2 3
 4 5 
6 7 8
 9 1 
2 3 4
 5 6 
7 8 9

由此带上空格共计35个字节,因为数字都是在byte型范围里面。要是我们把其中一个数改一下(*是为了显示更清楚):

运行结果:

255*2
*3*4*
5*6*7
*8*9*
1*2*3
*4*5*
6*7*8
*9

 嘿!我们发现变了。其中255占三个字节,每个数字分别占一字节。

2.1.2java.io.FileOutputStream

构造方法:

FileOutputStream(String name)name为文件路径
FileOutputStream(String name, boolean append)name为文件路径,append为true表示在文件末尾追加为false表示清空文件内容,重新写入
FileOutputStream(File file)
FileOutputStream(File file, boolean append)append为true表示在文件末尾追加;为false表示清空文件内容,重新写入

一般方法:

void write(int b)指定字节写入文件中
void write(byte[] b)b.length个字节写入文件中
void write(byte[] b, int off, int len)b数组off位置开始,len长度的字节写入文件中
void flush()刷新此输出流强制写出所有缓冲的输出字节
void close()关闭文件输出流

实践代码:

原本我的文件夹里:

 可以看到没有tempFile2文件,但在运行完程序后:

这里就出现了该文件,当然,如果我们的文件本身就存在,我们可以选择在文件末尾添加。

在文件中,就完成了我们刚才的代码。 

2.1.3java.io.FileReader

FileReader 文件字符输入流,只能读取普通文本。读取文本内容时,比较方便,快捷。

构造方法:

FileReader(String fileName)name为文件路径
FileReader(File file)

 一般方法:

int read()读取一个字符返回值为该字符ASCII码读到文件末尾返回-1
int read(char[] c)读c数组长度的字节到c数组中,返回值为读到的字符个数读到文件末尾返回-1
int read(char[] c, int off, int len)从c数组off位置读len长度的字符到c数组中返回值为读到的字符个数;读到文件末尾返回-1
long skip(long n)跳过n个字符
void close()关闭文件输入流

实践代码:

 继续利用我们刚才创建的tempFile2.

运行结果:

abcd
abHe
llo 
Java
!!!a
bcda
bHel
lo J
ava!
!!

2.1.4java.io.FileWriter

FileWriter文件字符输出流。写。只能输出普通文本。在此,我们把tempFile2的内容删除,以便更好查看代码的运行。

构造方法:

FileWriter(String fileName)name为文件路径
FileWriter(String fileName, boolean append)name为文件路径,append为true表示在文件末尾追加;为false表示清空文件内容,重新写入
FileWriter(File file)
FileWriter(File file, boolean append)append为true表示在文件末尾追加;为false表示清空文件内容,重新写入

一般方法:

void write(int c)将指定字符写入文件中
void write(char[] c)将c.length个字符写入文件中
void write(char[] c, int off, int len)将c数组off位置开始,len长度的字符写入文件中
void write(String str)将字符串写入文件中
void write(String str, int off, int len)从字符串off位置开始截取len长度的字符串写入文件
void flush()刷新此输出流并强制写出所有缓冲的输出字符
void close()关闭文件输出流

实践代码:

 

运行结果:

 

2.2缓冲流专属和转换流

2.2.1java.io.BufferedReader和java.io.InputStreamReader

BufferedReader带有缓冲区的字符输入流。使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组。自带缓冲。InputStreamReader字节输入流转字符输入流

构造方法:

BufferedReader(Reader in)in为reader对象(可以是reader的实现类)

一般方法:

int read()读取一个字符,返回值为该字符ASCII码;读到文件末尾返回-1
int read(char[] c)读c数组长度的字节到c数组中,返回值为读到的字符个数;读到文件末尾返回-1
String readLine()读取文件一行
long skip(long n)跳过n个字符
void close()关闭文件输入流

实践代码:

运行结果:

 这是第一组测试是第一第二测试

更为简洁的,利用转换流上边的代码可以缩写:

2.2.2java.io.BufferedWriter和java.io.OutputStreamWriter

构造方法:

BufferedWriter(Writer out)out为Writer对象(可以是reader的实现类)

一般方法:

void write(int c)将指定字符写入文件中
void write(char[] c, int off, int len)将c数组off位置开始,len长度的字符写入文件中
void write(String str, int off, int len)从字符串off位置开始截取len长度的字符串写入文件
void flush()刷新此输出流并强制写出所有缓冲的输出字符
void close()关闭文件输出流

实践代码:

运行结果:

2.3标准输出流

2.3.1java.io.PrintStream

构造方法:

PrintStream(File file)
PrintStream(OutputStream out)
PrintStream(String fileName)fileName文件地址

一般方法:

println(参数类型不定 x)输出x带换行
print(参数类型不定 x)输出x不带换行
void flush()刷新此输出流并强制写出所有缓冲的输出字符
void close()关闭流

改变流的输出方向System.setOut(PrintStream对象)

实践代码:

哎!我们发现控制台里没有输出,输出到tempFile2文件中了。 

运行结果:

三、File类

一个File对象就代表了文件和目录路径名的抽象表示形式。

构造方法:

File(String pathname)pathname文件/文件夹路径

一般方法:

boolean delete()删除文件/文件夹
boolean exists()判断文件/文件夹是否存在
File getAbsoluteFile()获取文件/文件夹的绝对路径(返回值:File)
String getName()获得文件/文件夹名字
String getParent()获取文件/文件夹的父文件/文件夹
File getParentFile()获取文件/文件夹的父文件/文件夹(返回值:File)
String getPath()获取文件/文件夹的路径
boolean isDirectory()判断该文件/文件夹是不是文件夹
isFile()判断该文件/文件夹是不是文件
isHidden()判断该文件/文件夹是否隐藏
long lastModified()获取文件/文件夹最后一次修改时间
long length()获取文件大小;获取文件夹里面的文件个数
String[] list()获取文件夹的文件名字以String[]返回
File[] listFiles()获取文件夹的文件名字以File[]返回
boolean mkdir()创建文件/文件夹

实践代码:

运行结果:

tempFile3
null
tempFile3
true
false
false
false
81
2024-04-04 15:24:42

而且我们的文件也被创建:

 四、Path类

Path表示一个目录名序列,它的后面还可以跟一个文件名。它有绝对路径和相对路径两种形式。以根目录开始的是绝对路径,反之。特别的,Path类是一个抽象类。在IDEA上可以方便快速的创建Path对象。而与之相结合的还有Paths类。

 运行结果:

\Users\acton_zhang
pers\zhang\ThreadDemo.java
\bin
\Users\acton_zhang\bin

更多可以学习这篇文章


学习笔记 如有错误 日后修改(∗ᵒ̶̶̷̀ω˂̶́∗)੭₎₎̊₊♡

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值