1、流技术:将数据从一个设备传递到另一个设备的技术,称为流技术。
2、流按操作数据分为:字符流和字节流
字符流:专门处理文本文件,文本数据(如果文件用记事本打开能正常显示,就是文本文件),特点是查询本机默认编码表 GBK
开发这个流的意义就在于方便操作文本文件
一次操作16个二进制位(1字节 = 8位)
字节流:处理任意文件,不会查询编码表,一次操作8个二进制位
流按流向分为:输入流和输出流(从硬盘到内存为输入,从内存到硬盘为输出)
3、IO的集成体系
字符流
字符输出流:抽象基类 java.io.Writer 实现类 FileWriter
字符输入流:抽象基类 java.io.Reader 实现类 FileReader
字节流
字节输出流:抽象基类 java.io.OutputStream
字节输入流:抽象基类 java.io.InputStream
4、字符输出流FileWriter
FileWriterfw = new FileWriter("c:/demo");注意:虽然会创建一个文件,但是IO流没有创建文件的功能,它是调用Windows中创建文件功能,因此占用Windows资源。
调用writer方法写数据:字符输出流写文本数据的时候,流会将数据写到内存中,没有到目的文件,因此需要调用刷新flush方法,将内存中的数据刷到目的文件,字符流写数据,必须刷新。
字符流写文件,创建文件必须依靠Windows底层功能,使用完毕后必须释放Windows资源,即调用close()方法来关闭流。关闭流会自动加刷新操作。
写单个字符,write传递的是int值。如fw.write(65)会查询编码表,写入A
写字符数组 char[] ch = "你好吗".toCharArray();---字符串转成字符数组
Windows下的换行\r\n
IO流的异常处理方式
/*
IO流的异常处理方式,一个流
*/
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
//try外,声明变量,try内建立对象
FileWriter fw = null;
try{
fw = new FileWriter("ioexception.txt");
fw.write("异常IO的");
fw.flush();
}catch(IOException e){
//输出异常信息
e.printStackTrace();
//要让程序停下来,抛出运行时期异常
throw new RuntimeException("文件写入失败");
}finally{
try{
if(fw!=null)
fw.close();
}catch(IOException e){
e.printStackTrace();
throw new RuntimeException("写入文件关闭流失败");
}
}
}
}
/*
IO流的异常处理方式,两个流
*/
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
//try外,声明变量,try内建立对象
FileWriter fw1 = null;
FileWriter fw2 = null;
try{
fw1 = new FileWriter("ioexception1.txt");
fw1 = new FileWriter("ioexception2.txt");
fw1.write("异常IO1");
fw1.flush();
fw2.write("异常IO2")
fw2.flush();
}catch(IOException e){
//输出异常信息
e.printStackTrace();
//要让程序停下来,抛出运行时期异常
throw new RuntimeException("文件写入失败");
}finally{
try{
if(fw1!=null)
fw1.close();//不加判断若建立对象失败会出现空指针异常
}catch(IOException e){
e.printStackTrace();
throw new RuntimeException("写入文件关闭流失败");
}finally{//不加finally的话若fw1抛出运行时异常则程序就会停止执行。
try{
if(fw2!=null)
fw2.close();//不加判断若建立对象失败会出现空指针异常
}catch(IOException e){
e.printStackTrace();
throw new RuntimeException("写入文件关闭流失败");
}
}
}
}