IO流打印流

news2024/11/24 7:54:39

打印流

IO流打印流是Java中用来将数据打印到输出流的工具。打印流提供了方便的方法来格式化和输出数据,可以用于将数据输出到控制台、文件或网络连接。

分类:打印流一般是指:PrintStream,PrintWriter两个类

特点1:打印流只操作文件目的地,不操作数据源

特点2:特有的写出方法可以实现,数据原样写出

字节打印流:默认自动刷新,特有的println自动换行

字符打印流:自动刷新需要开启,特有的println自动换行

例如:打印:97     文件中:97

      打印:true      文件中:true

特点3:特有的写出方法,可以实现自动刷新,自动换行打印一次数据 =写出+换行+刷新

字节打印流

构造方法
public PrintStream(OutputStream/File/String)        关联字节输出流/文件/文件路径

public PrintStream(String fileName,Charset charset)        指定字符编码

public PrintStream(OutputStream out,boolean autoFlush)自动刷新 

public PrintStream(0utputStream out, boolean autoflush, String encoding)指定字符编码且自动刷新

字节流底层没有缓冲区,开不开自动刷新都一样 

成员方法
public voidwrite(int b)        常规方法:规则跟之前一样,将指定的字节写出
public void println(Xxx xx)        特有方法:打印任意数据,自动刷新,自动换行
public void print(Xxx xx)        特有方法:打印任意数据,不换行
public void printf(String format,Object... args) 特有方法:带有占位符的打印语句,不换行

package printstream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

public class PrintStreamDemo1 {
    public static void main(String[] args) throws FileNotFoundException {
        PrintStream ps=new PrintStream(new FileOutputStream("..\\Myio\\a.txt"));
        ps.println(97);//打印任意数据,自动刷新,自动换行
        ps.print(true);//打印任意数据,不换行
        ps.printf("%s等于%d","i",1);//带有占位符的打印语句,不换行
        ps.close();
    }
}

 

字符打印流

字符流底层有缓冲区,想要自动刷新需要开启

构造方法
public PrintWriter(write/File/string)        关联字节输出流/文件/文件路径
public PrintWriter(String fileName,Charset charset)        指定字符编码
public PrintWriter(writew,boolean autoFlush)        自动刷新
public PrintWriter(OutputStream out, boolean autoFlush, Charset charset)指定字符编码且自动刷新

成员方法
public void write(...)        常规方法:规则跟之前一样,写出字节或者字符串
public void println(Xxx xx)        特有方法:打印任意类型的数据并且换行
public void print(Xxx xx)        特有方法:打印任意类型的数据,不换行
public void printf(String format,Object... args)特有方法:带有占位符的打印语句 

package printstream;

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.io.PrintWriter;

public class PrintStreamDemo2 {
    public static void main(String[] args) throws FileNotFoundException {
        PrintWriter pw=new PrintWriter(new PrintStream("..\\Myio\\a.txt"),true);
        //写出数据
        pw.println("你好");
        pw.print(true);
        pw.printf("%s等于%d","i",1);
        //释放资源
        pw.close();
    }
}

我们平时写的输出语句就是一个打印流System.out.println();

获取打印流的对象,此打印流在虚拟机启动的时候,由虚拟机创建,默认指向控制台特殊的打印流,系统中的标准输出流,是不能关闭,在系统中是唯一的。 

解压缩流与压缩流 

解压缩流 

 解压的本质:把压缩包里面的每一个文件或者按照层级拷贝到目的地当中

package zipstream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZipStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //创建一个File表示要解压的压缩包
        File src=new File("E:\\222.zip");
        //创建一个File表示要解压的目的地
        File end=new File("E:\\");
        unzip(src,end);
    }
    public static  void unzip(File src,File end) throws IOException {
        //创建解压缩流用来读取压缩包中的数据
        ZipInputStream zis=new ZipInputStream(new FileInputStream(src));
        //要先获取到压缩包里面的每一个zipentry对象
        ZipEntry zipEntry;
        while ((zipEntry=zis.getNextEntry())!=null){
            System.out.println(zipEntry);
            if(zipEntry.isDirectory()){
                //是文件夹:再目的地end处创建一个同样的文件夹
                File file=new File(end,zipEntry.toString());
                file.mkdirs();
            }
            else{
                //是文件:需要读取到压缩包中的文件,并把他存放到目的地end文件中(按照层级目录进行存放)
                FileOutputStream fos=new FileOutputStream(new File(end,zipEntry.toString()));
                int b=0;
                while ((b=zis.read())!=-1){
                    //写到目的地
                    fos.write(b);
                }
                fos.close();
                zis.closeEntry();
            }
        }
        zis.close();
    }
}

