A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

IO(Input Output)流:
l  IO流(或者称呼为数据流)用来处理设备(包括硬盘,内存)之间的数据传输。
l  Java对数据的操作是通过流的方式操作,
l  Java用于操作流的对象都在IO包中
l  流按操作分为两种:字节流字符流。(早期出现的都是字节流,因为最终传输的都是二进制,所以都是字节流;字符流是因为用二进制代表a,b…字符,制作成一张表,ASCII表,用以操作字符。我们中国GBK,收录中国的文字和符号。Unicode是国际标准码表,是国际上所有的字符码表,后来又优化演变成UT-8码表。字符流的好处就是在内部融合了编码表,让我们自己来指向编码表。处理图片都是使用字节流,通用的是字节流,因为字符流基于字节流。
l  流按流向分:输入流输出流
IO常用基类:
l  字节流的抽象基类:
    InputStreamOutStream
l  字符流的抽象基类:
    ReaderWriter
l  注意:由这四个类派生出来的子类名称都是以其父类名作为子类的后缀。如:InputStream的子类FileInputStream。Reader的子类FileReader
FileWriter:(写入文件的便捷类)
/*字符流和字节流;字节流的两个基类:InputStreamOutStream;字符流的两个基类:ReaderWriter
特点:既然IO流是用于操作数据的,那么数据最常见的形式就是:文件。操作文件的子类对象FileWriter
*/
例子:创建一个文件并写入数据
  1. Import java.io.*;
  2. Class FileWriterDemo
  3. {
  4.          Public static void main(String[] args) throws IOException
  5. {
  6.          //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件
  7.          //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
  8. //其实该步骤就是在明确数据要存放的目的地。
  9. FileWriter fw = new FileWriter(“demo.txt”);
  10. //写入字符串,没有直接写入,而是写到内存中,其实就是写到了流当中
  11. fw.write(“abcd”);
  12. fw.flush();//刷新流对象中的缓存中的数据//将数据刷到目的地中
  13. //fw.write(“haha”);//每一次写数据都要刷新
  14. //fw.flush();
  15. fw.close();//关闭数据流资源,但是关闭之前会刷新一次内部的缓存中的数据,将数据刷新到目的地,和flush的区别,flush刷新后,流可以继续使用,close刷新后,会将流关闭
  16. }
  17. }
复制代码
IO异常处理方式:牢记
  1. Import java.io.*;
  2. Class FileWriterDemo2
  3. {
  4. Public static void main(String[] args)
  5. {
  6.          FileWriter fw=null;
  7.          try
  8. {
  9. fw=new FileWriter(“demo.txt”);
  10. fw.write(“abcdefg”);
  11. //fw.close();
  12. }
  13.          Catch(IOException e)
  14.          {
  15.                    System.out.println(e.toString()) ;
  16. }
  17. finally
  18. {
  19.          Try{
  20.                    If(fw!=null)
  21.                       fw.close();
  22. }
  23. catch(IOException e)
  24.              {
  25.                       System.out.println(e.toString()) ;
  26. }
  27. }
  28. }
复制代码
文件的续写:
  1. Import java.io.*;
  2. Class FileWriterDemo3
  3. {
  4.          public static void main(String[] args) throws IOException
  5.          {
  6.                    //传递一个true参数,代表不覆盖已有的文件,并在文件的末尾处进行数据续写
  7.                    FileWriter fw=new FileWriter(“demo.txt”,true);
  8.                   fw.write(“nihai\r \nhahha”);//windows下的换行符为\r \n
  9.                    fw.close();
  10. }
  11. }
复制代码

文件的读取:FileReader
用于读取文件的便捷类,此类的构造方法用的是默认编码(系统中的编码类型,GBK或者其他)
例子:
  1. import Java.io.*;
  2. class FileReaderDemo
  3. {
  4.          Public static void main(String[] args) throws IOException
  5. {
  6.          //创建一个文件读取流对象,和指定的名称的文件相关联。要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
  7.          FileReader fr=new FileReader(“demo.txt”)
  8.          //int ch=fr.read();//读一个字符,而且自动往下读。如果读到流的末尾,返回(-1)
  9.          //System.out.println(“ch=”+(char)ch);
  10.          //Fr.close();
  11.          //连续读完
  12.          int ch=0;
  13.          while((ch=fr.read()!=-1))
  14. {
  15.          System.out.println((char)ch);
  16. }
  17. }
  18. }
复制代码

拷贝文件。
//C盘的一个文本文件复制到D
原理:其实就是将C盘的文件数据存储到D盘的一个文件中,
步骤:1、在D盘创建一个文件,用于存储C盘文件中的数据;2、定义读取流和C盘文件关联,3、通过不断的读写完成数据存储。4、关闭资源。
  1. import Java.io.*;
  2. class FileReaderDemo2
  3. {
  4.          Public static void main(String[] args) throws IOException
  5. {
  6.          copy_1();//逐个读,速度慢
  7.          copy_2();//写到字符数组;效率高
  8. }
  9. //从C盘读一个字符,就往D盘写一个字符
  10. public static void copy_1()
  11. {
  12.          //创建目的地
  13.          FileWriter fw=new FileWriter(“RuntimeDemo.txt”);
  14.          //与已有文件关联
  15.          FileReader  fr=new FileReader(“RuntimeDemo.java”);
  16.          int num=0;
  17.          while(num=fr.read()!=-1)
  18. {
  19.          fw.write(num);
  20. }
  21. fw.close();
  22. fr.close();
  23. }
  24. public static void copy_2()
  25. {
  26.          FileWriter fw=null;
  27.          FileReader fr=null;
  28.          try
  29.          {
  30.                    fw=new FileWriter(“SystemDemo_copy.txt”);
  31.                    fr=new FileReader(“SystemDemo.java”);
  32.                    char[] buf=new char[1024];
  33.                    int num=0;
  34.                    while(num=fr.read(buf)!=-1)
  35. {
  36.                    fw.write(buf,0,num);
  37. }
  38. catch(IOException e)
  39. {
  40.          Throw new RuntimeException(“读写失败”);
  41. }
  42. finally
  43. {
  44.          if(fr!=null)
  45.          try
  46.          {
  47.                    fr.close();
  48. }
  49. Catch(IOException e)
  50. {
  51. }
  52. if(fw!=null)
  53.          try
  54.          {
  55.                    fw.close();
  56. }
  57. Catch(IOException e)
  58. {
  59. }
  60. }
  61. }
  62. }
  63. }
复制代码

待续.....


评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

3 个回复

倒序浏览
不错做的。
回复 使用道具 举报
刚看完毕老师的IO流这章,老师剖析的很彻底,做练习时候运用到之前的很多技术点 才发现 自己很多之前的知识已经慢慢丢的差不多了,三天不练手生 是真的,七天得回顾 也很重要啊!
回复 使用道具 举报
谢永烽 发表于 2015-4-28 16:26
刚看完毕老师的IO流这章,老师剖析的很彻底,做练习时候运用到之前的很多技术点 才发现 自己很多之前的知识 ...

确实啊,我之前看的也有些忘记了,所以我就边看边打,第二天再回顾,觉得忘记了,就再回顾。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马