黑马程序员_IO流(下)

------- android培训java培训、期待与您交流! ----------

1:OutputStreamWriter与InputStreamReader

OutputStreamWriter是字符流通向字节流的桥梁;

InputStreamReader是字节流通向字符流的桥梁;

2:小细节
其实转换流已经出现了编码转换,而之所以产生两个子类FileReader和FileWriter是因为将本地默认编码表封装;
便于操作文本文件,而出现的便捷类;
记住如果字节流发生了变化,不再操作文本或者编码不再是编码表,就不可以使用FileReader和FileWriter,这时
只能使用转换流InputStreamReader和OutputStreamWriter;

3:键盘录入(按照毕老师的话就是背也要记住它):
BufferedReader bufr=new BufferedReader(new InputStreadReader(System.in));
4: 流的基本操作规律:
    目的是为了在开发中可以明确具体使用哪个流对象更合适;
    明确一:数据源或者目的(汇);
                源:对应的体系是InputStream  Reader;
                目的:对应的体系是 OutputStream  Writer;
    
    明确二:操作数据是否是纯文本文件;
                源:是纯文本文件   对应体系是:Reader;
                目的:也是纯文本文件  对应的体系是:Writer;
                如果不是文本文件直接用字节流操作;
    
    明确三:数据具体所在设备,因为不同设备对应不同的对象;
                源设备:硬盘            键盘            网络         内存
                             File开头           System.in          Socker           数组  ByteArray  CharArray   String
                
                目的设备:  硬盘             显示器         网络         内存
                             File开头           System.Out          Socker           数组  ByteArray  CharArray   String

    明确四:是否需要额外功能
                (1):需要提高效率:BufferedReader BufferedWriter;
                (2):需要桥梁编码转换:InPutStreamReader  OutPutStreamWriter
                (3):需要在输出时保证数据的原样表示形式吗?PrintStream PrintWriter 的print方法。
                (4):需要对输入流合并吗?SequenceInputStream。
                (5):需要将对象序列化和反序列化吗?ObjectOutputStream ObjectInputStream
                (6):需要操作基本类型数据吗?DataInputStream  DataOutputStream。

5:常见对象:
File file=new File("D:\\day\\.........");  //将("D:\\day\\.........")封装成对象;
注:Separator(静态方法 使用时直接类名打点调用,是系统默认的分隔符和“\\”“/”一样,不过它有跨平台性);

6:File类常见方法一(获取方法)
    File file = new File("d:\\0.mp3"); //举例说明方法怎么用
    long total = file.getTotalSpace();//举例说明方法怎么用
  1:  Long Length (获取文件字节数);
  2:  Long Freespace (获取磁盘可用剩余空间);  
  3:  Long time(获取创建时间);  //获取时间需要转换毫秒数;(颜色相同代码实现转化毫秒数)
  4 :   Long LastModified (获取最后一次修改时间); 
       System.out.println("time="+time);
       Date date = new Date(time);
       DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.LONG);
       String str_time = dateFormat.format(date);
       System.out.println(str_time);
 
      File file = new File("d:\\0.mp3"); //举例说明方法怎么用
      String name= file.getname();          //举例说明方法怎么用

    5 :Strng  getname (获取文件名);
    6: String getPath (后去完整路径);
    7: String  getParent(获取父类或磁盘名称)
    8: String  getabsolutePath (获取绝对路径)
  
      File类常见方法二(创建方法)
      File file = new File("d:\\0.mp3"); //举例说明方法怎么用
      boolean b = file.exists();          //举例说明方法怎么用
   1:boolean  createNewFile ( 创建文件  如果文件不存在则创建,若存在不创建 返回值是False);
   2:boolean  delete (删除文件   java删除文件不走回收站);
   3:boolean  exists (判断文件是否存在);
   4:boolean  isFile (判断是否是文件   首先要先用exists判断文件是否存在);
   5:boolean  isDirectory (判断是否是目录   首先要先用exists判断文件是否存在);
   6:boolean  mkdir(创建文件夹  只能创建一级目录 例:d:\\kk);
   7:boolean  mkdir(创建多级目录   例:d:\\kk\\ss\\aa\\cc); 
    8: ListRoots 列出电脑磁盘目录;
    9:ListFiles  列出磁盘下所有文件;
 
