Java中的IO流

1、java.io包下
  File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源。
  >1.File既可以表示一个文件(.doc .xls .mp3 .avi .jpg .dat),也可以表示一个文件目录!
  >2.File类的对象是与平台无关的。
  >3.File类针对于文件或文件目录,只能进行新建、删除、重命名、上层目录等等的操作。file.mkdir(  )  和  file.createNewFile(  )
  >    如果涉及到访问文件的内容,File是无能为力的,只能使用IO流下提供的相应的输入输出流来实现。
  >4.常把File类的对象作为形参传递给相应的输入输出流的构造器中!

     例:File  f4=new File("\\dir3");
          File  f5=new File(f4,"FileTest5.txt");  //在如果 \\dir3目录不存在使用f4.mkdir()先创建
        一个对应于某磁盘文件或目录的File对象一经创建, 就可以通过调用它的方法来获得文件或目录的属性。    
         1)public boolean exists( ) 判断文件或目录是否存在
         2)public boolean isFile( ) 判断是文件还是目录 
         3)public boolean isDirectory( ) 判断是文件还是目录
         4)public String getName( ) 返回文件名或目录名
         5)public String getPath( ) 返回文件或目录的路径。
         6)public long length( ) 获取文件的长度 
         7)public String[ ] list ( ) 将目录中所有文件名保存在字符串数组中返回。 
       File类中还定义了一些对文件或目录进行管理、操作的方法,常用的方法有:
         1) public boolean renameTo( File newFile );    重命名文件
         2) public void delete( );   删除文件
         3)  public boolean mkdir( ); 创建目录
 
2、IO流的体系

    

 

3、IO流的划分
  1) 按照流的流向的不同   :输入流 输出流 (站位于程序的角度)
  2) 按照流中的数据单位的不同:字节流 字符流 (纯文本文件使用字符流 ,除此之外使用字节流)
  3) 按照流的角色的不同   :节点流 处理流 (流直接作用于文件上是节点流(4个),除此之外都是处理流)

4、【重点掌握】
  * 抽象基类        节点流(文件流)             缓冲流(处理流的一种,可以提升文件操作的效率)
  * InputStream      FileInputStream (int read(byte[] b))      BufferedInputStream (int read(byte[] b))
  * OutputStream   FileOutputStream (void write(b,0,len))      BufferedOutputStream (flush()) (void write(b,0,len))
  * Reader             FileReader (int read(char[] c))         BufferedReader (readLine()) (int read(char[] c))或String readLine()
  * Writer          FileWriter (void write(c,0,len))          BufferedWriter (flush()) (void write(c,0,len)或void write(String str))
  注: 1)从硬盘中读入一个文件,要求此文件一定得存在。若不存在,报FileNotFoundException的异常
     2)从程序中输出一个文件到硬盘,此文件可以不存在。若不存在,就创建一个实现输出。若存在,则将已存在的文件覆盖
     3)真正开发时,就使用缓冲流来代替节点流
     4)主要最后要关闭相应的流。先关闭输出流,再关闭输入流。将此操作放入finally

5、其它的流
  1.转换流:实现字节流与字符流之间的转换
    InputStreamReader:输入时,实现字节流到字符流的转换,提高操作的效率(前提是,数据是文本文件) ===>解码:字节数组--->字符串
    OutputStreamWriter:输出时,实现字符流到字节流的转换。 ===>编码: 字符串---->字节数组
    例子:从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序。

  2.标准的输入输出流
    System.in: The "standard" input stream:从键盘输入数据
    System.out:The "standard" output stream:从显示器输出数据

  3.打印流 (都是输出流) PrintStream(处理字节) PrintWriter(处理字符)
    可以使用System.setOut(PrintStream p)重新设置一下输出的位置。
    PrintStream p = new PrintStream(new FileOutputStream("hello.txt"),true);
  4.数据流(处理基本数据类型、String类、字节数组)
    DataInputStream DataOutputStream
  5.对象流(用来处理对象的)
    >对象的序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,
      或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象
    ObjectInputStream(Object readObject();) ObjectOutputStream (void writeObject(Object obj))
    如何创建流的对象: ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("person.txt")));
              ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("person.txt")));

    实现序列化机制的对象对应的类的要求:①要求类要实现Serializable接口
                      ②同样要求类的所有属性也必须实现Serializable接口
                      ③ 要求给类提供一个序列版本号:private static final long serialVersionUID;
                      ④属性声明为static 或transient的,不可以实现序列化

6.随机存取文件流:RandomAccessFile
  6.1既可以充当一个输入流,又可以充当一个输出流:public RandomAccessFile(File file, String mode)
  6.2支持从文件的开头读取、写入。若输出的文件不存在,直接创建。若存在,则是对原有文件内容的覆盖。
  6.3 支持任意位置的“插入”。

 

资料参考:

  百度:Java的IO流

  https://www.cnblogs.com/ylspace/p/8128112.html

posted @ 2018-10-01 14:21  imanuu  阅读(4)  评论(0)    收藏  举报