黑马程序员技术交流社区

标题: IO总结 [打印本页]

作者: 朝花夕拾    时间: 2013-1-10 20:40
标题: IO总结
1:IO概述:
(1)就是指程序和设备进行数据交换。
  设备有很多种,所有,io流对象也有很多。
  java提供了一个包java.io包下的类供我们使用。
(2)IO流的分类
  A:数据的流向
   程序 -- 设备 输出流
   设备 -- 程序 输入流
  B:数据的类型
   字节流
   字符流 为了方便对文本的操作。
          用记事本可以打开并能够读懂的你就可以用字符流。
   
   字节输入流
   字节输出流
   字符输入流
   字符输出流
(3)java中对数据的常见操作就是存储在硬盘的文件,为了方便我们对文件的操作,
    java就提供了一个类供我们使用。File类。
(4)学习File类
  A:构造方法
   **File file = new File("d:\\a.txt");
   **File file = new File("d:\\","a.txt");
   **File file = new File("d:\\");
     File file2 = new File(file,"a.txt");
  B:功能方法
   创建功能:
    boolean createNewFile()
    boolean mkdir()
    boolean mkdirs()
   删除功能:
    boolean delete()
   判断功能:
    boolean exists():文件或者文件夹是否存在
    boolean isFile():是否是文件
    boolean isDirectory():是否是目录
   获取功能:
    String getAbsolutePath:获取绝对路径
    String getName:获取文件名称
   高级获取功能:
    String[] list() 返回的是指定目录下的所有文件和文件夹名称的数组
    File[] listFiles() 返回的是指定目录下的所有文件和文件夹对象的数组
   
   带文件名称过滤器的使用:
    String[] list(FilenameFilter filter)
    File[] listFiles(FilenameFilter filter)
   案例:
    获取指定目录下以java结尾的文件
    File file = new File("指定目录");
    String[] strArray = file.list(new FilenameFilter(){
     public boolean accept(File dir,String name)
     {
      return new File(dir,name).isFile() && name.endsWith(".java");
     }
    });
    for(String str : strArray)
    {
     System.out.println(str);
    }
(5)递归
  A:在方法定义内使用方法本身的现象就是递归。
    注意事项:
   递归一定要有出口
   递归的次数不能过多
  B:案例:
   递归求斐波纳契数列的第二十项的值
   // 递归求斐波纳契数列第几项目的值
   public int re(int n) {
   if (n == 1||n==2) {
    return 1;
    } else if(n==3){
    return 2;
    }else{
    return re(n-1) + re(n-2)+re(n-3);
    }
  
   }
  }
2:IO的分类及应用
(1)IO流的四个基类
  A:字节流
   字节输入流
    InputStream
   字节输出流
    OutputStream
  B:字符流
   字符输入流
    Reader
   字符输出流
    Writer
  这四个都是抽象类。
  输入流:读取数据
  输出流:写入数据
(2)文件的写入数据
  对文本文件写入数据:
   Writer -- FileWriter
  
  FileWriter的构造方法:
   FileWriter(File file)
   FileWriter(String name)
   FileWriter(File file,boolean append)
   FileWriter(String name,boolean append)
  字符输出流写入数据的基本步骤:
   A:创建字符输出流对象
   B:调用该对象的write方法
   C:释放资源
  代码体现:
   FileWriter fw = new FileWriter("fw.txt");
   fw.write("hello,io,我来了");
   fw.flush();
   fw.close();
   FileWriter fw = new FileWriter("fw.txt");做了:
    创建了字符输出流对象
    把字符输出流对象指向了要写入数据的文件对象
    调用系统资源,创建文件对象(不管文件是否存在,都会创建)
   flush和close的区别:
    flush刷新缓冲区,close刷新缓冲区,并释放资源。
    flush刷新缓冲区后,流对象还可以继续使用,close释放资源后,
     流对象不能被使用。
   流操作一定要调用close方法的原因:
    创建字符输出流对象的时候:不仅仅是在堆内存创建了java对象,
    并且使用了系统资源创建了文件对象,当程序结束后,java的对象
    会自动变成垃圾,被回收。 而系统的资源就一直在被使用,所以,
    我们需要调用close方法,就是去通知系统,你创建文件时候使用的
    资源可以释放了。
  两个小知识点:
   如何追加数据,而不是覆盖数据:
    使用带两个参数的构造方法,第二个参数表示是否是追加数据,写为true即可。
   数据追加或者写入的时候,如何换行:
    换行在不同的操作系统中,对应的字符不一样:
    windows: \r\n
    linux: \n
    有些软件,对不同的换行都是识别的,比如:editplus
    但是,windows自带的记事本只能识别\r\n。
   
  加入异常处理:
    public class FileReaderTest4 {
    public static void main(String[] args) {
     FileWriter fw = null;
     try {
     fw = new FileWriter("fx.txt");
     fw.write("hello,我是张雄");
     fw.flush();
     } catch (IOException e) {
      e.printStackTrace();
     } finally {
     if(fw!=null){
     try {
     fw.close();
     } catch (IOException e) {
     e.printStackTrace();
        }
       }
      }
     }
    }


作者: 李奇    时间: 2013-1-10 20:56
很有用 感谢分享
作者: 高境    时间: 2013-1-10 21:45
{:soso_e179:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2