心得感悟
一开始总是会被长的英文吓到,英语考试也会这样,但学了一段时间Java后感觉没那么怕了,很长的名字或者方法名都司空见惯,算是一点额外收获吧。有个同学发现Java中可用中文命名,尝试这样写一个类或方法后再看代码突然变得很简单,想来外国人编程肯定轻松多了。IO流的各种方法名比较长又有点相似,弄混也是有可能的,认真理解练习后就不会混了。
1. 目的
- 一、理解Java中的流及用法
- 二、掌握文件的读写方法
- 三、利用上面的知识写一个密码解锁Demo
2. 内容简概
- 一、IO流概念及用法
- 二、常见字节流的简单讲解
- 三、常见字符流的简单讲解
- 四、各种流的对比
3. 具体内容
-
一、IO流概念及用法
1. 概念
JavaIO流,是一种计算机用语。主要是用于处理数据的传输。
2. 分类
IO流的分类
IO流有三种分类方式,按流的方向分为:输入流和输出流。按流的数据单位不同分为:字节流和字符流。按流的功能不同分为:节点流和处理流。在这里我们按数据单位来分类。从左至右为父类至子类。
-
二、常见字节流的简单讲解
(1)InputStream
将外部数据读取到内存中。
// 第1步、声明一个文件对象
File file = new File("文件地址/自定义文件名");
// 第2步、通过子类实例化父类对象
InputStream input = new FileInputStream(file);
// 第3步、进行读取操作
byte b[] = new byte[1024]; // 所有的内容都读到此数组之中
input.read(b);
// 第4步、关闭文件
input.close();
System.out.println("内容为:" + new String(b)); // 把byte数组变为字符串输出
(2)OutputStream
从内存空间将数据写入外部设备(硬盘\磁盘\光盘)。
// 第1步、声明一个文件对象
File file = new File("文件地址/自定义文件名"); // 声明File对象
// 第2步、通过子类实例化父类对象
OutputStream out = new FileOutputStream(file);
// 第3步、进行写入操作
String str = "Hello World!!!"; // 准备一个字符串
byte b[] = str.getBytes(); // 只能输出byte数组,所以将字符串变为byte数组
out.write(b); // 将内容输出,保存文件 文件不存在会自动创建
// 第4步、关闭文件
out.close() ;
(3)FileInputStream
文件字节输入流,指对文件数据以字节的形式进行读取操作如读取图片视频等。
// 第1步、声明一个文件对象
File file = new File("文件地址/自定义文件名");
// 第2步、创建文件输入流对象
FileInputStream fis = new FileInputStream(file);
// 第3步、调用read方法读取
byte[] name = new byte[12];
int count = fis.read(name);
// 第4步、关闭文件
fis.close();
System.out.println(count+" "+new String (name));
(4)FileOutputStream
文件字节输出流,指对文件以字节的形式进行写入数据。
// 第1步、声明一个文件对象
File file = new File("文件地址/自定义文件名");
// 第2步、创建文件输出流对象
FileOutputStream fos = new FileOutputStream(file);
// 第3步、调用write方法写入
byte[] text = {'1','2','3','4'};
fos.write(text);
// 第4步、关闭文件
fos.close();
(5)BufferedInputStream
文件字节输入流,指对文件数据以字节的形式进行读取操作如读取图片视频等。
// 第1步、找一个源文件的地址
String sourcePath = "C:/Users/ASUS/Desktop/1.PNG";
// 第2步、创建文件输入流对象
FileInputStream fin = new FileInputStream("file1.txt");
BufferedInputStream bin = new BufferedInputStream(fin);
// 第3步、读取文件
System.out.println(bin.available());
// 第4步、关闭文件
bis.close();
(6)BufferedOutputStream
文件字节输出流,指对文件以字节的形式进行写入数据。
// 第1步、找一个想要保存文件的地址
String desPath = "F:/homework/java/day1/java/src/main/java/day8/1.jpeg";
// 第2步、创建文件输出流对象
FileOutputStream os = new FileOutputStream(desPath);
BufferedOutputStream bos = new BufferedOutputStream(os);
// 第3步、写入文件
byte[] in = new byte[1024];
int count = 0;
while ((count = bis.read(in)) != -1){
bos.write(in,0,count);
}
// 第4步、关闭文件
bos.close();
-
三、常见字符流的简单讲解
(1)BufferedReader
文件字符输入流,指对文件数据以字符的形式进行读取操作如读取图片视频等。为了提高字符流读写的效率,引入了缓冲区,进行字符批量的读写,提高了单个字符读写的效率。
// 第1步、声明一个文件对象
File file = new File("文件地址/自定义文件名");
// 第2步、实例化BufferedReader对象
BufferedReader br = new BufferedReader(new FileReader(file));
// 第3步、读取数据
String str = null;
while((str = br.readLine()) != null){
System.out.println(str); //一行一行地读取
}
// 第4步、关闭文件
br.close() ;
(2)BufferedWriter
文件字符输出流,指从程序中向一个文件写入数据。为了提高字符流读写的效率,引入了缓冲区,进行字符批量的读写,提高了单个字符读写的效率。
// 第1步、声明一个文件对象
File file = new File("文件地址/自定义文件名");
// 第2步、实例化BufferedReader对象
BufferedReader br = new BufferedReader(new FileReader(file));
// 第3步、写入数据
BufferedWriter.Write("I'm so tired");
BufferedWriter.newLine();
BufferedWriter.write("I want to sleep!!!");
// 第4步、关闭文件
br.close() ;
(3)FileReader
按字符向流中写入数据。
// 第1步、声明一个文件对象
File file = new File("文件地址/自定义文件名");
// 第2步、实例化FileReader对象
FileReader fr = new FileReader(file);
// 第3步、读取数据
char[] book = new char[4];
int count = fr.read(book);
// 第4步、关闭文件
fr.close();
System.out.println(count+" "+new String (book));
(4)FileWriter
按字符写入数据.
// 第1步、声明一个文件对象
File file = new File("文件地址/自定义文件名");
// 第2步、实例化FileWriter对象
FileWriter fw = new FileWriter(file);
// 第3步、写入数据
char[] name = {'困','死','我','啦'};
fw.write(name);
// 第4步、关闭文件
fr.close();
-
四、各种流的对比
1. FileInputStream和BufferedInputStream、FileReader
- BufferedInputStream:一般情况下,BufferedInputStream比FileInputStream读取速度快,因为BufferedInputStream多了一个缓冲区,但当读取数据较大时,二者速度差不多。
- FileReader:FileInputStream是以字节流方式读取,而FileReader是把文件转换为字符流读取的。
2. FileOutputStream和BufferedOutputStream、FileWriter
- BufferedOutputStream:一般情况下,BufferedOutputStream比FileOutputStream写入速度快,因为BufferedOutputStream多了一个缓冲区,但当读取数据较大时,二者速度差不多。
- FileWriter:FileInputStream是以字节流方式写入,而FileReader是以字符流方式写入。
结语
在下一篇文章中,我将给出一个应用IO流的Demo用于练习。
网友评论