美文网首页
【Java学习】IO流类型及用法

【Java学习】IO流类型及用法

作者: 榆野铃爱 | 来源:发表于2019-08-15 00:22 被阅读0次

心得感悟

一开始总是会被长的英文吓到,英语考试也会这样,但学了一段时间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用于练习。

相关文章

  • 【Java学习】IO流类型及用法

    心得感悟 一开始总是会被长的英文吓到,英语考试也会这样,但学了一段时间Java后感觉没那么怕了,很长的名字或者方法...

  • IO

    一 IO中各个流的基本用法 参考: java中的IO整理 二 IO体系 参考:看完这个,Java IO从此不在难 ...

  • Java学习Day17

    今日学习内容总结 字符流的输入及输出 Properties IO流 字符流 字符输入流【Reader】 java....

  • JavaSE Day19 IO

    1. Java 中常用的 I/O 流常用类型在哪个包?常用类型有哪些? I/O 流的常用类型都在 java.io ...

  • Java IO 节点流和字符流 学习 + 案例分析

    Java IO 节点流和字符流 学习 + 案例分析

  • Java的IO & NIO

    IO流学习总结一Java IO,硬骨头也能变软二java IO体系的学习总结三Java IO面试题 NIO与AIO...

  • Java之IO流详解

    title: Java之IO流详解tags: Java IO流categories: Java IO流 大多数应用...

  • Java IO流

    Java IO流 都定义在java.io包中,定义了多个流类型(类或 抽象类)来实现输入/输出功能;可以从不同角度...

  • java_io

    java.io.File类的使用IO原理及流的分类  |---文件流   操作对象是文件     FileInp...

  • Java基础-io知识回顾

    Java拾遗系列- io知识 简介 io分类及相关实例3.总结 1.简介 2.io分类及相关应用 2.1 io流...

网友评论

      本文标题:【Java学习】IO流类型及用法

      本文链接:https://www.haomeiwen.com/subject/itpnjctx.html