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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风之旅人 中级黑马   /  2015-5-29 12:32  /  694 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

一、流 Stream
   3步骤:1——明确源和类型 2——明确目的地 3——是否提高效率 (4——是否改变编码形式)1.源和类型
    源:内存、键盘、硬盘
    类型:纯文本类型——Reader(字符流)  非纯文本类型InputStream(字节流)
                                        FileReader                                  FileInputStream
2.目的地
    目的地:内存、硬盘、控制台
    类型:纯文本类型——Writer(字符流) 非纯文本类型OutputStream(字节流)
                                        FileWriter                                  FileOutputStream
3.提高效率
    BufferedReader                                                            BufferedWreter
(4.改变编码形式——转换流)
    InputStreamReader                                                      OutputStreamWriter        
package test.java.io;

import java.io.*;

public class CopyImg {

public static void main(String[] args) {
  // TODO Auto-generated method stub
  //1源:非文本文件  InputStream-->FileInputStream
  //1.1 加入缓冲区 BufferedInputStream
  //2目的:非文本文件 OutputStream-->FileOutputStream
  //2.1 加入缓冲区 BufferedOutputStream
  FileInputStream fi = null;
  FileOutputStream fo = null;
  BufferedInputStream bufi = null;
  BufferedOutputStream bufo = null;
  try {
   fi = new FileInputStream("1.jpg");
   fo = new FileOutputStream("2.jpg");
   bufi = new BufferedInputStream(fi);
   bufo = new BufferedOutputStream(fo);
   int ch = 0;
   byte[] arr = new byte[1024];
   //循环
   while((ch=bufi.read(arr, 0, 1023))!=-1){
    bufo.write(arr,0,ch);
   }
  } catch (IOException e) {
   System.out.println(e.toString());
  }finally{
   try {
    if(bufi!=null)
     bufi.close();
   } catch (Exception e2) {

    System.out.println(e2.toString());
   }
   try {
    if(bufo!=null)
     bufo.close();
   } catch (Exception e3) {
    System.out.println(e3.toString());
   }
  }
}

}

二、文件 File
   1.操作方法
    新建文件对象 --> 如果文件存在 --> 关联
                         --> 如果文件不存在--> 新建文件 --> 关联
    File f = new File("url");
    if(!f.exists())
        f.createNewFile();
    2.属性
        名称 路径 绝对路径 大小
三、配置信息 Properties
    1.本质
       Map子类,其中的内容是以 键值对 形式存在的,表现在文件中是=两边。
    2.操作
        setProperty("","")方法可以设置键值对
        load(InputStream)方法可以加载在文本文件中的信息
        store(OutputStream , 注释)方法可以保存信息到文本文件,java中的配置文本后缀名为.properties
    3.类型:xml、文本文件               
四、对象流 ObjectInputStream-ObjectOutputStream
    1.对象的输出流通过 .writeObject()来写入对象,当用集合方法写入多个对象时,可以将null放在集合的最后
    2.当文件中存在多个对象时,.readObject()读取一个对象后,自动移至下一个对象,相当于nextObject(),可以将读来的对象与null相比,来判断是否读到了文件的结尾。
package test.java.io;

import java.io.*;
import java.util.ArrayList;

import test.java.entity.Student;
public class ObjectStreamTest {

public static void main(String[] args) throws IOException, ClassNotFoundException{
  Student stu1 = new Student("zhanghaitao",20,"man");
  Student stu2 = new Student("zhaoji",21,"man");
  Student stu3 = new Student("zhangjiayu",23,"man");
  Student stu4 = new Student("caizhanqi",22,"man");

  File f = new File("student.obj");

//         writeObject(stu1,f);
//         Student stu3 = null;

  System.out.println("---------->  start <--------");
//读取文件内存在的对象
  ArrayList<Object> arr= readObject(f);
  if(arr!=null)
   System.out.println("arr不是空的");
   for(Object stu : arr){
    if(stu!=null)
     System.out.println(stu);
   }

  //向文件内写入对象
//         ArrayList<Object> arr = new ArrayList<Object>();
//         arr.add(stu1);
//         arr.add(stu2);
//         arr.add(stu3);
//         arr.add(null);
//         arr.add(stu1);  
//         writeObject(arr,f);

  System.out.println("----------->  End  <--------");

}
public static ArrayList<Object> readObject(File f) throws IOException, ClassNotFoundException{
  ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
  ArrayList<Object> objs = new ArrayList<Object>();
  Object obj = null;
  while((obj = ois.readObject())!=null){
   objs.add(obj);
  }
  ois.close();
  return objs;
}
public static void writeObject(ArrayList<Object> objs,File f) throws IOException{
  if(!f.exists())
   f.createNewFile();
  ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f,true));
  for(Object obj : objs){
   oos.writeObject(obj);
  }
  oos.close();
}
}

五、随机存取类 RandomAccessFile
    1.本质
    他并不属于文本、字符输入输出流,他继承自Object类,他有着自己的读取字节、存储字节的方法,但他也属于IO体系中的一员,并且有着极为强大的功能。
    2.核心
    他之所以被称之为随机存取类,就是因为它能够通过 .seek()方法,跳跃性的去读取、存数字节,就像是将整个文件的内容存放进了数组一样。

六、编码
    1.GBK能够识别中文 UTF-8也能识别中文  ISSO8559-1不能识别中文
        不能互相是别的——编码 一次 解码一次 搞定
        能相互识别的——
    2.现象:在notepad中只存储“联通”两个字,打开后,出现乱码。
        解释:在UTF-8编码格式中,当用单个字符时 打头01  双字符 110 10  三字符 1110 10 10
                    联通的编码正好是11000001
                                                10101010
                                                11001101
                                                10101000
        也就是说,用GBK格式存储的“联通”正好符合UTF-8的格式,被notepad捕捉到第一个字符的编码后,以UTF-8模式解码,所以出现乱码。
        解决:在“联通”之前,加入其它的中文字符

2 个回复

倒序浏览
感谢分析,这个复习起来挺轻松的,自己可以稍作修改成为自己的笔记加深印象。感谢
回复 使用道具 举报
谢永烽 发表于 2015-5-29 13:34
感谢分析,这个复习起来挺轻松的,自己可以稍作修改成为自己的笔记加深印象。感谢 ...

哈哈,多谢回复:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马