java基础--IO字符流的读写

本文详细解析Java IO流技术,包括字节流与字符流的区别、使用方法及示例,重点介绍了如何使用FileWriter和FileReader类进行文件读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO(Input Output)流

--------------------------

   IO流用来处理设备之间的数据传输

   Java对数据的操作是通过流的方式

   Java用于操作流的对象都在IO包中

   流按操作数据分为两种:字节流与字符流 。 

   流按流向分为:输入流,输出流。

什么叫设备上的数据?

   比如磁盘上的存放的文件,内存中驻留的数据。

  设备包括很多种,内存和硬盘都是。

  IO流理解为数据流也行。

  IO包中存放了很多处理数据的流对象

 --------------------------

Java在流技术上基于字节流产生了一个字符流。

字符流的出现好处:可以在内部融合编码表,也就是说你读到的字节数据是查GBK的码表还是UTF-8的码表可以由你来指定。

这样的话,我们处理文字的时候就会很方便。

字符流的对象里面融合了编码表。

--------------------------

通用的是字节流,字符流基于字节流。

---------------------
需求:在硬盘上,创建一个文件并写入一些文字数据。

 字符流的抽象基类:Reader ,Writer。

java.lang.Object
  继承者 java.io.Reader
      继承者 java.io.InputStreamReader
          继承者 java.io.FileReader

java.lang.Object
  继承者 java.io.Writer
      继承者 java.io.OutputStreamWriter
          继承者 java.io.FileWriter

java.io
类 FileWriter

java.lang.Object

  java.io.Writer

      java.io.OutputStreamWriter

          java.io.FileWriter

 

所有已实现的接口:

CloseableFlushableAppendable

public class FileWriter

extends OutputStreamWriter

用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。

 

构造方法摘要

FileWriter(File file)
          根据给定的 File 对象构造一个 FileWriter 对象。

FileWriter(File file, boolean append)
          根据给定的 File 对象构造一个 FileWriter 对象。

FileWriter(FileDescriptor fd)
          构造与某个文件描述符相关联的 FileWriter 对象。

FileWriter(String fileName)
          根据给定的文件名构造一个 FileWriter 对象。

FileWriter(String fileName, boolean append)
          根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

FileWriter没有空的构造函数,说明想要操作文件(给文件中写入数据),必须要先有文件。该流对象一被初始化就必须先有被操作的文件存在。

import java.io.*;
class  FileWriterDemo
{
	public static void main(String[] args) throws IOException
	{
		//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
		//而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
		//其实该步就是在明确数据要存放的目的地。
		FileWriter fw = new FileWriter("demo.txt");

		//调用write方法,将字符串写入到流中。
		fw.write("abcde");

		//刷新流对象中的缓冲中的数据。
		//将数据刷到目的地中。
		//fw.flush();


		//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
		//将数据刷到目的地中。
		//和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
		fw.close();
	}
}

java.io
类 FileReader

java.lang.Object

  java.io.Reader

      java.io.InputStreamReader

          java.io.FileReader

 

所有已实现的接口:

CloseableReadable

public class FileReader

extends InputStreamReader

用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。

 

构造方法摘要

FileReader(File file)
          在给定从中读取数据的 File 的情况下创建一个新 FileReader。

FileReader(FileDescriptor fd)
          在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。

FileReader(String fileName)
          在给定从中读取数据的文件名的情况下创建一个新 FileReader。

O--文本文件读取方式一

read

public int read()

         throws IOException

读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。 

用于支持高效的单字符输入的子类应重写此方法。

返回:

作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1

抛出:

IOException- 如果发生 I/O 错误

import java.io.*;

class  FileReaderDemo
{
	public static void main(String[] args) throws IOException
	{
		//创建一个文件读取流对象,和指定名称的文件相关联。
		//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
		FileReader fr = new FileReader("demo.txt");

		//调用读取流对象的read方法。
		//read():一次读一个字符。而且会自动往下读。
		
		int ch = 0;

		while((ch=fr.read())!=-1)
		{
			System.out.println(
		}


		/*
		while(true)
		{
			int ch = fr.read();
			if(ch==-1)
				break;
			System.out.println("ch="+(char)ch);
		}
		*/



		fr.close();


	}
}

IO--文本文件读取方式二

read

public int read(char[] cbuf)

         throws IOException

将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。 

参数:

cbuf- 目标缓冲区

返回:

读取的字符数,如果已到达流的末尾,则返回 -1

抛出:

IOException- 如果发生 I/O 错误

 

/*
第二种方式:通过字符数组进行读取。
*/

import java.io.*;

class FileReaderDemo2 
{
	public static void main(String[] args) throws IOException
	{
		FileReader fr = new FileReader("demo.txt");
		

		//定义一个字符数组。用于存储读到字符。
		//该read(char[])返回的是读到字符个数。
		char[] buf = new char[1024];

		int num = 0;
		while((num=fr.read(buf))!=-1)
		{
			System.out.println(new String(buf,0,num));
		}
		

		fr.close();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值