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("\t%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='\0'; while((c=dis.readChar())!='\0'){ System.out.print(c); } dis.close(); dos.close(); }