文章目录
IO流的基本使用
前言
首先见名知意,Java 把 Input输入流 和 Output 输出流,统称为IO流。主要进行Java的文件操作。
Java中的IO流主要分为两大类,字节流和字符流。
关系如下图所示:
字节流可以处理任何类型的数据,如图片,视频等,字符流只能处理字符类型的数据。
一、字节流
字节流:
字节流以字节(8bit)为单位。
字节流可以处理任何类型的数据,如图片、txt、avi等。而
1.1:字节输入流对象的创建与基本使用
我们提前在该模块准备一个a.txt文件
可见,该文件中的内容只有abc
ackage FileInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Demo1 {
public static void main(String[] args) throws IOException {
/*
字节输入流FileInputStream
实现需求:读取文件中的数据(暂时不写中文)
实现步骤:
创建对象
读取资源
释放资源
*/
// 1 创建对象
FileInputStream fis=new FileInputStream("myio\\a.txt");
// 2 读取数据
int b1 = fis.read();
System.out.println((char)b1);
// 3 关闭
fis.close();
}
}
运行完成后,我们的控制台显示一个字符a,可见这种方式一次只能获取一个字节的内容。
这里我们要注意一些字节数输入流的细节。
/*
字节输入流的细节
1.创建字节输入流对象
细节1;如果文件不存在,就直接报错
Java为什么会这么设计
输出流:不存在,创建
输入流:不存在,报错 因为创建出来的文件是空的,没有意义
2.写数据
细节1:一次只读一个字节,读出来的是数据在Ascii上对应的数字
细节2:读到文件末尾了,read方法返回-1
3.释放资源
每次使用完流之后要记得释放资源
*/
1.2:字节输出流对象的创建与基本使用
package FileOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws IOException {
/*
字节输出流FileOutStream
实现需求:写出一段文字到本地文件中(暂时不写中文)
步骤:
创建对象
写出数据
释放资源
*/
// 1 创建对象
//写出 输出流 OutputStream
//本地文件 File
FileOutputStream fos=new FileOutputStream("myio\\b.txt");
//写入数据
fos.write(97);
//释放资源
fos.close();
}
}
运行完成后,我们发现,该项目下的出现了一个b.txt文件
此时字节输出完成。
这里我们要注意一些字节数输出流的细节。
/*
字节输出流的细节:
1;创建字节输出流对象
细节1:参数是字符串表示的路径或者是File对象都是可以的
细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
细节3;如果文件已经存在,则会清空文件
2:写数据
细节:writer方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符
97-->a
3:释放资源
每次使用完流之后都要释放资源
*/
1.3:字节输入流与字节输出流的批量使用
1.3.1:字节输入流:
package FileInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo5 {
public static void main(String[] args) throws IOException {
/*
public int read(byte[] buffer) 一次读一个字节数组数据
*/
// 1 创建对象
FileInputStream fis=new FileInputStream("myio\\a.txt");
// 2 读取
byte[] bytes=new byte[2];
//一次读取多个字节数据,跟数组的长度有关
int len = fis.read(bytes);
System.out.println(len);
String str=new String(bytes,0,len);
System.out.println(str);
len = fis.read(bytes);
System.out.println(len);
String str1=new String(bytes,0,len);
System.out.println(str1);
// 3 关闭
fis.close();
}
}
1.3.2:字节输出流:
package FileOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo3 {
public static void main(String[] args) throws IOException {
// 1 创建对象
FileOutputStream fos=new FileOutputStream("myio\\a.txt");
// 2 写出数据
// fos.write(97);
// fos.write(98);
byte[] bytes={97,98,99,100,101};
// fos.write(bytes);
fos.write(bytes,2,3);
// 3 释放资源
fos.close();
}
}
二、字符流
字符流:
字符流以字符为单位。根据码表映射字符,一次可能读多个字节。
字符流只能处理字符类型的数据。
.
2.1:字符输入流对象的创建与基本使用
提前准备一个a.txt文件
package charstream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
// 1 创建对象
FileReader fr=new FileReader("myio\\a.txt");
// 2 读取数据
char[] chars=new char[1024];//这里chars的长度关系到一次读取的长度
int len;
while ((len=fr.read(chars))!=-1){
System.out.println(new String(chars,0,len));
}
// 3 释放资源
fr.close();
}
}
运行后控制台打印以下内容
这里要注意的细节是:
// 读取数据
//字符流的底层也是字节流,默认也是一个字节一个字节的读取的
//如果遇到中文就会一次读取多个,GBK一次读两个字节,UTF-8一次读三个字节
2.2:字符输出流对象的创建与基本使用
字符输出流的使用比较简单
package charstream;
import java.io.FileWriter;
import java.io.IOException;
public class Demo3 {
public static void main(String[] args) throws IOException {
//Write 写
FileWriter fw=new FileWriter("myio\\输出.txt");
fw.write("你好啊?爱的速递");
fw.close();
}
}
运行完成后:该模块下会自动创建一个 输出.txt文件
该文件中的内容如下:
总结
今天的IO流基础知识就分享到这里。
关于IO流的内容还有很多很多,感兴趣的小伙伴请继续寻找资料学习哦。
下期再见!