zoukankan      html  css  js  c++  java
  • 文件模式JAVASE16IO流_3

    在写这篇文章之前,xxx已经写过了几篇关于改文件模式主题的文章,想要了解的朋友可以去翻一下之前的文章

        一,操纵象对

        

        

    package IO2;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    
    public class ObjectStreamDemo {
    
    	/**
    	 * @param args
    	 */
    	public static void main (String[] args) throws Exception{
    	
    		//writeObj();
    		readObj();
    	}
    	public static void readObj() throws Exception {
    		ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.txt"));
    		
            Person p=(Person)ois.readObject();
            System.out.println(p);
            ois.close();
    	}
    	
    	public static void writeObj() throws Exception {
    		ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("obj.txt"));
    		oos.writeObject(new Person("lisi",339,"kr"));
    		oos.close();
           
    	}
    
    }

        

        

    package IO2;
    
    import java.io.Serializable;
    
    //序列化已现实象对的持久化
    public class Person implements Serializable{
    	private String name;
    	transient int age;    //此属性不会被序列化
    	static String country="cn"; //静态也不能被序列化
    	public Person(String name, int age, String country) {
    		super();
    		this.name = name;
    		this.age = age;
    		this.country=country;
    	}
    	@Override
    	public String toString() {
    	return name+":"+age+":"+country;
    	}
    	
    	
    
    }

        文件和模式

        

        二,IO包中的其他类

        1,管道流:

    package IO2;
    
    import java.io.IOException;
    import java.io.PipedInputStream;
    import java.io.PipedOutputStream;
    
    public class PipedStreamDemo {
    
    	/**
    	 * @param args
    	 * @throws IOException 
    	 */
    	public static void main(String[] args) throws IOException {
    		
    		PipedInputStream in=new PipedInputStream();
    		PipedOutputStream out= new PipedOutputStream();
    		in.connect(out);
            Read r=new Read(in);
            Write w=new Write(out);	
            new Thread(r).start();
            new Thread(w).start();
    	}
    
    }
    
    class Read implements Runnable
    {
    
    	private  PipedInputStream in;
    	
    	Read( PipedInputStream in)
    	{
    		this.in=in;
    	}
    	@Override
    	public void run() {
    		try {
    		byte[]buf=new byte[1024];
    		System.out.println("读取前,没有数据,阻塞");
    		int len= in.read(buf);
    		System.out.println("读到数据,阻塞束结");
    		String s=new String(buf,0,len);
    		System.out.println(s);
    		in.close();
    		} catch (IOException e) {
    			
    			e.printStackTrace();
    		}
    	
    		
    	}
    	
    	}
    
    class Write implements Runnable
    {
    
    	private  PipedOutputStream out;
    	
    	Write( PipedOutputStream out)
    	{
    		this.out=out;
    	}
    	@Override
    	public void run() {
    		
    		try {
    			System.out.println("开始入写数据,等待5秒后");
    			Thread.sleep(5000);
    			out.write("piped come ".getBytes());
    			out.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	
    	}
    	
    	}

        文件和模式

      

        

         2,RandomAccessFile

           该类不算是IO系体的子类,二是直接继承自Object。
       但是他是IO包中成员,因为它具有读和写功能。外部封装了一个数组,而且通过针指对数组的元素停止操纵。可以通过getFilePointer取获针指置位,共事可以根据seek转变针指置位。
        其实成完写读的道理就是外部封装了字节输入流和输出流
        从构造函数可以看出,该类只能操纵文件。
        而且操纵文件还有模式。只读 r, 写读 rw 等,

        每日一道理
    天又快黑了,这座忙碌的城市又将入睡,让这劳累的“身躯”暂别白日的辛勤,让它入睡,陪伴着城市中的人们进入梦乡。当空的弯月正深情地注视着这座城市与城市中的人们,看着家家户户的灯渐渐熄灭,它在床头悄悄奏响“明月曲”……

        如果模式为只读r,不会建创文件,去回读取一个已存在的文件,如果不存在,则会出现异常。
    如果模式为rw,
    操纵的文件不存在会动自建创,如果 存在则不会覆盖。

        

    package IO2;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    
    public class RandomAccessFileDemo {
    
    	/**
    	 * @param args
    	 * @throws IOException 
    	 */
    	public static void main(String[] args) throws IOException {
    		
    		//writeFile();
    		readFile();
    	}
    	
    	public static void writeFile() throws IOException
    	{
    		
    		RandomAccessFile raf=new RandomAccessFile("ran.txt", "rw");
    		raf.write("李四".getBytes());
    		raf.writeInt(97);
    		raf.write("王五".getBytes());
    		raf.writeInt(99);
    		raf.close();
    	}
    	
    	public static void readFile() throws IOException
    	{
    		//r: 只读
    		RandomAccessFile raf=new RandomAccessFile("ran.txt","r");
    		//调整象对中的针指
    		raf.seek(8*1);
    		 //跳过指定的字节数
    		//raf.skipBytes(8);
    		byte[] buf=new byte[4];
    		raf.read(buf);
    		String name=new String (buf);
    		int age=raf.readInt(); //一次读4个字节
    		System.out.println("name="+name);
    		System.out.println("age="+age);
    		raf.close();
    	}
    	
    	
    
    }

        文件和模式文件和模式


      3,操纵基本数据类型的流象对

               DataInputStream 与DataOutputStream
    可以用于操纵基本数据类型的流象对

    package IO2;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    public class DataStreamDemo {
    
    	/* 
    	 * 
    	 */
    	public static void main(String[] args) throws Exception {
    		readdata();
    		//writedata();
    	}
    	public static void writedata() throws Exception {
    		DataOutputStream dos=new DataOutputStream(new FileOutputStream("data.txt"));
    		//入写13个字节
    		dos.writeInt(234);
    		dos.writeBoolean(true);
    		dos.writeDouble(2343.234); 
    		dos.close();
    	}
    	public static void readdata() throws Exception {
    		
    		DataInputStream dis=new DataInputStream(new FileInputStream("data.txt"));
    		int num=dis.readInt();
    		boolean b=dis.readBoolean();
    		double d=dis.readDouble();
    		System.out.print(num+","+b+","+d);
    		dis.close();
    	}
    	
    
    }

        

        4,操纵字节数组的流象对

         ByteArrayInputStream:  在构造的时候,需要接受数据源,而且数据源是一个字节数组
         ByteArrayOutputStream: 在构造的时候不用定义数据目的,因为该象对中已经封装了可变长度的字节数组,这就是数据目的。
         因为这2个流象对都操纵数组,并没有使用系统资源,所以不用停止close关闭。

        在写流操纵规律时,

       源设备:

       键盘:System.in  硬盘: FileStream 内存 ArrayStream
      目的设备:

       控制台:System.out 硬盘 FileStream  内存 ArrayStream

    用流的写读思想来操纵数组

        

        文件和模式

    package IO2;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.FileOutputStream;
    
    public class ByteArrayStream {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		  ByteArrayInputStream  bis=new ByteArrayInputStream("DFSDFSF".getBytes());
    		  
              ByteArrayOutputStream  bos=new ByteArrayOutputStream();
              
              //System.out.println(bos.size());
              int by=0;
              while((by=bis.read())!=-1)
              {
            	  bos.write(by);
              }
              System.out.println(bos.toString());
              //bos.writeTo(new FileOutputStream("a.txt"));
    	}
    
    }

        

    文章结束给大家分享下程序员的一些笑话语录: 人脑与电脑的相同点和不同点,人脑会记忆数字,电脑也会记忆数字;人脑会记忆程序,电脑也会记忆程序,但是人脑具有感知能力,这种能力电脑无法模仿,人的记忆会影响到人做任何事情,但是电脑只有程序软件。比尔还表示,人脑与电脑之间最重要的一个差别就是潜意识。对于人脑存储记忆的特别之处,比尔表示,人脑并不大,但是人脑重要的功能是联络,人脑会把同样的记忆存储在不同的地方,因此记忆读取的速度就不相同,而这种速度取决于使用的频率和知识的重要性。人脑的记忆存储能力会随着年龄增长而退化,同时记忆的质量也会随着年龄退化。经典语录网

  • 相关阅读:
    Jetty和tomcat的比较
    Spring Boot – Jetty配置
    Java规则之条件语句中做空判断时使用||和&&常犯的错误
    bboss oreach循环嵌套遍历map
    url全部信息打印
    ajax省市县三级联动
    关于mysql中的count()函数
    vue——统一配置axios的baseUrl和所有请求的路径
    js——substr与substring的区别
    vue——axios请求成功却进入catch的原因
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3065649.html
Copyright © 2011-2022 走看看