| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 『Java练习生的自我修养』java-se进阶? ? 常用IO流 -> 正文阅读 |
|
[Java知识库]『Java练习生的自我修养』java-se进阶? ? 常用IO流 |
??书接上回?? IO之大,一篇文章放不下~ 前面我们已经对IO流有了一个大致的了解,在本文中我们先对上一篇文章中学到的内容做一个简单的总结,并将进一步学习各种IO流的使用方法。 🚀传送门🚀: 『Java练习生的自我修养』java-se进阶? ? IO流概览
🍍前情提要:🌵🌵任何程序都是有输入输出的,我们很难想象一个程序既不从用户那里得到点什么,也不向客户那里输出点什么东西。包括JavaWeb中的网络程序也需要接收客户端发来的请求,对请求内容进行一定的处理再发给客户端。任何一个程序都需要一种和外界打交道的方式,在Java语言中肯定也提供了处理输入输出的手段,我们叫它IO流。 🌴🌴前文中我们已经了解到Java中的IO流分为字节流与字符流,以及与之对应的四大抽象类InputStream、OutputStream,Reader、Writer,它们是所有IO流的父类~ 🌻🌻IO流可以分为节点流,它们直接直接从数据源读取数据,最为常用,阅读时请注意本文的所有常用流都属于节点流,它们直接与数据源打交道,下面我们一起来看看IO流中有哪些常用的实现类… 🍏工具类:
|
常用方法 | 描述 |
---|---|
构造方法:File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 |
boolean exists() | 测试此抽象路径名表示的文件或目录是否存在 |
boolean mkdir() | 创建由此抽象路径名命名的目录 |
long length() | 返回由此抽象路径名表示的文件的长度 |
boolean delete() | 删除由此抽象路径名表示的文件或目录 |
boolean createNewFile() | 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件 |
👉🏻学会了没?没学会…其实只需要知道File类的构造方法可以把文件变成对象,而且这个对象可以用来作为IO流构造方法的参数就行了…
(* ̄0 ̄)ノ
FileInputStream通过字节的方式读取文件,适合读取所有类型的文件(图像、视频、文本等)。FileOutputStream通过字节的方式写数据到文件中,同样适合所有类型的文件。
它的常用方法继承自抽象类InputStream与OutputStream,前面已经介绍过了,不再赘述,这里补充一个OutputStream下的flush()
方法,在使用write()
方法后数据不会立即写到磁盘中,而是将要写入的数据暂存到了内存,只有调用了flush()
后,数据才会写进磁盘。
🍦通过文件字节流实现一个拷贝图片的Demo~
public class Demo {
// IO流要声明异常,这里先都直接抛出,正确的做法是使用try...catch
public static void main(String[] args) throws IOException {
// 创建文件字节输入流对象
FileInputStream fis = new FileInputStream("E:/a/a.jpeg");
// 创建文件字节输出流对象
FileOutputStream fos = new FileOutputStream("E:/b/b.jpeg");
// 实现拷贝过程
int temp = 0;
while ((temp = fis.read()) != -1) {
fos.write(temp);
}
// 将数据从内存中写入到磁盘中
fos.flush();
// 关闭流
fis.close();
fos.close();
}
}
?看下效果(看来没翻车)
文件字符流以字符为单位进行操作,如果我们处理的是文本文件,可以使用文件字符流。
🍦实现一个拷贝.txt文件的Demo~
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
// 字符流同字节流大同小异,步骤基本相同
// 代码规范,这次使用try...catch捕获异常
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("E:/a/a.txt");
fw = new FileWriter("E:/b/b.txt");
int temp = 0;
while ((temp = fr.read()) != -1) {
fw.write(temp);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fr != null)
fr.close();
if (fw != null)
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
?看下效果:
在Java的IO流中专门提供了用于字符输出的流对象PrintWriter。该对象具有自动行刷新缓冲字符输出流(不需要再调用flush()
方法),特点是可以按行写出字符串,并且可以通过println()
方法实现自动换行。
🍦向test.txt
中写入三行文字,每次直接写入一行~
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class Demo {
public static void main(String[] args) {
// 创建待写入字符串
String str1 = "你好";
String str2 = "Hello,World";
String str3 = "世界!";
PrintWriter pw = null;
try {
// 创建PrintWrite对象
pw = new PrintWriter("E:/test.txt");
// 写入字符,每次写入一行
pw.println(str1);
pw.println(str2);
pw.println(str3);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
// 关闭IO流
if (pw != null)
pw.close();
}
}
}
?看下效果:
ByteArrayInputStream和ByteArrayOutputStream经常用在需要流和数组之间转化的情况。
字节数组输入流:
FileInputStream的数据源是文件,而ByteArrayInputStream是把内存中的“字节数组对象”当作数据源。
🍦从字符串数组中读取内容的Demo~
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
byte[] bytes = "Hello,World!".getBytes();
ByteArrayInputStream bis = null;
// 使用StringBuilder接收读取的内容
StringBuilder sb = new StringBuilder();
try {
// ByteArrayInputStream构造方法不需要声明异常
bis = new ByteArrayInputStream(bytes);
int temp = 0;
while ((temp = bis.read()) != -1) {
sb.append((char) temp);
}
} finally {
if (bis != null) {
// 构造方法不需要声明异常,但是close()方法需要
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 打印StringBuilder
System.out.println(sb);
}
}
?运行结果:
字节数组输出流:
将流中的数据写入到字节数组中。
🍦将'a'
、'b'
、'c'
三个字符写入到数组中的小Demo~
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
ByteArrayOutputStream bos = null;
byte[] bytes = null;
try {
// 创建字节数组输出流对象
bos = new ByteArrayOutputStream();
// 写入三个字符
// write()方法参数为int型变量,直接使用字符Java可以自动转换
bos.write('a');
bos.write('b');
bos.write('c');
// 写入的内容会缓存,使用toByteArray方法返回一个数组,将缓存内容输出
bytes = bos.toByteArray();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 输出数组看一下结果
System.out.println(Arrays.toString(bytes));
}
}
?运行结果:
🍍🍍🍍
创作不易,如果觉得本文对你有所帮助,欢迎点赞、关注、收藏。🙇🏻?♀?
🍉🍉🍉
@作者:Mymel_晗,计算机专业练习时长两年半的Java练习生~🏃🏻?♂?🏀
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:05:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |