java IO流以外的其他文件流总结

开始时间 2018年8月10日20:49:01

结束时间 2018年8月10日21:53:42

知识点补充:

一:IO
 SequenceInputStream: 序列流: 
 作用: 实现文件的合并。 
 
 实现了文件的切割。  
 
  序列化流: 将对象的信息以二进制的形式保存在外部的文件当中。 .obj  ObjectOutputStream: writerObject(Object obj); 
  反序列化: 将二进制信息从外部的文件读取到内存当中。   ObjectInputStream : readObject(); 返回的是Object类型。 
  
 打印流: 
 PrintStream: 字节打印流: 
 构造器: File  
      String fileName
      OutputStream out
      
 PrintWriter: 字符打印流
      File 
      String fileName
      OutputStream out
      Writer w
  
二: RandomAccessFile 随机访问文件的流: 
 特点: 
 (1)没有直接继承IO的类。 而是直接继承了Object类。 
 (2)对象能够实现文件的读取和写入。 
 (3)对象的内部封装了一个大的字节数组。 通过指针的移动来实现文件的读取和写入。 
 (4)创建对象的时候,必须指定一个模式。 
    模式: r 只读模式,不能写,否则抛出IOException; 
    模式: rw 读写模式, 如果文件不存在,创建文件。  
  指定的文件存在,那么会追加写,不会覆盖写。 
  (5)  getFilePointer 获得文件的指针。 
       seek 设置指针的位置。
       
三: DataOutputStream  和  DataInputStream 流: 
  特点: 操作基本数据类型。 
   构造器:  new DataOutputStream(OutputStream out); 流不能操作文件。 
        new DataInputStream(InputStream in); 
        
 API方法: 
      DataOutputStream  写的方法: 
        writeInt(32); //四个字节: 
        writeBoolean(true); //一个字节。 
        writeDouble(3.0); // 八个字节。
        
  DataInputStream 读的方法: 
            int readInt = dis.readInt();
        boolean readBoolean = dis.readBoolean();
        double  readDouble = dis.readDouble();
  
  
四: ByteArrayOutputStream 和 ByteArrayInputStream 
  
 1:
  ByteArrayOutputStream 字节数组输出流。
    特点: (1)内部封装了一个字节数组。 内部的数组自动扩容。 
                (2)toByteArray() 和 toString() 获取内部数组的数据。 
                (3)对象和底层的文件没有直接关联,关闭无效。 
                
                
 构造器: 
  new ByteArrayOutputStream();   对象的输出目的是: 对象内部的一个字节数组。 
 API:方法: 
    writeTo(OutputStream out); 可以将内部数组当中的内容写出到外部的文件当中。 
    toByteArray(); 获得对象内部数组的内容。 
    toString(); 获得对象内部数组的内容。 
   
   
 2: ByteArrayInputStream 字节数组输入流:
   特点: 内部也是封装了一个字节数组。  
              将读取的数据读到了内部的数组当中。
               对象和底层的文件没有直接关联,关闭无效。 

  构造器: new ByteArrayInputStream(byte [] buf); 来源是一个byte数组。

RandomAccessFile 随机访问文件的流

https://blog.csdn.net/zhou920786312/article/details/69371073补充

package 面向对象;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class TestRandomAccessFile {
	
	public static void main(String[] args) throws IOException {
		RandomAccessFile inout=new RandomAccessFile("E:/Workspaces/MyEclipse 10/yidong/src/面向对象/a.txt","rw" );
		inout.setLength(0);
		for (int i = 0; i < 200; i++) {
			inout.write(i);
		}
		System.out.println("current file length is"+inout.length());
		inout.seek(0);
		System.out.println("first"+inout.length());
		inout.seek(1*4);
		System.out.println("2  "+inout.readInt());
		inout.seek(2*4);
		System.out.println("3  "+inout.readInt());
		inout.seek(3*4);
		System.out.println("4  "+inout.readInt());
		inout.seek(4*4);
		System.out.println("5  "+inout.readInt());
		inout.writeInt(555);

        inout.seek(inout.length());
        inout.writeInt(999);

        System.out.println("the new length is "+inout.readInt());
        inout.seek(10*4);

        System.out.println("the eleventh number is "+inout.readInt());
        inout.close();
        
		
	}
}

readint  一次读取四个字节

下面的方法实现了文件的随机读和写

