JAVA IO系统:输入输出流(下)

流的概念

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。该怎么理解这个流呢?这里我们完全可以类比这水流去理解,只不过我们这里的流指的则是数据了,结合两个概念“流”和“数据”也就得到我们的重点数据流,就如同我们的水流一样,对于水流,那流入流出的都是水,而我们的数据流流入流出的自然就是数据了。

那么IO又是什么呢?I可理解为input,O可理解为output,其实所谓的IO,我认为就是输入输出,对于IO我们可以如下分类:

根据处理数据类型的不同分为:字符流和字节流

根据数据流向不同分为:输入流和输出流

输入(Input):可以让程序从外部系统获得数据(核心含义是“读”,读取外部数据)。

输出(Output):程序输出数据给外部系统从而可以操作外部系统(核心含义是“写”,将数据写出到外部系统)

字符流与字节流的区别:

1)字节流可用于任何类型的对象,包括二进制对象,音频、图片等,而字符流只能处理字符或者字符串;

2)字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以

Java流类图结构:

字节流

FileInputStream

构造方法:

1)FileInputStream(File file):通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。

2)FileInputStream(FileDescriptor fdObj):创建 FileInputStream通过使用文件描述符 fdObj ,其表示在文件系统中的现有连接到一个实际的文件。

3)FileInputStream(String name):通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

FileInputStream读取文本

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FileStreamTest {
	public static void main(String[] args) throws IOException {
		File file = new File("E:\\test\\test.txt");
		//为什么要定义这么一个数组,我们看这个byte数组其实就是1kb大小,我们之前是一个字节一个字节读取,我们现在是1kb1kb的去读
		byte[] bytes = new byte[1024];  //1kb
		FileInputStream fileInputStream = new FileInputStream(file);
		
		//现在传入一个byte数组意味着按照byte数组大小读取,然后读取到的文本内容存放在这个byte数组中再返回一共读取的字节数
		int read = fileInputStream.read(bytes);
		//需要对这个读取到的byte数组进行转换
		String s = new String(bytes);

                System.out.println(s);//打印读取到的内容
                System.out.println(read);//13
		
	}

}

FileOutputStrem

构造方法:

​​​​​​1)FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件

2)FileOutputStream(File file, boolean append):创建文件输出流以写入由指定的 File对象表示的文件。

3)FileOutputStream(FileDescriptor fdObj):创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。

4)FileOutputStream(String name):创建文件输出流以指定的名称写入文件。

5)FileOutputStream(String name, boolean append):创建文件输出流以指定的名称写入文件。

FileOutputStrem写入文本

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileStreamTest {
	public static void main(String[] args) throws IOException {
		
		
		File file = new File("E:\\test\\test.txt");
		byte[] bytes = new byte[1024];  //1kb
		FileInputStream fileInputStream = new FileInputStream(file);
		int read = fileInputStream.read(bytes);
                FileOutputStream fileOutputStream = new FileOutputStream(file,true);
                //这里增加了一个true,什么意思呢?这里如果你不写的话默认就是false,那么你写入文本的时候就会覆盖之前的内容,但是如果你加上true的话就代表在原有文本之后追加
                fileOutputStream.write(bytes);
	}

}

字符流

InputStremReader读取文本

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileStreamTest {
	public static void main(String[] args) throws IOException {
		
		File file = new File("E:\\test\\words.txt");
		char[] c = new char[64];

		FileInputStream fileInputStream = new FileInputStream(file);
		InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"gbk");
		int read = inputStreamReader.read(c);
		System.out.println( new String(c));//晴天,阴天,多云,小雨,大风,中雨,小雪,雷阵雨
		
		FileReader filereader = new FileReader(file);
		int readfilereader = filereader.read(c);
		System.out.println( new String(c));//晴天,阴天,多云,小雨,大风,中雨,小雪,雷阵雨

	}

}

如上:FileReader它不需要像InputStremReader一样传入一个字节流,同样也不能直接传入编码格式,至于其他的操作几乎就是一样的,而BufferedReader缓冲流的优点是可以直接调取readLine方法进行整行读取,因为是整行读取可以保持格式不乱

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章