Java I/O第二篇 之 (缓冲流 随机流 数组流 数据流)

1:缓冲流 BufferedReader  BufferedWriter

    具有较强的读写能力,能单独读写一行数据,能够减少对硬盘的访问次数。

 1 /**
 2  * 缓冲流   能够增强对问价数据的可读性,减少访问读取硬盘的次数,提高效率
 3  * */
 4     public static void bufferedDemo() throws IOException{
 5         File fread=new File("E:\input.txt");
 6         File fwrite=new File("E:\output.txt");
 7         System.out.println("文件:"+"E:\output.txt"+"是否可读"+fwrite.canWrite());
 8         BufferedReader bis=null;
 9         BufferedWriter bos=null;
10         FileReader fis=new FileReader(fread);
11         FileWriter fos=new FileWriter(fwrite);
12         bis=new BufferedReader(fis);
13         bos=new BufferedWriter(fos);
14         //读取文件数据,打印展示
15         int lineLen=0;
16         String arrayStr[]=new String[20];        //创建数组,存储读取内容
17         String temp;
18         while((temp=bis.readLine())!=null){
19             System.out.println(temp);
20             arrayStr[lineLen]=temp;
21             lineLen++;
22         }
23         System.out.println("文件读取完毕");
24         //输出数据
25         String s;
26         while((s=bis.readLine())!=null){
27             bos.write(s);
28             bos.newLine();     //插入换行符
29         }
30         System.out.println("数据输出完毕。");
31         bos.flush();
32         bis.close();
33         bos.close();
34     }

2:随机流 RandomAccessFile 

    RandomAccessFile流,既可以读取文件中的数据,也可以写进文件中的数据的一种流

 1 /**
 2      * 随机流      可读可写的类型RandomAccessFile
 3      * @throws IOException 
 4      * */
 5     public static void RandomAccessDemo() throws IOException{
 6         //单独使用Random写进一些数据,在读出来
 7         int data[]={1,2,3,4,5,6,7,8,9};
 8         File fileName=new File("E:\RandomAccessFile.txt");
 9         if(!fileName.exists())
10             fileName.createNewFile();
11         RandomAccessFile raf=new RandomAccessFile(fileName, "rw");
12         for(int i=0;i<data.length;i++){
13             raf.writeInt(i);
14         }
15         System.out.println("数据写入完毕。");
16         //读取数据
17         for(int j=data.length-1;j>=0;j--){
18             raf.seek(j*4);
19             System.out.printf("	%d",raf.readInt());
20         }
21         raf.close();
22     }

3:数组流     字节数组流:ByteArrayInputStream  ByteArrayOutputStream

                  字符数组流:BytearrayReader  ByteArrayWriter

 1 /**
 2      * 数组流   字节数组流(ByteArrayInputStream  ByteArrayOutputStream)
 3      *        字符数组流(BytearrayReader  ByteArrayWriter)
 4      * */
 5     public static void ByteArrayDemo() throws Exception{
 6         //字节流
 7         ByteArrayOutputStream bos=new ByteArrayOutputStream();
 8         byte [] str="祝你节日快乐".getBytes();
 9         bos.write(str);                //写入数据
10         //读取数据
11         ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());
12         byte[] b=new byte[bos.toByteArray().length];
13         bis.read(b);
14         System.out.println("写入的数据为:"+new String(b));
15         bis.close();
16         bos.close();
17         //字符流
18         CharArrayWriter caw=new CharArrayWriter();
19         char [] str2="中秋节快乐!".toCharArray();
20         caw.write(str2);
21         CharArrayReader car=new CharArrayReader(caw.toCharArray());
22         char[] c=new char[caw.toCharArray().length];
23         car.read(c);
24         System.out.println("读取的数据为:"+new String(c));
25         car.close();
26         caw.close();
27     }

4:数据流   DataInputStream DataOutputStream 

    能够方便的读取与机器无关的java原始数据,读取时不必纠结去字节大小

/**
     * 数据流 DataInputStream DataOutputStream 能够方便的读取与机器无关的java原始数据
     * */
    public static void DataDemo() throws IOException{
        //创建文件 ,用数据流写入不同类型的数据,分别读出不同类型的数据
        File f=new File("E:\DataDemo.txt");
        FileOutputStream fos=new FileOutputStream(f);
        DataOutputStream dos=new DataOutputStream(fos);
        dos.writeInt(23);
        dos.writeDouble(22.343435);
        dos.writeFloat(55.2343f);
        dos.writeBoolean(true);
        dos.writeChars("中秋快乐!");
        System.out.println("数据读入完毕!");
        //读取数据
        FileInputStream fis=new FileInputStream(f);
        DataInputStream dis=new DataInputStream(fis);
        System.out.println(dis.readInt());
        System.out.println(dis.readDouble());
        System.out.println(dis.readFloat());
        System.out.println(dis.readFloat());
        System.out.println(dis.readBoolean());
        char c='';
        while((c=dis.readChar())!=''){
            System.out.print(c);
        }
    dis.close();
    dos.close();
    }
原文地址:https://www.cnblogs.com/chenyangqi/p/4328433.html