Java - I/O 操作

版权声明:我写的东西都是我的你不能拿走(转载请说明 (╥﹏╥) ) https://blog.csdn.net/qq_326324545/article/details/81090330

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为后缀的都是字符流。

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

其中:

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

扫描二维码关注公众号,回复: 4499641 查看本文章

字节流: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打开,那么它肯定会被覆盖。

猜你喜欢

转载自blog.csdn.net/qq_326324545/article/details/81090330