IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> IO流:打印流,数据操作流,合并流,压缩流,回退流 -> 正文阅读

[Java知识库]IO流:打印流,数据操作流,合并流,压缩流,回退流

本文学习总结自《Java开发实战经典 第2版》

打印流

主要包括字节打印流PrintStream和字符打印流PrintWriter。
主要方法

//构造
public PrintStream(File file)throws FileNotFoundException
//构造
public PrintStream(OutputStream out)
//根据指定Locale进行格式化输出
public PrintStream printf(Locale l,String format,Object...args)
//根据本地环境格式输出
public PrintStream printftString format,Object...args)
//有很多重载,用来打印各种各样数据
public void print(boolean b)
//有很多重载,用来打印各种各样数据后换行
public void println(boolean b)

示例:

public static void main(String[] args) throws IOException {
    //通过FileOutputStream实例化,输出是向文件之中打印
    PrintStream ps = new PrintStream(new FileOutputStream("D:\\Willow.txt"));
    String name = "Willow";
    int age = 18 ;
    char sex = 'M';
    ps.printf("姓名:%s ; 年龄.:%d ; 性别:%c",name,age,sex);
    ps.close();
}

System的IO
主要有3个常量:public static final PrintStream out,public static final PrintStream err,public static final PrintStream in,分别是标准输出,错误输出,标准输入。
像常用的System.out.println()实际上调用的PrintStream的方法。

重定向方法
通过该方法改变输入流的来源或者输出流的输出位置。

public static void setOut(PrintStream out)
public static void setErr(PrintStream err)
public static void setIn(PrintStream in)

数据操作流

数据操作流,分为数据输出流DataOutputStream和数据输入流DatalnputStream , 通常数据输出流会按照一定的格式将数据输出,再通过数据输入流按照一定的格式将数据读入,方便对数据进行处理。

合并流

用于将两个文件的内容合并成一个文件。SequencelnputStream类。
主要方法

//构造
public SequenceInputStrearn(InputStream si,InputStream s2);
//返回文件大小
public int available() throws IOException

示例代码

    public static void main(String[] args) throws IOException {
        InputStream in1 = new FileInputStream("D:\\Willow1.txt");
        InputStream in2 = new FileInputStream("D:\\Willow2.txt");
        SequenceInputStream inputStream = new SequenceInputStream(in1, in2);
        int len = 0;
        byte[] bytes = new byte[1024];
        while ((len = inputStream.read(bytes)) != -1){
            System.out.print(new String(bytes,0,len,"utf-8"));
        }
        in1.close();
        in2.close();
    }

输出
在这里插入图片描述

压缩流

可以使用压缩流把文件或文件夹进行压缩。
想压缩成zip,需要要导入java.util.zip包。包中主要有类ZipFile、 ZipOutputStream、 ZipInputStream、 ZipEntry。
想压缩成jar,需要要导入java.util.jar包。包中主要有类JarOutputStream、 JarInputStream、 JARFile、 JAREntry。
gzip用于unix系统文件压缩,在包java.util.zip中,常用类是GZIPOutputStream和GZIPInputStream。

ZipOutputStream

public static void main(String[] args) throws IOException {
    File file = new File("D:\\123");
    File zipFile = new File("D:\\123.zip");
    ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFile));
    zip.setComment("Willow");
    if (file.isDirectory()){
        File[] list = file.listFiles();
        for (int i = 0; i< list.length; ++i){
            InputStream in = new FileInputStream(list[i]);
            //每个被压缩的文件用ZipEntry标识,为每个压缩后文件设置名称
            zip.putNextEntry(new ZipEntry(file.getName()
                    +File.separator + list[i].getName()));
            int len = 0;
            while ((len = in.read()) != -1){
                zip.write(len);
            }
            in.close();
        }
    }
    zip.close();
}

ZipFile

public static void main(String[] args) throws IOException {
    File file = new File("D:\\123_unzip.txt");
    File zipFile = new File("D:\\123.zip");
    ZipFile zip = new ZipFile(zipFile);
    ZipEntry entry = zip.getEntry("123.txt");
    InputStream in = zip.getInputStream(entry);
    OutputStream out = new FileOutputStream(file);
    int len = 0;
    while ((len = in.read()) != -1){
        out.write(len);
    }
    in.close();
    out.close();
    zip.close();
}

ZipInputStream

ipFile适用于压缩文件只存在一个ZipEntry的情况,如果存在多个文件或者文件夹时,需要结合ZipInputStream。

public static void main(String[] args) throws IOException {
    File file = new File("D:\\123.zip");
    ZipInputStream zip = new ZipInputStream(new FileInputStream(file));
    ZipEntry entry = null;
    ZipFile zipFile = new ZipFile(file);
    while((entry = zip.getNextEntry()) != null){
        File outFile = new File("D:" + File.separator +entry.getName());
        //判断文件夹是否存在,不存在则建
        if (!outFile.getParentFile().exists()){
            outFile.getParentFile().mkdir();
        }
        //判断文件是否存在,不存在则建
        if(!outFile.exists()){
            outFile.createNewFile();
        }
        InputStream in = zipFile.getInputStream(entry);
        OutputStream out = new FileOutputStream(outFile);
        int len = 0;
        while ((len = in.read()) != -1){
            out.write(len);
        }
        in.close();
        out.close();
    }
    zip.close();
}

回退流

在 JavaIO中所有的数据都是采用顺序的读取方式,即对于一个输入流来说,都是采用从头到尾顺序读取的。如果在输入流中某个不需要的内容被读取进来,则只能通过程序将这些不需要的内容处理掉。为了解决这样的读取问题,在 Java中提供了一种回退输入流(PushbacknputStream、PushbackReader) , 可以把读取进来的某些数据重新退回到输入流的缓冲区中。
主要方法是unread(),进行回退。

    public static void main(String[] args) throws IOException {
        InputStream in = new FileInputStream("D:\\Willow2.txt");
        PushbackInputStream inputStream = new PushbackInputStream(in);
        int len = 0;
        int i = 0;
        while ((len = inputStream.read()) != -1){
            System.out.print((char)len);
            if(((char)len) == '!' && i < 3){
                inputStream.unread((char)len);
                System.out.println("退回");
                ++i;
            }
        }
        in.close();
    }

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:13:47  更:2021-08-21 15:15:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:17:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码