//实现文件的读取, 和随机读取。 
	public static void readFile() throws IOException{
		//创建对象: 
		RandomAccessFile raf= new RandomAccessFile("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-36/random.txt", "r");
//	    raf.write(32);// 如果指定的模式为只读模式,那么调用writer方法,就会出现异常。 IOException。 
		
//		raf.read();// 读取汉字的一半。 
		
//		一次读取四个字节,可以将李四读取出来
		/*byte buf[]= new byte[4]; 
		int num = raf.read(buf);
		System.out.println(new String(buf));
		
		//读取年龄:
	   int age= raf.readInt(); //一次读取四个字节。 
	   System.out.println(age);// 256 
	   */
		
		
		
		
		
		
	   //可以实现文件的随机读取:   如果想直接读取王五。   
		
//		设置指针的便宜量: 
//		raf.skipBytes(8);//忽略前八个字节 不读取,从第九个开始读取。  弊端: 只能往后跳,不能往前跳。
		raf.seek(8); // seek方法, 可以随机调整。  实现文件的随机读取; 
		
		byte buf[]= new byte[4]; 
	    raf.read(buf);
	    System.out.println(new String(buf));// 读取到了王五。 
	    
	   
	}
	
	
	//定义一个功能: 使用随机访问文件的对象实现文件的写。 
	public static void writeFile() throws IOException{
		//创建对象: 
		RandomAccessFile raf= new RandomAccessFile("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-36/random.txt", "rw");
	
	    //调用对象的方法: 
		raf.write("李四".getBytes());//姓名
		//
		//raf.write(97); // writer() 在记事本当中会显示a。  RandomAccessFile内部是一个大的字节数组。  最终写出去的97是一个字节类型。 
		               // 记事本夸奖字节类型转换了字符类型。   writer方法,默认只写最低八位。 相当于一个字节。 
		
		// raf.write(256); // 1 0000 0000  256 只被写出去了最低八位。 
		
//		raf.writeInt(256); //256写出去四个字节。 从高字节开始写。 
		
	
		
		//继续写: 
		raf.write("王五".getBytes()); 
		raf.writeInt(99);
		
		
		
		
		//关闭: 
		raf.close(); 
	}

 

DataOutputStream  和  DataInputStream 流:

下面代码实现了用DataOutputStream读写wenjian

package 面向对象;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;


public class TestRandomAccessFile {
	
	public static void main(String[] args) throws IOException {
		DataInputStream dis=new DataInputStream(
								new FileInputStream(
									new File("E:/Workspaces/MyEclipse 10/yidong/src/面向对象/a.txt")));
		int readint=dis.readInt();
		System.out.println(readint);
		double readdouble=dis.readDouble();
		System.out.println(readdouble);
		
	}
	 public static void write2File() throws IOException
	 {
		 DataOutputStream dos=new DataOutputStream(
				                  new FileOutputStream(
						              new File("E:/Workspaces/MyEclipse 10/yidong/src/面向对象/a.txt")));
		 dos.writeInt(56);
		 dos.writeBoolean(true);
		 dos.writeDouble(3.0D);
		 dos.close();
	 }
	
}

扫描二维码关注公众号,回复: 2715820 查看本文章

ByteArrayOutputStream 和 ByteArrayInputStream 

内存数组输入输出流   和底层硬盘无关  只写入到内存中

如下例

package 面向对象;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;


public class TestRandomAccessFile {
	
	public static void main(String[] args) throws IOException {
		write2File();
		
	}
	 public static void write2File() throws IOException
	 {
		 ByteArrayInputStream bis=new ByteArrayInputStream("bb".getBytes());
		 ByteArrayOutputStream bos=new ByteArrayOutputStream();
		 boolean var2=false;
		 int len;
		 while((len=bis.read())!=-1)
		 {
			 bos.write(len);
			 
		 }
		 byte[] byteArray =bos.toByteArray();
		 System.out.println(new String(byteArray));
		 String string =bos.toString();
		 System.out.println(string);
		 
		 bos.writeTo(new FileOutputStream(
				 			new File("E:/Workspaces/MyEclipse 10/yidong/src/面向对象/sss.txt")));
	
	 }
	
}

2018年8月10日21:52:46于易动 

加油  离自己架构师的梦想 又近了一步!!!

猜你喜欢

转载自blog.csdn.net/qq_41517071/article/details/81561148