黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)

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


IO流:


笔记内容:转换流,字节输入输出流,数据输入输出流,内存操作流,随机访问流


打印流,对象序列化流,Properties


一.转换流


转换流:实际就是字符流
OutputStreamWriter:输出转换流
构造方法:


传入一个相应的字节流,返回一个相应的字符流,而这个字符流就是转换流对象


注意:


在使用过程中:将字节流对象转成字符流对象


在本质上:字符流通向字节流的桥梁


InputStreamReader:输入转换流
构造方法:


传入一个相应的字节流,返回一个相应的字符流,而这个字符流就是转换流对象


注意:


在使用过程中:将字节流对象转成字符流对象


在本质上:字节流通向字符流的桥梁


代码演示:




[java] view plaincopy
package cn.itcast2;  
  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.FileReader;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStream;  
import java.io.OutputStreamWriter;  
  
  
public class Demo5 {  
  
    public static void main(String[] args) throws IOException {  
        method();  
    }  
      
    //转换流作为字符流完成文件复制  
    public static void method() throws IOException {  
          
        InputStream is = new FileInputStream("g.txt");  
        InputStreamReader isr = new InputStreamReader(is);  
          
        OutputStream os = new FileOutputStream("h.txt");  
        OutputStreamWriter osw = new OutputStreamWriter(os);  
          
        int c;  
        while((c=isr.read())!=-1) {  
            osw.write(c);  
        }  
          
        osw.close();  
        isr.close();  
    }  
}  
二.字节输入输出流
System.in:字节输入流;从控制台读入;名为标准输入流
System.out:字节输出流;输出到控制台;名为标准输出流
代码演示:




[java] view plaincopy
package cn.itcast2;  
  
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStream;  
import java.io.OutputStreamWriter;  
  
/* 
 * 从控制台读取,再写到控制台中去 
 */  
public class Demo7 {  
  
    public static void main(String[] args) throws IOException {  
  
        //创建字节流对象  
        InputStream is = System.in;  
        OutputStream os = System.out;  
        //创建字符流对象  
        InputStreamReader isr = new InputStreamReader(is);  
        OutputStreamWriter osr = new OutputStreamWriter(os);  
          
        //创建高效字符流对象  
        BufferedReader br = new BufferedReader(isr);  
        BufferedWriter bw = new BufferedWriter(osr);  
          
        //读  
        String line;  
        while((line=br.readLine())!=null) {  
            //定义停止输入的标记字符串  
            if("byebye".equals(line)) {  
                break;  
            }  
              
            //写  
            bw.write(line);  
            bw.newLine();  
            bw.flush();  
        }  
          
        //关闭流  
        osr.close();  
        isr.close();  
    }  
  
}  


三.数据输入输出流:
DataOutputStream:数据输出流
public final void writeXxx(xx x) throws IOException  写出XXX类型的数据
DataInputStream:数据输入流
public final byte readXxx(xx x) throws IOException  读入Xxx类型的数据
按照相同的顺序读写
代码演示:




[java] view plaincopy
package cn.itcast;  
  
import java.io.DataInputStream;  
import java.io.DataOutputStream;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.FileWriter;  
import java.io.IOException;  
  
public class Demo {  
  
    public static void main(String[] args) throws IOException {  
          
//      FileWriter fw = new FileWriter("a.txt");  
//      fw.write("10");  
//      fw.close();  
          
        int a = 983;  
[java] view plaincopy
<span style="white-space:pre">        </span>//创建数据输出流对象  
[java] view plaincopy
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.txt"));  
          
        dos.writeInt(a);  
        dos.writeBoolean(true);  
        dos.writeChar('a');  
        dos.writeDouble(365);  
        dos.writeUTF("i love java 中国");  
          
        dos.close();  
        //创建数据输入流对象  
        DataInputStream dis = new DataInputStream(new FileInputStream("a.txt"));  
          
        System.out.println(dis.readInt());  
        System.out.println(dis.readBoolean());  
        System.out.println(dis.readChar());  
        System.out.println(dis.readDouble());  
        System.out.println(dis.readUTF());  
          
        dis.close();  
    }  
  
}  


