• java IO流 五、


        public static void demo1() throws FileNotFoundException, IOException {
            FileInputStream fis1 = new FileInputStream("a.txt");        //创建字节输入流关联a.txt
            FileOutputStream fos = new FileOutputStream("c.txt");        //创建字节输出流关联c.txt        
            
            int b1;
            while((b1 = fis1.read()) != -1) {                            //不断的在a.txt上读取字节
                fos.write(b1);                                            //将读到的字节写到c.txt上
            }
            fis1.close();                                                //关闭字节输入流
            
            FileInputStream fis2 = new FileInputStream("b.txt");
            int b2;
            while((b2 = fis2.read()) != -1) {
                fos.write(b2);
            }
            
            fis2.close();
            fos.close();
        }

    FileOutputStream fos = new FileOutputStream("c.txt"); //创建字节输出流关联c.txt

    fileoutputstream重新开启会造成文本清空 ,fileinputstream不会造成文本清空
    ===============================================================================================================================================




    序列流

    1.什么是序列流
    * 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推.

     2.使用方式
    * 整合两个: SequenceInputStream(InputStream, InputStream)

    * 整合多个: SequenceInputStream(Enumeration)

     
        public static void demo2() throws FileNotFoundException, IOException {
            FileInputStream fis1 = new FileInputStream("a.txt");
            FileInputStream fis2 = new FileInputStream("b.txt");
            SequenceInputStream sis = new SequenceInputStream(fis1, fis2);
            FileOutputStream fos = new FileOutputStream("c.txt");
            
            int b;
            while((b = sis.read()) != -1) {
                fos.write(b);
            }
            
            sis.close();                    //sis在关闭的时候,会将构造方法中传入的流对象也都关闭
            fos.close();
        }

    使用枚举添加多个fileinputstream
        /**
         * @param args
         * 整合两个输入流
         * SequenceInputStream(InputStream s1, InputStream s2)
         * 整合多个输入流
         * SequenceInputStream(Enumeration<? extends InputStream> e)
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            //demo1();
            //demo2();
            FileInputStream fis1 = new FileInputStream("a.txt");
            FileInputStream fis2 = new FileInputStream("b.txt");
            FileInputStream fis3 = new FileInputStream("c.txt");
            
            Vector<FileInputStream> v = new Vector<>();                    //创建集合对象
            v.add(fis1);                                                //将流对象存储进来
            v.add(fis2);
            v.add(fis3);
            
            Enumeration<FileInputStream> en = v.elements();
            SequenceInputStream sis = new SequenceInputStream(en);        //将枚举中的输入流整合成一个
            FileOutputStream fos = new FileOutputStream("d.txt");
            
            int b;
            while((b = sis.read()) != -1) {
                fos.write(b);
            }
            
            sis.close();
            fos.close();
        }
    
    
    
     

    内存输出流
    * 1.什么是内存输出流
    * 该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
    * 2.使用方式
    * 创建对象: new ByteArrayOutputStream()
    * 写出数据: write(int), write(byte[])
    * 获取数据: toByteArray()
    *

     
        /**
         * @param args
         * ByteArrayOutputStream
         * 内存输出流
         * 
         * FileInputStream读取中文的时候出现了乱码
         * 
         * 解决方案
         * 1,字符流读取
         * 2,ByteArrayOutputStream
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            //demo1();
            FileInputStream fis = new FileInputStream("e.txt");
            ByteArrayOutputStream baos = new ByteArrayOutputStream();            //在内存中创建了可以增长的内存数组
            
            int b;
            while((b = fis.read()) != -1) {
                baos.write(b);                                                    //将读取到的数据逐个写到内存中
            }
            
            //byte[] arr = baos.toByteArray();                                    //将缓冲区的数据全部获取出来,并赋值给arr数组
            //System.out.println(new String(arr));
            
            System.out.println(baos.toString());                                //将缓冲区的内容转换为了字符串,在输出语句中可以省略调用toString方法
            fis.close();
        }
    
        public static void demo1() throws FileNotFoundException, IOException {
            FileInputStream fis = new FileInputStream("e.txt");
            byte[] arr = new byte[3];
            int len;
            while((len = fis.read(arr)) != -1) {
                System.out.println(new String(arr,0,len));
            }
            
            fis.close();
        }
    
    
    

    ===========================================================================================

    对象操作流ObjectInputStream

    首先对象要先实现
    Serializable接口
     
    public class person implements  Serializable{
    
    private String name;
    private int age;
    public person() {
    super();
    
    }
     
    * 读取: new ObjectInputStream(InputStream), readObject()
        * 
                public class Demo3_ObjectInputStream {
    
                    /**
                     * @param args
                     * @throws IOException 
                     * @throws ClassNotFoundException 
                     * @throws FileNotFoundException 
                     * 读取对象,反序列化
                     */
                    public static void main(String[] args) throws IOException, ClassNotFoundException {
                        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
                        Person p1 = (Person) ois.readObject();
                        Person p2 = (Person) ois.readObject();
                        System.out.println(p1);
                        System.out.println(p2);
                        ois.close();
                    }
                
                }
    
    
    
    * 将对象存储在集合中写出
        Person p1 = new Person("张三", 23);
        Person p2 = new Person("李四", 24);
        Person p3 = new Person("马哥", 18);
        Person p4 = new Person("辉哥", 20);
        
        ArrayList<Person> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));
        oos.writeObject(list);                                    //将对象信息写入到文本中
        
        oos.close();
    
    
        ObjectInputStream is = new ObjectInputStream(new FileInputStream("e.txt"));
            ArrayList<person> list = (ArrayList<person>) is.readObject();
            for (person s1 : list) {
                System.out.println(s1);   //将对象信息写出到控制台
            }
    
            is.close();




    * 将对象存储在集合中写出 Person p1 = new Person("张三", 23); Person p2 = new Person("李四", 24); Person p3 = new Person("马哥", 18); Person p4 = new Person("辉哥", 20); ArrayList<Person> list = new ArrayList<>(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("f.txt")); oos.writeObject(list); //写出集合对象 oos.close();


    * 读取到的是一个集合对象 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("f.txt")); ArrayList<Person> list = (ArrayList<Person>)ois.readObject(); //泛型在运行期会被擦除,索引运行期相当于没有泛型 //想去掉黄色可以加注解 @SuppressWarnings("unchecked") for (Person person : list) { System.out.println(person); } ois.close();


    加上id号   好处在于如果类 比如新增  gender属性,没有先存档就直接读档   就显示ID信息不正确
    * 注意
    * 要写出的对象必须实现Serializable接口才能被序列化
    * 不用必须加id号

    public class Person implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = 2L;
        private String name;
        private int age;

     









  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    《设计模式
    《设计模式
    《设计模式
    《linux 计划任务》- cron
    《设计模式
  • 原文地址:https://www.cnblogs.com/yimian/p/6553469.html
Copyright © 2020-2023  润新知