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

2019-08-15  本文已影响0人  榆野铃爱

心得感悟

一开始总是会被长的英文吓到,英语考试也会这样,但学了一段时间Java后感觉没那么怕了,很长的名字或者方法名都司空见惯,算是一点额外收获吧。有个同学发现Java中可用中文命名,尝试这样写一个类或方法后再看代码突然变得很简单,想来外国人编程肯定轻松多了。IO流的各种方法名比较长又有点相似,弄混也是有可能的,认真理解练习后就不会混了。


1. 目的

2. 内容简概

3. 具体内容

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用于练习。

上一篇下一篇

猜你喜欢

热点阅读