大家可以试一试,别设置中文名字的

压缩流 

 压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中

压缩单个文件 

package zipstream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipStreamDemo2 {
    public static void main(String[] args) throws IOException {
        //创建File对象表示要压缩的文件
        File src=new File("E:\\a.txt");
        //创建File对象表示压缩包的位置
        File end=new File("E:\\");
        toZip(src,end);
    }
    public static void toZip(File src,File end) throws IOException {
        //创建压缩流关联压缩包
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(end,"a.zip")));
        //创建ZipEntry对象,表示压缩包里的每一个文件和文件夹
        ZipEntry entry=new ZipEntry("a.txt");
        //ZipEntry对象放到压缩包当中
        zos.putNextEntry(entry);
        //把src中文件数据写到压缩包中
        FileInputStream fis=new FileInputStream(src);
        int b;
        while ((b=fis.read())!=-1){
            zos.write(b);
        }
        zos.closeEntry();
        zos.close();
    }
}

 

压缩文件夹 

package zipstream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipStreamDemo3 {
    public static void main(String[] args) throws IOException {
        //创建File对象表示要压缩的文件夹
        File src=new File("E:\\222");
        //创建File对象表示压缩包放在哪里(压缩包的父级路径)
        File endParent=src.getParentFile();
        //创建File对象表示压缩包的路径
        File end=new File(endParent,src.getName()+".zip");
        //创建压缩流关联压缩包
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(end));
        //获取src里面的每一个文件,变成zipEntry对象,放入到压缩包当中
        toZip(src,zos,src.getName());
        //释放资源
        zos.close();
    }
    public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
        //1.进入src文件夹
        File[] files = src.listFiles();
        //2.遍历数组
        for (File file : files) {
            if (file.isFile()) {
                //3.判断-文件,变成zipEntry对象,放入到压缩包当中
                ZipEntry entry = new ZipEntry(name + "\\" + file.getName());
                zos.putNextEntry(entry);
                //读取文件中的数据,写到压缩包
                FileInputStream fis = new FileInputStream(file);
                int b;
                while ((b = fis.read()) != -1) {
                    zos.write(b);

                }
                fis.close();
                zos.closeEntry();
            } else {
                //4.判断-文件夹,递归
                toZip(file, zos, name + "\\" + file.getName());
            }
        }
    }
}

打印流与压缩流就说到这里啦

努力遇见更好的自己!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SwiftUI中自定义Shape与AnimateableData的使用

上一篇文章主要介绍了一下在SwiftUI中如何自定义Shape,本篇文章主要介绍Shape中的 一个关键的属性AnimatableData,它用于定义可以被动画化的数据。通过实现 Animatable 协议,可以让自定义视图或图形响应动画变化。 AnimatableData 是 Animata…

Github 2024-06-13 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1Shell项目1多存储文件列表/WebDAV程序 创建周期:1265 天开发语言:Go协议类型:GNU Affero General Public License v…

【安装笔记-20240612-Linux-内网穿透服务之cpolar极点云】

安装笔记-系列文章目录 安装笔记-20240612-Linux-内网穿透服务之 cpolar 极点云 文章目录 安装笔记-系列文章目录安装笔记-20240612-Linux-内网穿透服务之 cpolar 极点云 前言一、软件介绍名称:cpolar极点云主页官方介绍 二、安装步骤测试版本:openwrt-…

.net8 blazor auto模式很爽(一)Blazor WebAssembly(WASM)与Server在.net8中的完美结合

我们在上一章中说到Blazor的WASM和Server模式各有优缺点。在.net8之前,这两种模式是独立的,你的项目只能选其中之一。但是.net8出现了一种叫自动模式,官方解释是:开发者在创建 Blazor 项目时不再显式区分是 Blazor Server 还是 Bl…

TIA博途Wincc与S7-1500 (V2.9) 或S7-1200 (V4.5) 及更高版本固件PLC通信失败的原因汇总

TIA博途Wincc与S7-1500 (V2.9) 或S7-1200 (V4.5) 及更高版本固件PLC通信失败的原因汇总 从TIA Portal V17开始,对于S7-1500PLC新增了V2.9的固件,S7-1200新增了V4.5的固件,PLC侧默认激活了“仅支持PG/PC和HMI的安全通信”, 注意事项1 如果PLC侧激活了“仅支持PG/PC和HMI的安…

java基础知识漏洞二

位移运算符 移位运算符是最基本的运算符之一,几乎每种编程语言都包含这一运算符。移位操作中,被操作的数据被视为二进制数,移位就是将其向左或向右移动若干位的运算。 移位运算符在各种框架以及 JDK 自身的源码中使用还是挺广泛的&#xff…

