欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java - I/O 操作

程序员文章站 2022-06-13 22:22:42
...

I/O类库的基本架构

Java的I/O操作类在包java.io下,有将近80个类。

数据格式分类:

① 面向字节(Byte)操作的 I/O 接口:InputStream 和 OutputStream
② 面向字符(Character)操作的 I/O 接口:Writer 和 Reader

作用位置分类:

① 基于磁盘操作的 I/O 接口:File
② 基于网络操作的 I/O 接口:Socket(不在java.io中)

一、 I/O数据格式

(1)面向字节:操作以8位为单位对二进制数据进行操作,不对数据进行转换。这些类都是InputStream 和 OutputStream的子类。以InputStream/OutputStream为后缀的类都是字节流,可以处理所有类型的数据。

(2)面向字符:操作以字符为单位,读时将二进制数据转换为字符,写时将字符转换为二进制数据Writer 和 Reader的子类,以Writer/Reader为后缀的都是字符流。

硬盘上所有的文件都是以字节形式保存,字符只在内存中才会形成。即只在处理纯文本文件时,优先考虑使用字符流,除此之外都用字节流。

Java - I/O 操作

其中:

字符流:InputStreamReader/OutputStreamWriter 是字节流转化为字符流的桥转换器。
BufferReader/BufferWriter 逐行读写流,可用于较大的文本文件。是过滤流,需要用其他的节点流做参数构造对象。

字节流:FileInputStream/FileOutputStream 文件输入输出流。
PipedInputStream/PipedOutputStream 管道里,线程交互时使用。
ObjectInputStream/ObjectOutputStream 对象流,实现对象序列化

读写操作实例:

	// 使用FileReader进行读取文件,然后FileWriter写入另一个文件
	public void testFileReaderAndFileWriter() throws IOException {
		FileReader fileReader = new FileReader("h:\\haha.txt");
		char[] buff = new char[512];
		StringBuffer stringBuffer = new StringBuffer();

		while (fileReader.read(buff) > 0) {
			stringBuffer.append(buff);
		}
		System.out.println(stringBuffer.toString());

		FileWriter fileWriter = new FileWriter("h:\\haha2.txt");
		fileWriter.write(stringBuffer.toString().trim());

		fileWriter.close();
		System.out.println("写入文件成功");
	}

	// 使用InputStreamReader进行读取文件,然后用OutputStreamWriter写入文件
	public void testInputStreamReader() throws IOException {
	    //操作数据的方式是可以组合的,此处FileInputStream读出的字节流用InputStreamReader转化为了字符流对象
	    InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("h:\\haha.txt"), "utf-8");
	    char[] buff = new char[512];
	    StringBuffer stringBuffer = new StringBuffer();
	    while (inputStreamReader.read(buff) > 0) {
	        stringBuffer.append(buff);
	    }
	    System.out.println(stringBuffer.toString());
	  
	  //写文件时,要指定写入的地方(网络或本地)、路径
	  OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("h:\\haha2.txt"), "utf-8");
	  outputStreamWriter.write(stringBuffer.toString().trim()); 
	  outputStreamWriter.close();
	}

	public void testIntputStream2() throws IOException {
		InputStreamReader inputStreamReader = new InputStreamReader(new StringBufferInputStream("hello world"));
		char[] buff = new char[512];
		int n = inputStreamReader.read(buff);
		System.out.println(n);
		System.out.println(buff);
	}

FileReader类继承了InputStreamReader,FileReader读取文件流,通过StreamDecoder解码成char,其解码字符集使用的是默认字符集。在Java中,我们应该使用File对象来判断某个文件是否存在,如果我们用FileOutputStream或者FileWriter打开,那么它肯定会被覆盖。

 

相关标签: Java I/O