7 :递归 :
就是将函数自身直接或者间接的调用函数自身;对于一个功能重复使用,每次使用这个功能通常都需要 上次功能运算的内容进行参与; 注意问题:必须要加入条件,否则会出现栈内存溢出 StackoverflowError。 注意递归次数必要过多,会栈内存溢出;
8:常用类:
1:Properties 是Hashtable子类;
        特点:持久的属性集;该集合可以和流技术结合;键值对应的都是字符串;不需要泛型;
          方法:Load  :将流关联的特定格式数据加载进集合;
                  Setproperty:修改文件内容;
                  Store:将集合中的元素存储到文件中;

2:打印流: PrintStream与PrintStream可以直接操作输入流和文件
     PrintStream(永远不会抛出IOException异常)
        方法:writer:显示的是最低八位,也就是讲一个整数的四个字节中最低一个字节写入到目的地;
                  print :表现形式不变,但是字节变了,打印方法可以将数据原来表示形式原样打印到目的地中;
       PrintStream 加上true有一个自动刷新;       

3:序列流:SequenceInputStream 对多个流进行合并 通常用来合并的都是碎片。

4:操作对象:ObjectInputStream与ObjectOutputStream
                        Serializable标记接口用于给类定义SerializablesionUID用的;与每个序列化类相关联;
                    静态数据是不会被序列化;
                    transient瞬态:当对非静态的数据不希望对其进行序列化的时候就用瞬态修饰;
5:操作基本数据类型:DataInputStream与DataOutputStream 
                    writerInt :保证基本数据类型的字节数不变,将整数字节都写入;
                    readInt:  自动读取四个字节并将其转换成整数返回;

6:操作字节数组:ByteArrayInputStream与ByteArrayOutputStream
                    用于操作数组流对象该流对象是对应设备为内存的流对象;这个流不需要关闭,因为没有使用系统资源

7:操作字符数组:CharArrayReader与CharArrayWrite
                    
8:操作字符串: StringReader 与StringWriter

9:管道流:PipedInputStream和PipedOutputStream
                 (1):输入与输出可以直接进行连接,通过结合线程使用;
                 (2):需要与多线程结合,单线程容易死锁;

10:其他类:RandomAccessFile 
                (1): 随机访问该对象中封装了操作文件的字节流和字符流缓冲区;通过指针方式对数组中数据进行操作;
                      因为指针可以由Seek方法任意指定位置,所以可以实现对数组数据随机访问;
                (2): 只能对文件进行读写;
                (3): 即可以读,又可以写;
                关联文件不存在则创建,如果存在不覆盖;
                随机读写文件时数据要有规律,随机读写就是将文件数据存储数据存储到数组中;通过操作角标方法
                getFilepointer和Seek对数组元素进行操作;


IO流体系:

字符流:
Reader
|--BufferedReader:
|--LineNumberReader
|--CharArrayReader
|--StringReader
|--InputStreamReaer
|--FileReader


Writer
|--BufferedWriter
|--CharArrayWriter
|--StringWriter
|--OutputStreamWriter
|--FileWriter
|--PrintWriter



字节流:
InputStream
|--FileInputStream:
|--FilterInputStream
|--BufferedInputStream
|--DataInputStream
|--ByteArrayInputStream
|--ObjectInputStream
|--SequenceInputStream
|--PipedInputStream


OutputStream
|--FileOutputStream
|--FilterOutputStream
|--BufferedOutputStream
|--DataOutputStream
|--ByteArrayOutputStream
|--ObjectOutputStream
|--PipedOutputStream
|--PrintStream

RandomAccessFile: seek();
小结:刚开始学习IO流给我的感觉就是很难去理解,感觉看上去每个关键字都差不多,其实IO流的操作是有规律可寻的,而且总体的代码只要理解后都是万变不离其宗,比如怎么去读写数据、键盘录入、包括对异常的处理等等。学习IO要深入的去理解去学习,继续吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值