拼团+秒杀+优惠折扣+个人免签双端商城源码

源码说明 可用拼团秒杀优惠折扣个人免签双端商城源码,全功能完美双端,对接个人免签支付。 这款商城源码非常完整,整体也非常简洁,功能全面,没有那么多冗杂的多余页面和无用代码,拿到后优化了下整体代码&a…

学习grdecl文件格式之后的事情

学习了grdecl文件格式,搞地质的专业人士都知道,这是专门用在地质上的油藏软件(个人感觉就是斯伦贝谢的Petrel的)的一种文件格式,正好自己也在学习三维的开发,顺手写了一个简单的读取grdecl算法,…

HCIA11 网络安全之本地 AAA 配置实验

AAA 提供 Authentication(认证)、Authorization(授权)和 Accounting(计费)三种安全功能。 • 认证:验证用户是否可以获得网络访问权。 • 授权:授权用户可以使用哪些服务。 •…

DOM-获取元素

获取元素的方法&#xff1a; 方法一&#xff1a;根据id获取元素document.getElementById <div id"time">2024-6-4</div> 在script标签中&#xff1a;注意getElementById括号里面必须要有引号&#xff0c;获得的是对象类型 var timer document.getEle…

防火墙安全管理

大多数企业通过互联网传输关键数据&#xff0c;因此部署适当的网络安全措施是必要的&#xff0c;拥有足够的网络安全措施可以为网络基础设施提供大量的保护&#xff0c;防止黑客、恶意用户、病毒攻击和数据盗窃。 网络安全结合了多层保护来限制恶意用户&#xff0c;并仅允许授…

HTML静态网页成品作业(HTML+CSS)—— 家乡山西介绍网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有6个页面。 二、作品演示 三、代…

蒸汽加热产品时的热量计算

使用蒸汽加热产品时&#xff0c;蒸汽释放热量&#xff0c;热量被产品吸收&#xff0c;产品得以升温&#xff1b;蒸汽释放热量后&#xff0c;迅速冷凝&#xff0c;这个过程中&#xff0c;质量不发生改变&#xff0c;所以理论上&#xff0c;消耗多少蒸汽&#xff0c;就会产生多少…

20.1 JSON-JSON接口以及在Go语言中使用JSON

1. 简介 JSON即JavaScript对象表示法(JavaScript Object Notation)&#xff0c;是一种用于存储和交换数据的格式&#xff0c;是一种可供人类阅读和理解的纯文本格式。 JSON既可以键值对的形式&#xff0c;也可以数组的形式&#xff0c;表示数据。 JSON最初是JavaScript的一个…

方法分享 |公网IP怎么指定非433端口实现https访问

公网IP可以通过指定非443端口实现HTTPS访问。在网络配置中&#xff0c;虽然HTTPS协议默认使用443端口&#xff0c;但没有规定不能在其他端口上实施HTTPS服务。使用非标准端口进行HTTPS通信需要正确配置服务器和SSL证书&#xff0c;并确保客户端能够连接到指定的端口。下面说明如…

使用Stream实现Web应用,使用YOLOv8模型对图像进行目标检测为例。

Streamlit是一个开源的Python框架&#xff0c;专门设计用于快速构建和共享数据应用程序。它使数据科学家和机器学习工程师能够通过编写简单的Python脚本&#xff0c;轻松创建美观、功能强大的Web应用程序&#xff0c;而无需具备前端开发的经验。 其他框架或web应用可以看下面两…

超全分析MybatisPlus中的MetaObjectHandler全局字段填充的基本知识(附Demo及实战)

目录 前言1. 源码及API2. Demo架构3. 全局字段填充&#xff08;实战&#xff09;4. 局部字段不填充&#xff08;实战&#xff09; 前言 对于Java的相关知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项…

消息队列的应用场景有哪些

通常来说&#xff0c;使用消息队列主要能为我们的系统带来下面三点好处&#xff1a; 异步处理 削峰/限流 降低系统耦合性 除了这三点之外&#xff0c;消息队列还有其他的一些应用场景&#xff0c;例如实现分布式事务、顺序保证和数据流处理。 异步处理 通过异步处理提高系…

Vue3、Element Plus使用v-for循环el-form表单进行校验

在开发中遇到了这样一个需求 有一个form是通过v-for生成出来的&#xff0c;并且数量不确定&#xff0c;每个表单中的字段都需要做校验&#xff0c;就将自己的解决方法记录了下来。 完整代码如下 <template><div class"for-form"><el-button type&quo…

【python】tkinter GUI开发: 多行文本Text,单选框Radiobutton,复选框Checkbutton,画布canvas的应用实战详解

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…