IO(Input Output)流: l IO流(或者称呼为数据流)用来处理设备(包括硬盘,内存)之间的数据传输。 l Java对数据的操作是通过流的方式操作, l Java用于操作流的对象都在IO包中 l 流按操作分为两种:字节流与字符流。(早期出现的都是字节流,因为最终传输的都是二进制,所以都是字节流;字符流是因为用二进制代表a,b…字符,制作成一张表,ASCII表,用以操作字符。我们中国GBK,收录中国的文字和符号。Unicode是国际标准码表,是国际上所有的字符码表,后来又优化演变成UT-8码表。字符流的好处就是在内部融合了编码表,让我们自己来指向编码表。处理图片都是使用字节流,通用的是字节流,因为字符流基于字节流。) l 流按流向分:输入流和输出流。 IO常用基类: l 字节流的抽象基类: InputStream,OutStream l 字符流的抽象基类: Reader,Writer l 注意:由这四个类派生出来的子类名称都是以其父类名作为子类的后缀。如:InputStream的子类FileInputStream。Reader的子类FileReader FileWriter:(写入文件的便捷类) /*字符流和字节流;字节流的两个基类:InputStream和OutStream;字符流的两个基类:Reader和Writer 特点:既然IO流是用于操作数据的,那么数据最常见的形式就是:文件。操作文件的子类对象FileWriter。 */ 例子:创建一个文件并写入数据 - Import java.io.*;
- Class FileWriterDemo
- {
- Public static void main(String[] args) throws IOException
- {
- //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件
- //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
- //其实该步骤就是在明确数据要存放的目的地。
- FileWriter fw = new FileWriter(“demo.txt”);
- //写入字符串,没有直接写入,而是写到内存中,其实就是写到了流当中
- fw.write(“abcd”);
- fw.flush();//刷新流对象中的缓存中的数据//将数据刷到目的地中
- //fw.write(“haha”);//每一次写数据都要刷新
- //fw.flush();
- fw.close();//关闭数据流资源,但是关闭之前会刷新一次内部的缓存中的数据,将数据刷新到目的地,和flush的区别,flush刷新后,流可以继续使用,close刷新后,会将流关闭
- }
- }
复制代码 IO异常处理方式:牢记- Import java.io.*;
- Class FileWriterDemo2
- {
- Public static void main(String[] args)
- {
- FileWriter fw=null;
- try
- {
- fw=new FileWriter(“demo.txt”);
- fw.write(“abcdefg”);
- //fw.close();
- }
- Catch(IOException e)
- {
- System.out.println(e.toString()) ;
- }
- finally
- {
- Try{
- If(fw!=null)
- fw.close();
- }
- catch(IOException e)
- {
- System.out.println(e.toString()) ;
- }
- }
- }
复制代码文件的续写: - Import java.io.*;
- Class FileWriterDemo3
- {
- public static void main(String[] args) throws IOException
- {
- //传递一个true参数,代表不覆盖已有的文件,并在文件的末尾处进行数据续写
- FileWriter fw=new FileWriter(“demo.txt”,true);
- fw.write(“nihai\r \nhahha”);//windows下的换行符为\r \n
- fw.close();
- }
- }
复制代码
文件的读取:FileReader用于读取文件的便捷类,此类的构造方法用的是默认编码(系统中的编码类型,GBK或者其他) 例子: - import Java.io.*;
- class FileReaderDemo
- {
- Public static void main(String[] args) throws IOException
- {
- //创建一个文件读取流对象,和指定的名称的文件相关联。要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
- FileReader fr=new FileReader(“demo.txt”)
- //int ch=fr.read();//读一个字符,而且自动往下读。如果读到流的末尾,返回(-1)
- //System.out.println(“ch=”+(char)ch);
- //Fr.close();
- //连续读完
- int ch=0;
- while((ch=fr.read()!=-1))
- {
- System.out.println((char)ch);
- }
- }
- }
复制代码
拷贝文件。//将C盘的一个文本文件复制到D盘 原理:其实就是将C盘的文件数据存储到D盘的一个文件中, 步骤:1、在D盘创建一个文件,用于存储C盘文件中的数据;2、定义读取流和C盘文件关联,3、通过不断的读写完成数据存储。4、关闭资源。 - import Java.io.*;
- class FileReaderDemo2
- {
- Public static void main(String[] args) throws IOException
- {
- copy_1();//逐个读,速度慢
- copy_2();//写到字符数组;效率高
- }
- //从C盘读一个字符,就往D盘写一个字符
- public static void copy_1()
- {
- //创建目的地
- FileWriter fw=new FileWriter(“RuntimeDemo.txt”);
- //与已有文件关联
- FileReader fr=new FileReader(“RuntimeDemo.java”);
- int num=0;
- while(num=fr.read()!=-1)
- {
- fw.write(num);
- }
- fw.close();
- fr.close();
- }
- public static void copy_2()
- {
- FileWriter fw=null;
- FileReader fr=null;
- try
- {
- fw=new FileWriter(“SystemDemo_copy.txt”);
- fr=new FileReader(“SystemDemo.java”);
- char[] buf=new char[1024];
- int num=0;
- while(num=fr.read(buf)!=-1)
- {
- fw.write(buf,0,num);
- }
- catch(IOException e)
- {
- Throw new RuntimeException(“读写失败”);
- }
- finally
- {
- if(fr!=null)
- try
- {
- fr.close();
- }
- Catch(IOException e)
- {
- }
- if(fw!=null)
- try
- {
- fw.close();
- }
- Catch(IOException e)
- {
- }
- }
- }
- }
- }
复制代码
待续.....
|