IO(Input Output)流
--------------------------
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流与字符流 。
流按流向分为:输入流,输出流。
什么叫设备上的数据?
比如磁盘上的存放的文件,内存中驻留的数据。
设备包括很多种,内存和硬盘都是。
IO流理解为数据流也行。
IO包中存放了很多处理数据的流对象
--------------------------
Java在流技术上基于字节流产生了一个字符流。
字符流的出现好处:可以在内部融合编码表,也就是说你读到的字节数据是查GBK的码表还是UTF-8的码表可以由你来指定。
这样的话,我们处理文字的时候就会很方便。
字符流的对象里面融合了编码表。
--------------------------
通用的是字节流,字符流基于字节流。
---------------------
需求:在硬盘上,创建一个文件并写入一些文字数据。
字符流的抽象基类:Reader ,Writer。
java.lang.Objectjava.io.Reader
java.io.InputStreamReader
java.io.FileReader
java.lang.Objectjava.io.Writer
java.io.OutputStreamWriter
java.io.FileWriter
java.io
类 FileWriter
java.io.FileWriter
所有已实现的接口:
Closeable, Flushable, Appendable
public class FileWriter
extends OutputStreamWriter
用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。
构造方法摘要 |
FileWriter(File file) |
FileWriter(File file, boolean append) |
FileWriter(FileDescriptor fd) |
FileWriter(String fileName) |
FileWriter(String fileName, boolean append) |
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.io.FileReader
所有已实现的接口:
public class FileReader
extends InputStreamReader
用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
构造方法摘要 |
FileReader(File file) |
FileReader(FileDescriptor fd) |
FileReader(String fileName) |
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();
}
}