四.内存操作流:
不需要调用底层资源的IO流
ByteArrayOutputStream:字节数组输出流     即将数据写到数组中


ByteArrayInputStream:字节数组输入流    即从数组中读取


CharArray 与 String 是相同的思路


代码演示:




[java] view plaincopy
package cn.itcast;  
  
import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.util.Arrays;  
  
public class Demo2 {  
  
    public static void main(String[] args) {  
        /* 
         * CharArrayReader:从数组中读去字符 
         * CharArrayWriter:将字符写到数组中 
         * StringWriter:将字符写到字符串中 
         * StringReader:从字符串中读取数据 
         */  
        //创建IO流对象  
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        //向缓冲区中写出3个字节  
        baos.write('a');  
        baos.write('b');  
        baos.write('c');  
        //返回缓冲区中的字节数组  
        byte[] byteArray = baos.toByteArray();  
        //使用数组工具类打印字节数组内容  
        System.out.println(Arrays.toString(byteArray));  
        //创建IO流对象,指定一个字节数组为数据源  
        ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);  
        //读取数组中的每一个字节  
        int b;  
        while((b=bais.read())!=-1) {  
            System.out.println((char)b);  
        }  
    }  
  
}  


五.打印流:
专门用来输出的IO流




PrintSteam:字节打印流


PrintWriter:字符打印流






println与printf方法时支持自动刷新的,但是需要在创建字符打印流对象时,将autoflush打开


代码演示:




[java] view plaincopy
package cn.itcast;  
  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.PrintWriter;  
  
public class Demo3 {  
  
    public static void main(String[] args) throws IOException {  
  
        PrintWriter pw = new PrintWriter(new FileOutputStream("b.txt"),true);  
          
        pw.println(200.0);  
        pw.println(false);  
        pw.print(100.0);  
        pw.print(true);  
        pw.println("i love java");  
          
        pw.printf("我是前边的参数%d%d%.2f", 10,20,10.1);  
//      pw.flush();  
          
//      pw.close();  
    }  


六.随机访问流:
RandomAccessFile
随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组,即文件是由字节组成的,随机访问流将整个文件看做一个byte数组了
存在指向该隐含数组的光标或索引,称为文件指针      
该指针可以设置或者获取


设置指针:public void seek(long pos) throws IOException


获取指针:public long getFilePointer() throws IOException


构造方法:


public RandomAccessFile(File file,  String mode) throws FileNotFoundException  需要配合读写模式


EOFException:相当于数组角标越界,即索引的访问异常




代码演示:




[java] view plaincopy
package cn.itcast;  
  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.RandomAccessFile;  
  
public class Demo4 {  
  
    public static void main(String[] args) throws IOException {  
  
        myWrite();  
        myRead();  
    }  
  
    public static void myWrite() throws IOException {  
        <strong><span style="font-family: Simsun;"><span style="font-size:14px;"></span></span></strong><pre name="code" class="java"><span style="white-space:pre">        </span>//创建随机访问流对象  
[java] view plaincopy
<span style="white-space:pre">        </span>RandomAccessFile raf = new RandomAccessFile("c.txt", "rw");  
          
        System.out.println(raf.getFilePointer());  
        raf.writeInt(998);  
        System.out.println(raf.getFilePointer());  
        raf.writeDouble(10.1);  
        System.out.println(raf.getFilePointer());  
        raf.writeUTF("abc中");  
        System.out.println(raf.getFilePointer());  
          
        raf.close();  
    }  
      
    public static void myRead() throws IOException {  
        RandomAccessFile raf = new RandomAccessFile("c.txt", "rw");  
          
        System.out.println(raf.readInt());  
        raf.seek(8);  
        System.out.println(raf.readDouble());  
        System.out.println(raf.readUTF());  
          
        raf.close();  
    }  
}  


七.对象序列化流:
ObjectOutputStream:序列化流
ObjectInputStream:反序列化流
序列化的对象必须实现了序列化接口
Serializable
代码演示:


[java] view plaincopy
package cn.itcast;  
  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.ObjectInputStream;  
import java.io.ObjectOutputStream;  
  
public class Demo5 {  
  
