(每日持续更新)jdk api之PipedWriter基础、应用、实战

news2024/9/23 5:29:09

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

关注【架构师成长之道】 输入“java基础课程”,即可免费获得全套架构师全套课程

1.61 PrintStream

PrintStream 是 Java 中的一个类,用于打印各种数据类型的值,并提供了一系列方法来实现输出操作。它是 OutputStream 的子类,通常用于将输出发送到控制台或文件。

PrintStream 类的字段:
  • protected boolean autoFlush:表示是否自动刷新缓冲区。

  • protected OutputStream out:表示与此 PrintStream 对象关联的底层输出流。

PrintStream 类的构造方法:
  • PrintStream(File file) throws FileNotFoundException:使用指定的文件创建新的 PrintStream

  • PrintStream(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException:使用指定的文件和字符集名称创建新的 PrintStream

  • PrintStream(OutputStream out):创建新的 PrintStream,并将其输出发送到指定的输出流。

  • PrintStream(OutputStream out, boolean autoFlush):创建新的 PrintStream,并将其输出发送到指定的输出流,同时指定是否自动刷新缓冲区。

  • PrintStream(OutputStream out, boolean autoFlush, String encoding) throws UnsupportedEncodingException:创建新的 PrintStream,将其输出发送到指定的输出流,同时指定是否自动刷新缓冲区和字符编码。

PrintStream 类的方法摘要(部分):
  • void print(boolean b):打印一个布尔值。

  • void print(char c):打印一个字符。

  • void print(double d):打印一个双精度浮点数。

  • void print(int i):打印一个整数。

  • void print(long l):打印一个长整数。

  • void print(Object obj):打印一个对象。

  • void print(String s):打印一个字符串。

  • void println():打印一个空行。

  • void println(boolean x):打印一个布尔值,并结束行。

  • void println(char x):打印一个字符,并结束行。

  • void println(double x):打印一个双精度浮点数,并结束行。

  • void println(int x):打印一个整数,并结束行。

  • void println(long x):打印一个长整数,并结束行。

  • void println(Object x):打印一个对象,并结束行。

  • void println(String x):打印一个字符串,并结束行。

PrintStream 类的简单使用例子:
javaCopy code
import java.io.*;
​
public class PrintStreamExample {
    public static void main(String[] args) {
        try {
            // 创建 PrintStream 对象并将其输出发送到控制台
            PrintStream ps = new PrintStream(System.out);
            
            // 使用 print 方法打印不同类型的数据
            ps.print("Hello, ");  // 字符串
            ps.print(123);        // 整数
            ps.print('A');        // 字符
            ps.print(3.14);       // 浮点数
            ps.print(true);       // 布尔值
            ps.println();         // 换行
            
            // 使用 println 方法打印不同类型的数据
            ps.println("World!");  // 字符串
            ps.println(456);        // 整数
            ps.println('B');        // 字符
            ps.println(2.71);       // 浮点数
            ps.println(false);      // 布尔值
            
            // 关闭 PrintStream
            ps.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行上述代码,将在控制台上看到如下输出:

arduinoCopy code
Hello, 123A3.14true
World!
456
B
2.71
false
应用场景

PrintStream 类可以应用于许多场景,包括但不限于:

  1. 控制台输出:将数据输出到控制台。

javaCopy code
public class ConsoleOutputExample {
    public static void main(String[] args) {
        // 创建 PrintStream 对象并将其输出发送到控制台
        PrintStream ps = System.out;
        
        // 使用 println 方法打印数据到控制台
        ps.println("Hello, World!");
        
        // 关闭 PrintStream
        ps.close();
    }
}

2.文件输出:将数据输出到文件。

javaCopy code
import java.io.*;
​
public class FileOutputExample {
    public static void main(String[] args) {
        try {
            // 创建 PrintStream 对象并将其输出发送到文件
            PrintStream ps = new PrintStream(new File("output.txt"));
            
            // 使用 println 方法打印数据到文件
            ps.println("Hello, World!");
            
            // 关闭 PrintStream
            ps.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

3.日志记录:将数据输出到日志文件中。

javaCopy code
import java.io.*;
​
public class LogOutputExample {
    public static void main(String[] args) {
        try {
            // 创建 PrintStream 对象并将其输出发送到日志文件
            PrintStream ps = new PrintStream(new FileOutputStream("log.txt", true)); // 追加模式
            
            // 记录日志
            ps.println("[" + java.time.LocalDateTime.now() + "] Error occurred: Division by zero");
            
            // 关闭 PrintStream
            ps.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

4.网络输出:将数据输出到网络流中。

javaCopy code
import java.io.*;
import java.net.Socket;
​
public class NetworkOutputExample {
    public static void main(String[] args) {
        try {
            // 创建 Socket 对象连接到指定服务器的指定端口
            Socket socket = new Socket("localhost", 8080);
            
            // 获取输出流,并创建 PrintStream 对象将其输出发送到网络流
            OutputStream outputStream = socket.getOutputStream();
            PrintStream ps = new PrintStream(outputStream);
            
            // 发送数据到服务器
            ps.println("Hello, Server!");
            
            // 关闭 PrintStream 和 Socket
            ps.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这些是 PrintStream 类的一些常见用法示例,您可以根据具体需求进行调整和扩展。

实战例子

下面是一个简单的项目实战例子,展示如何使用 PrintStream 类来创建一个简单的命令行笔记应用。用户可以通过命令行输入笔记,并将笔记保存到文件中。

javaCopy code
import java.io.*;
import java.util.Scanner;
​
public class NoteTaker {
    private static final String FILENAME = "notes.txt";
​
    public static void main(String[] args) {
        try {
            // 创建文件输出流
            FileOutputStream fileOutputStream = new FileOutputStream(FILENAME, true); // 追加模式
            PrintStream printStream = new PrintStream(fileOutputStream);
​
            // 创建输入流
            Scanner scanner = new Scanner(System.in);
​
            // 提示用户输入笔记
            System.out.println("Enter your note (type 'exit' to quit):");
​
            // 循环读取用户输入
            while (true) {
                String input = scanner.nextLine();
                if ("exit".equalsIgnoreCase(input.trim())) {
                    break;
                }
                // 将笔记写入文件
                printStream.println(input);
            }
​
            // 关闭流
            printStream.close();
            fileOutputStream.close();
            scanner.close();
​
            // 提示用户笔记已保存
            System.out.println("Your notes have been saved.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个简单的命令行笔记应用允许用户输入笔记,并将它们追加到名为 notes.txt 的文件中。用户可以输入 exit 来退出应用。

 

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

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

相关文章

合作的终极策略,竟如此有数学规律?《多Agent系统引论》第6章 多Agent交互 原文注释

6.0 前言 本文介绍一下多Agent交互过程中的一些概念,并且我保证能给你在人类社会中的工作生活学习带来启发。 6.1 效用和偏好 6.1.1 不知道什么是效用?那我告诉你什么是边际效应递减! 想象一个人,他总资产只有1块钱,…

Vue前端+快速入门【详解】

目录 1.Vue概述 2. 快速入门 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript开发存在的问题:操作麻烦,耦合性强 为了实现html标签与数据的解耦,前端开发中提供了MVVM思想:即Model-Vi…

什么是 End-to-End 测试?

在使用 vue 的模板创建新项目的时候,有一个选项是问,是否添加“端到端”测试?说实在我不知道,而且三个选项一个都不认识。 ? Add an End-to-End Testing Solution? › - Use arrow-keys. Return to submit. ❯ NoCypressNigh…

QChart柱状图

//柱状图// 创建柱状图数据QBarSet *set0 new QBarSet("");*set0 << 1601 << 974 << 655 << 362;QBarSeries *series new QBarSeries();series->append(set0);set0->setColor(QColor("#F5834B"));// 创建柱状图QChart *ch…

基于springboot+vue的美食烹饪互动平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Anthropic

文章目录 关于 Anthropic公司产品anthropic-sdk-python 基本使用 关于 Anthropic 官网&#xff1a;https://www.anthropic.comhuggingface : http://huggingface.co/Anthropicgithub : https://github.com/anthropics https://github.com/anthropics/anthropic-sdk-python官方…

【MySQL】深入解析日志系统:undo log、redo log、bin log

文章目录 前言1、undo log1.1、undo log 是什么1.2、事务回滚 2、redo log2.1、redo log 是什么2.2、redo log 刷盘2.3、redo log 硬盘文件 3、bin log3.1、bin log 是什么3.2、bin log 和 redo log 区别3.3、bin log 刷盘3.4、两阶段提交 前言 MySQL数据库提供了功能强大的日…

6.3 业务分析方法 (15%)

一、业务分析方法 1、客户分析 用户从哪里来到哪里去&#xff1b;来源于各个渠道&#xff1b; 分析: 投入产出比&#xff1a;微博&#xff1e;公众号 展示量&#xff1a;微博低于公众号&#xff1b;若增加品牌曝光率&#xff0c;可用公众号渠道 跳失率&#xff1a;微博低于公…

C# Winform画图绘制圆形

一、因为绘制的圆形灯需要根据不同的状态切换颜色,所以就将圆形灯创建为用户控件 二、圆形灯用户控件 1、创建用户控件UCLight 2、设值用户控件大小(30,30)。放一个label标签,AutoSize为false(不自动调整大小),Dock为Fill(填充),textaglign为居中显示。 private Color R…

【leetcode】删除链接的倒数第N个节点

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} head* param {number} n* return {ListNode}*/ var removeNthFromEnd fun…

赋能中国制造,大道云行发布智能制造分布式存储解决方案

《中国制造2025》指出&#xff0c;“制造业是国民经济的主体&#xff0c;是立国之本、兴国之器、强国之基。” 智能制造引领产业提质增效 智能制造是一种利用先进的信息技术、自动化技术和智能技术来优化和升级制造业生产过程的方法。它将人工智能、大数据、物联网、机器学习等…

3DEXPERIENCE Works八大核心优势分析

云技术正在加速普及&#xff0c;助力各行各业数字化转型。根据IDC 2023年12月发布的报告&#xff0c;2023年全球云计算市场规模达到3329亿美元&#xff0c;同比增长19.4%。其中&#xff0c;公有云市场规模达到2587亿美元&#xff0c;同比增长21.5%;私有云市场规模达到742亿美元…

深度学习500问——Chapter02:机器学习基础(3)

文章目录 2.10 主成分分析&#xff08;PCA&#xff09; 2.10.1 主成分分析&#xff08;PCA&#xff09;思想总结 2.10.2 图解PCA核心思想 2.10.3 PCA算法推理 2.10.4 PCA算法流程总结 2.10.5 PCA算法主要优缺点 2.10.6 降维的必要性及目的 2.10.7 KPCA与PCA的区别 2.11 模型评估…

JavaScript基础2之运算符、函数

JavaScript基础 运算符一元操作符递增/递减一元加和减 布尔操作符逻辑非逻辑与逻辑或 乘性操作符乘法操作符除法操作符取模操作符 加性操作符加法操作符减法操作符 比较操作符相等操作符关系操作符 函数函数声明函数表达式箭头函数函数的实参和形参arguments 默认参数参数的拓展…

vue 使用vue-scroller 列表滑动到底部加载更多数据

安装插件 npm install vue-scroller -dmain.js import VueScroller from vue-scroller Vue.use(VueScroller)<template><div class"wrap"><div class"footer"><div class"btn" click"open true">新增</d…

1.2计算机体系结构与存储系统-2

1.编址的相关计算 存1个1或1个0的单位是位&#xff08;bit&#xff09;&#xff1b; 内存是按字节&#xff08;byte&#xff09;编址的&#xff1b; 1byte8bit&#xff1b; 如果有4096个字节的内存&#xff0c;想要表示内存地址的话需要多少位&#xff1f; 0-4095&#xff08;…

项目总体测试计划word

1. 引言 1.1 目的 1.2 适用范围 2. 测试类型 2.1 集成测试 2.2 系统测试 2.3 验收测试 2.4 回归测试 3. 测试环境 4. 测试工具 5. 测试内容 5.1 集成测试 5.1.1 集成测试角色与职责 5.1.2 集成测试产生的工作产品清单 5.2 系统测试 5.2.1 系统测试的角色与职责 5.2.2 系统测试产…

双缝实验是量子力学的重要基石之一

双缝实验是物理学界的基石&#xff0c;特别是对于量子力学来讲。理解这个实验需要结合直觉、数学以及对量子理论抽象且奇异的现实的接受。 一、双缝实验的基础知识 双缝实验证明了波粒二象性的概念&#xff0c;这是量子粒子的基本属性。量子粒子同时具有粒子和波的性质。 在这…

【鸿蒙 HarmonyOS 4.0】登录流程

一、背景 登录功能在应用中是一个常用模块&#xff0c;此次使用 HarmonyOS 实现登录流程&#xff0c;包含页面呈现与网络请求。 二、页面呈现 三、实现流程 3.1、创建项目 构建一个ArkTS应用项目(Stage模型)&#xff0c;今天创建流程可查看官网教程&#xff1a;文档中心 目…

BUUCTF crypto做题记录(13)新手向

一、[MRCTF2020]vigenere 这是一道维吉尼亚密码&#xff0c;但由于不知道密钥&#xff0c;所以我们需要采用爆破的方式。Vigenere Solver | guballa.de 答案&#xff1a;flag{vigenere_crypto_crack_man} 二、[MRCTF2020]keyboard 之前做过一个类似的题目&#xff0c;用九宫格…