Java进阶API第六章
2023-12-16 17:35:36
Java进阶API第六章
一.相对论和IO流之说?
- 词典中
Stream
的意思是有方向性的流动的液体/电流,强调过程 - 理解
I/O Stream
可以看作是输入/输出方向的流体
从相对论的角度看待 I/O流?
如.国家水库向你家输水,国家水库相当于输出水,你家相当于输入水。?
使用说I/O要有源头,要有目的,中间还有要管道。
二.汉语文学理解IO流与图解IO流
?1.汉语文学理解IO流
- 解释流这个词,像水流的东西输入/输出
- 有一个物体会流动,像水一样,有输入和输出两种方式或者两种方向
2.?图解IO流
数据源可以是图中1.程序,2.文件或数据库,3.服务器。?从图中可以理解对程序而言读取软件是input。
反之写入output。
?三.InputStream和OutPutStream
终极静态父类
- I/O流就是用来管理各种数据的输入和输出,在这个包中有两个终极静态父类,
InputStream
和OutputStream
- 这两个类提供和数据操作相关的方法,后有其他不同类型的数据控制子类来继承这两个类
InputStream
专门管理数据的读相关操作,OutputStream
专门管理数据的写相关操作。
- Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
- Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
- 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
- Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。
- 但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
四.FileInputStream字节流读取文件
leInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等。
我们创建一个文件,并写好内容。?
?
public void inputFile() throws IOException {
// 要抛出异常IOException
FileInputStream fileInputStream = new FileInputStream("D:\\touch.txt");
// 1. read( )函数 :该函数的返回值为int数值,
// 表示读取的字符对应的ascii码,当返回为-1表示读取到文件末尾;
int temp = 0;
while ( (temp = fileInputStream.read()) != -1) {
System.out.print((char)temp);
}
// 关闭IO流资源,防止内存占用
fileInputStream.close();
}
五.FileOutPutStream字节流写入文件?
public void inputFile() throws IOException {
// 要抛出异常IOException
FileOutputStream fileOutputStream = new FileOutputStream("D:\\touch.txt");
// getBytes()方法可以将字符串转换成数组
byte[] bytes = "fuck_PPT".getBytes();
// 使用write()方法写入
for (int i = 0; i < bytes.length; i++) {
fileOutputStream.write(bytes[i]);
}
fileOutputStream.close();
}
六.buff缓冲复制文件?
?任务:复制照片
public void inputFile() throws IOException {
FileInputStream fileInputStream = new FileInputStream("D:\\照片\\one.png");
FileOutputStream fileOutputStream = new FileOutputStream("D:\\照片\\two.png");
// 缓存区,以1KB的大小读,连续读取写入
// 如果没有缓冲区,会以一个字节一个字节的搬运,非常慢。
byte[] buff = new byte[1024];
int temp = 0;
// 读
while ( (temp = fileInputStream.read(buff)) != -1) {
// 写,括号内表示从零开始以1KB为单位持续搬运。
fileOutputStream.write(buff,0,temp);
}
fileInputStream.close();
fileOutputStream.close();
}
七.buffered字节缓冲流、装饰设计模式?
?上面说了定义缓冲区可以加快读取与写入。其实Java中已经存在带有缓冲区的字节流。可以更快的读取与写入。所以上面的复制照片有,更好的方法。
public void copyFileBase() throws IOException{
// 装饰设计模式
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("D:\\照片\\one.png"));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("D:\\照片\\two.png"));
int by;
while ( (by = bufferedInputStream.read()) != -1){
bufferedOutputStream.write(by);
}
bufferedInputStream.close();
bufferedOutputStream.close();
}
八.FileReader和FileWriter,俩专门来搞定txt文件??
上面说的是字节流,可以读取与写入任何文件。下面的字符流,只能读取与写入txt文件。
FileReader
类从InputStreamReader
类继承而来。该类按字符读取流中数据FileWriter
?类从OutputStreamWriter
?类继承而来。该类按字符向流中写入数据
@Test
public void fileReaderTest() throws IOException{
FileReader fileReader = new FileReader("D:\\1.txt");
int ch;
while ( (ch = fileReader.read()) != -1){
System.out.print((char) ch);
}
fileReader.close();
}
@Test
public void fileWriteTest() throws IOException{
FileWriter fileWriter = new FileWriter("D:\\2.txt");
fileWriter.write("your fuck");
fileWriter.close();
}
由上面的例子可以看出,使用方法与字节流一样。?
查看源码其实就可以知道,字符流的本质就是调用字节流。所以他们的字符缓存流与字符缓存流调用方法一样。
九.BufferedReader、BufferedWriter?
@Test
public void bufferedWriterTest() throws IOException{
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\3.txt"));
bufferedWriter.write("one");
// 换行newLine()方法
bufferedWriter.newLine();
bufferedWriter.write("two");
bufferedWriter.close();
}
@Test
public void bufferedReaderTest() throws IOException{
BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\3.txt"));
// 字符流,所以使用String接收更合理
String ch;
// 使用readLine()方法取,可以一行一行的读,
// 使用的是String,所以不能为空
while ( (ch = bufferedReader.readLine()) != null){
System.out.println(ch);
}
bufferedReader.close();
}
十.各种流的体验
java.io (Java SE 11 & JDK 11 ) (runoob.com)
十一.Apache Common IO?
引入架包:Maven Repository: commons-io ? commons-io (mvnrepository.com)?
引入方法:前几章说过
package com.io;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
public class IoTest {
@Test
public void CommonsIoTest() throws IOException {
File fileB = new File("D:\\1.txt");
// 判断文件是否存在,不存在创建
if(!fileB.exists()){
fileB.createNewFile();
}
// 文件添加内容
FileUtils.writeLines(fileB,new ArrayList<>(Collections.singleton("\n you you")),true);
}
}
?
文章来源:https://blog.csdn.net/2301_76556912/article/details/134872530
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!