    public static void main(String[] args) throws IOException, ClassNotFoundException {  
  
//      ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d.txt"));  
//        
//      Person p = new Person("唐嫣",26);  
//      oos.writeObject(p);  
//        
//      oos.close();  
          
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d.txt"));  
        Object readObject = ois.readObject();  
        Person p2 = (Person)readObject;  
          
        System.out.println(p2.getName());  
        System.out.println(p2.getAge());  
          
        System.out.println(p2);  
          
        ois.close();  
    }  
  
}  


八.Properties: 
普通的一个双列集合
Properties没有泛型,但是一般情况下,该集合中的键与值均为字符串


代码演示:




[java] view plaincopy
package cn.itcast;  
  
import java.util.Properties;  
import java.util.Set;  
  
public class Demo6 {  
  
    public static void main(String[] args) {  
  
        //创建集合对象  
        Properties p = new Properties();  
        //创建元素对象  
        //将元素放到集合中  
        p.put("呼保义", new Person("宋江",28));  
        p.put("玉麒麟", new Person("卢俊义",32));  
        p.put("九纹龙", new Person("史进",24));  
        //迭代集合  
        Set<Object> keySet = p.keySet();  
          
        for (Object key : keySet) {  
            Object value = p.get(key);  
            System.out.println(key+":"+value);  
        }  
    }  
  
}  


Properties特有方法:
Properties一般作为属性集,里边存储的都为字符串.


public Object setProperty(String key,String value)  为某个属性赋值,即添加元素


public String getProperty(String key)  通过键获取值


public String getProperty(String key, String defaultValue)用指定的键在属性列表中搜索属性.如果没有,就返回默认值




[java] view plaincopy
package cn.itcast;  
  
import java.util.Properties;  
  
public class Demo7 {  
  
    public static void main(String[] args) {  
          
        Properties p = new Properties();  
          
        p.setProperty("智多星", "吴用");  
        p.setProperty("入云龙", "公孙胜");  
        p.setProperty("大刀", "关胜");  
          
        System.out.println(p.getProperty("智多星"));  
        System.out.println(p.getProperty("大刀"));  
          
        System.out.println(p.getProperty("豹子头"));  
        System.out.println(p.getProperty("霹雳火"));  
        System.out.println(p.getProperty("霹雳火","梁山好汉"));  
    }  
}  


Properties与IO相关的方法:
public void list(PrintStream out)  将属性列表输出到指定的输出流.通常用于调试
public void save(OutputStream out,  String comments) 将属性列表输出到指定的输出流,已过时
public void store(OutputStream out, String comments) throws IOException 将属性列表输出到指定的输出流


public void load(InputStream inStream)throws IOException 从输入流中读取属性列表(键和元素对)
代码演示:




[java] view plaincopy
package cn.itcast;  
  
import java.io.FileReader;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.util.Properties;  
  
public class Demo8 {  
  
    public static void main(String[] args) throws IOException {  
  
        Properties p = new Properties();  
          
        p.setProperty("是否隐身", "在线");  
        p.setProperty("在线状态", "忙碌");  
        p.setProperty("是否记住密码", "否");  
          
//      PrintWriter pw = new PrintWriter("e.txt");  
//      p.list(pw);  
//      pw.close();  
          
//      FileOutputStream fos = new FileOutputStream("e.txt");  
//      p.store(fos, "hello");  
//      fos.close();  
          
//      FileWriter fw = new FileWriter("e.properties");  
//      p.store(fw, "hello");  
//      fw.close();  
          
        Properties p2 = new Properties();  
          
        FileReader fr = new FileReader("e.properties");  
        p2.load(fr);  
        fr.close();  
          
        System.out.println(p);  
    }  
  
}  
















版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值