java基础-IO流

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


2.IO 流的结构


分类                      字节输入流                       字节输出流                       字符输入流               字符输出流 


抽象基本类           InputStream                   OutputStream                   Reader                    Writer
  
访问文件             FileInputStream               FileOutputStream             FileReader                 FileWriter
 
访问数组             ByteArrayInputStream    ByteArrayInputStream       CharArrayReader     CharArrayWriter


访问管道             PipedInputStream           PipedOutputStream          PipedReader            PipedWriter


访问字符串                                                                                            StringReader            StringWriter
 
缓冲流            BufferedInputStream      BufferedOutputStream        BufferedReader          BufferedWriter
  
转换流                                                                                                 InputStreamReader    OutputStreamWriter


对象流            ObjectInputStream        ObjectOutputStream    
                        FilterInputStream        FilterOutputStream                     FilterReader           FilterWriter


打印流                                                          PrintStream                                                         PrintWriter


推回输入流     PushbackInputStream                                                   PushbackReader


特殊流          DataInputStream          DataOutputStream



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()(voidwrite(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 支持任意位置的“插入”。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值