博客信息

IO流之其他类(概述、打印流、序列/合并流、分割流)

发布时间:『 2019-06-16 04:50』  博客类别:java基础  阅读(727)

概述

打印流

PrintWriterPrintStream

可以直接操作输入流和文件

 

序列流

SequenceInputStream

对多个流进行合并

 

操作对象

ObjectInputStreamObjectOutputStream

被操作的对象需要实现Serializable(标记接口)

 

打印流

 

字节打印流

PrintStream

构造函数可以接收的参数类型;

1、File对象,File

2、字符串路径:String

3、字节输出流:OutputStream

 

字符打印流:

PrintWriter

构造函数可以接收的参数类型;

1、File对象:File

2、字符串路径:String

3、字节输出流:OutputStream

4、字符输出流:Writer


package com.javaxl.io.other;

import java.io.*;

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company
 * @create  2019-06-15 8:31
 */
public class PrintStreamDemo {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw = new PrintWriter(new FileWriter("C:\\PrintWriterDemo.txt"),true);
        String line = null;
        while ((line = br.readLine())!=null){
            if("over".equals(line)){
                break;
            }
            pw.println(line.toUpperCase());
//            pw.flush();   true代表自动刷新
        }
        br.close();
        pw.close();
    }
}


序列/合并流

应用:多章小说合并成一本小说


package com.javaxl.io.other;

import java.io.*;
import java.util.Vector;

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company
 * @create  2019-06-15 8:53
 */
public class SequenceDemo {
    public static void main(String[] args) throws IOException {
        Vector<FileInputStream> v = new Vector<>();
        v.add(new FileInputStream("C:\\charset.txt"));
        v.add(new FileInputStream("C:\\fos.txt"));
        v.add(new FileInputStream("C:\\PrintWriterDemo.txt"));
        SequenceInputStream sis = new SequenceInputStream(v.elements());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\sequence.txt"));
        byte[] bbuf = new byte[1024];
        int len = 0;
        while ((len = sis.read(bbuf))!=-1){
            bos.write(bbuf,0,len);
        }
        bos.close();
        sis.close();
    }
}


Vector的遍历在IO流中的应用

 

分割流

当服务器限制上传文件的大小,可以将其切割上传

将切割的文件合并


package com.javaxl.io.other;

import java.io.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company
 * @create  2019-06-15 9:29
 */
public class SplitDemo {

    public static void main(String[] args) throws IOException {
//        split();
        merge();
    }

    public static void split() throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\6.jpg"));
        FileOutputStream out = null;
        byte[] bbuf = new byte[1024*10];
        int len = 0;
        int count = 1;
        while ((len = bis.read(bbuf))!=-1){
            out = new FileOutputStream("C:\\partFiles\\"+(count++)+".part");
            out.write(bbuf,0,len);
            out.close();
        }
        bis.close();
    }

    public static void merge() throws IOException {
        List<FileInputStream> al = new ArrayList<>();
        File dir = new File("C:\\partFiles");
            for (File file : dir.listFiles()) {
            al.add(new FileInputStream(file));
        }
        Iterator<FileInputStream> it = al.iterator();
        Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {
            @Override
            public boolean hasMoreElements() {
                return it.hasNext();
            }

            @Override
            public FileInputStream nextElement() {
                return it.next();
            }
        };

        SequenceInputStream sis = new SequenceInputStream(en);
        FileOutputStream fos = new FileOutputStream("C:\\partFiles\\together.jpg");
        byte[] bbuf = new byte[1024];
        int len = 0;
        while ((len = sis.read(bbuf))!=-1){
            fos.write(bbuf,0,len);
        }
        fos.close();
    }

}


因为使用vector对象性能较低,所以采用ArrayList来存放需要合并的碎片文件,但是创建序列流需要用到枚举接口,所以用匿名内部类来完成枚举的创建,而匿名内部类所使用的变量需要被final所修饰。





关键字:     Java基础       IO流       序列流  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有