Java开发从入门到精通(二十):Java的面向对象编程OOP:IO流中的转换流、打印流、数据流、序列流、IO框架

Java大数据开发和安全开发

  • (一)Java的IO流文件读写
    • 1.1 转换流
      • 1.1.1 InputStreamReader字符输入转换流
      • 1.1.1 OutputStreamWriter字符输出转换流
    • 1.2 打印流
      • 1.2.1 PrintStream打印流
      • 1.2.2 PrintWriter打印流
      • 1.2.3 PrintStream和PrintWriter的区别
      • 1.2.4 打印流的应用
    • 1.3 数据流
      • 1.3.1 DataOutputstream数据输出流
      • 1.3.2 Datalnputstream数据输入流
    • 1.4 序列流
      • 1.4.1 ObjectOutputstream对象字节输出流
      • 1.4.2 Objectlnputstream对象字节输入流
    • 1.5 IO框架
      • 1.5.1 commons-io导入
      • 1.5.1 Commons-IO框架

(一)Java的IO流文件读写

1.1 转换流

InputStreamReader和OutputStreamWriter
在这里插入图片描述

1.1.1 InputStreamReader字符输入转换流

InputStreamReader(字符输入转换流)

  • 解决不同编码时,字符流读取文本内容乱码的问题。

解决思路:

  • 先获取文件的原始字节流,再将其按真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了

在这里插入图片描述

import java.io.*;public class ZhuanhuangLei {public static void main(String[] args) {try (// 1、得到文件的原始字节流(6BK的字节流形式)InputStream is = new FileInputStream("lianxi\\src\\com\\qianxin\\file\\1.txt");// 2、把原始的字节输入流按照指定的字符集编码转换成字符输入流Reader isr = new InputStreamReader(is, "utf-8");// 3、把字符输入流包装成缓冲字符输入流BufferedReader br = new BufferedReader(isr);) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}} catch (Exception e) {e.printStackTrace();}}
}

1.1.1 OutputStreamWriter字符输出转换流

字符输出转换流是控制写出去的字符使用什么字符集进行编码

方法1、调用String提供的getBytes方法解决
在这里插入图片描述
方法2、OutputStreamWriter使用字符输出转换流实现

解决思路:

  • 获取字节输出流,再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符集编码了
    在这里插入图片描述
import java.io.*;public class ZhuanhuangLei {public static void main(String[] args) {try(// 1、创建一个文件字节输出流OutputStream os = new FileOutputStream("lianxi\\src\\com\\qianxin\\file\\1.txt");//2、把原始的字节输出流,按照指定的字符集编码转换成字符输出转换流。Writer osw = new OutputStreamWriter(os,"GBK");//13、把字符输出流包装成缓冲字符输出流BufferedWriter bw = new BufferedWriter(osw);) {bw.write("我是中国人abc");bw.write("我爱你中国123");}catch(Exception e) {e.printStackTrace();}}
}
我是中国人abc我爱你中国123

1.2 打印流

PrintStream/PrintWriter(打印流)

  • 作用:打印流可以实现更方便、更高效的打印数据出去,能实现打印啥出去就是啥出去

在这里插入图片描述

1.2.1 PrintStream打印流

  • PrintStream提供的打印数据的方案

在这里插入图片描述
在这里插入图片描述

import java.io.*;
import java.nio.charset.Charset;public class ZhuanhuangLei {public static void main(String[] args) {try (// 1、创建一个打印流管道PrintStream ps =new PrintStream("lianxi\\src\\com\\qianxin\\file\\1.txt", Charset.forName("GBK"));) {ps.println(97);ps.println('a');ps.println("我爱你中国abc");ps.println(true);ps.println(99.5);ps.write( 97);//'a'} catch (Exception e) {e.printStackTrace();}}
}

1.2.2 PrintWriter打印流

PrintWriter提供的打印数据的方案
在这里插入图片描述

import java.io.*;
import java.nio.charset.Charset;public class ZhuanhuangLei {public static void main(String[] args) {try (// 1、创建一个打印流管道PrintWriter ps =new PrintWriter("lianxi\\src\\com\\qianxin\\file\\1.txt");) {ps.println(97);ps.println('a');ps.println("我爱你中国abc");ps.println(true);ps.println(99.5);ps.write( 97);//'a'} catch (Exception e) {e.printStackTrace();}}
}

低级流才可以追加内容

    try (// 1、创建一个打印流管道PrintWriter ps =new PrintWriter(new FileOutputStream("lianxi\\src\\com\\qianxin\\file\\1.txt"),true);//低级流才可以追加内容) {}

1.2.3 PrintStream和PrintWriter的区别

  • 打印数据的功能上是一模一样的:都是使用方便,性能高效(核心优势)
  • PrintStream继承自字节输出流OutputStream,因此支持写字节数据的方法
  • PrintWriter继承自字符输出流Writer,因此支持写字符数据出去,

1.2.4 打印流的应用

  • 输出语句的重定向
    在这里插入图片描述

System.out.println out其实就是打印流的对象

import java.io.*;
import java.nio.charset.Charset;public class ZhuanhuangLei {public static void main(String[] args) {System.out.println("老骥伏枥");System.out.println("志在千里");try (PrintStream ps= new PrintStream("lianxi\\src\\com\\qianxin\\file\\1.txt");){// 把系统默认的打印流对象改成自己设置的打印流System.setOut(ps);System.out.println("烈士暮年");System.out.println("壮心不已");} catch (Exception e) {e.printStackTrace();}}
}

在这里插入图片描述

1.3 数据流

  • 分为DataOutputstream数据输出流和Datalnputstream数据输入流

在这里插入图片描述

1.3.1 DataOutputstream数据输出流

  • 允许把数据和其类型一并写出去

在这里插入图片描述

import java.io.*;
import java.nio.charset.Charset;public class ZhuanhuangLei {public static void main(String[] args) {try (DataOutputStream dos =new DataOutputStream(new FileOutputStream("lianxi\\src\\com\\qianxin\\file\\1.txt"));){dos.writeInt(97);dos.writeDouble(99.5);dos.writeBoolean(true);dos.writeUTF( "黑马程序员666!");} catch (IOException e) {throw new RuntimeException(e);}}
}

写进去的的数据不是乱码,写进去的数据不是用来看的,要想读使用下面的Datalnputstream来反向读取

   a@X�      榛戦┈绋嬪簭鍛�666!

1.3.2 Datalnputstream数据输入流

Datalnputstream(数据输入流)

  • 用于读取数据输出流写出去的数据。

在这里插入图片描述

public class ZhuanhuangLei {public static void main(String[] args) {try (DataInputStream dos =new DataInputStream(new FileInputStream("lianxi\\src\\com\\qianxin\\file\\1.txt"));){int i = dos.readInt();System.out.println(i);double d = dos.readDouble();System.out.println(d);boolean b = dos.readBoolean();System.out.println(b);String rs = dos.readUTF();System.out.println(rs);} catch (IOException e) {throw new RuntimeException(e);}}
}
97
99.5
true
黑马程序员666!

1.4 序列流

需要将java对象写出去到文件中存起来,然后再读出来

  • 对象序列化:把Java对象写入到文件中去
  • 对象反序列化:把文件里的Java对象读出来
    在这里插入图片描述

1.4.1 ObjectOutputstream对象字节输出流

  • 可以把Java对象进行序列化:把Java对象存入到文件中去

在这里插入图片描述

要把对象写进文件中去就先创建一个对象

在这里插入图片描述

package com.qianxin.file;public class Student implements Serializable{private String name;private String LoginName;private int age;private String passwd;public Student() {}public Student(String name, String loginName, int age, String passwd) {this.name = name;LoginName = loginName;this.age = age;this.passwd = passwd;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getLoginName() {return LoginName;}public void setLoginName(String loginName) {LoginName = loginName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", LoginName='" + LoginName + '\'' +", age=" + age +", passwd='" + passwd + '\'' +'}';}
}

序列化对象

import java.io.*;public class ZhuanhuangLei {public static void main(String[] args) {try(// 2、创建一个对象字节输出流包装原始的字节 输出流。ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("lianxi\\src\\com\\qianxin\\file\\3.txt"));){Student student = new Student("admin","lisi",23,"123456");// 2、创建一个对象字节输出流包装原始的字节 输出流。oos.writeObject(student);System.out.println("序列化对象成功!!");} catch (Exception e) {e.printStackTrace();}}
}
序列化对象成功!!

1.4.2 Objectlnputstream对象字节输入流

  • 可以把Java对象进行反序列化:把存储在文件中的Java对象读入到内存中来
    在这里插入图片描述
    如果不想将密码写进序列化文件中可以使用参数 transient 这个成员变量将不参与列化
// transient 这个成员变量将不参与列化
private transient String passWord;]
import java.io.*;public class ZhuanhuangLei {public static void main(String[] args) {try(// 1、创建一个对象字节输入流管道,包装 低级的字节输入流与源文件接通ObjectInputStream ois=new ObjectInputStream(new FileInputStream("lianxi\\src\\com\\qianxin\\file\\3.txt"));){// 2、创建一个对象接收字节输入流包装原始的字节 输出流。Student u=(Student) ois.readObject();System.out.println(u);System.out.println("反序列化对象成功!!");} catch (Exception e) {e.printStackTrace();}}
}
Student{name='admin', LoginName='lisi', age=23, passwd='123456'}
反序列化对象成功!!

如果要一次序列化多个对象

  • 用一个ArrayList集合存储多个对象,然后直接对集合进行序列化即可注意:ArrayList集合已经实现了序列化接口

1.5 IO框架

什么是框架?

  • 解决某类问题,编写的一套类、接口等,可以理解成一个半成品,大多框架都是第三方研发的。
  • 好处:在框架的基础上开发,可以得到优秀的软件架构,并能提高开发效率
  • 框架的形式:一般是把类、接口等编译成class形式,再压缩成一个jar结尾的文件发行出去

什么是IO框架?
封装了Java提供的对文件、数据进行操作的代码,对外提供了更简单的方式来对文件进行操作,对数据进行读写等。

1.5.1 commons-io导入

下载
https://commons.apache.org/io/download_io.cgi
在这里插入图片描述
选择核心文件导入项目
在这里插入图片描述

导入commons-io-2.11.0.jar框架到项目中去。

  1. 在项目中创建一个文件夹:lib
  2. 将commons-io-2.6.jar文件复制到lib文件夹
  3. 在jar文件上点右键,选择 Add as Library ->点击OK
  4. 在类中导包使用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.5.1 Commons-IO框架

Commons-io是apache开源基金组织提供的一组有关10操作的小框架,目的是提高I0流的开发效率。
在这里插入图片描述

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;public class FileTest4 {public static void main(String[] args) throws Exception {FileUtils.copyFile(new File("lianxi\\src\\com\\qianxin\\file\\4.txt"),newFile("lianxi\\src\\com\\qianxin\\file\\5.txt"));FileUtils.copyDirectory(new File("lianxi\\src\\com\\qianxin\\file"),new File("lianxi\\src\\com\\qianxin\\file1"));FileUtils.deleteDirectory(new File("lianxi\\src\\com\\qianxin\\file1"));// Java提供的原生的一行代码搞定很多事情//Files.copy(Path.of("io-app2\\src|litheima01.txt"), Path.of("io-app2\\srcllb.txt"));System.out.println(Files.readString(Path.of("io-app2\\src\\litheima01.txt")));}
}

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

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

相关文章

获取淘宝京东商品详情API接口返回数据解析说明(可测试,批量获取)

获取淘宝和京东的商品详情API接口返回数据并解析通常需要遵循以下几个步骤: 淘宝商品详情API 淘宝的API接口通常对商家和合作伙伴开放,并且需要经过严格的申请和审核流程。普通用户或未经授权的开发者通常无法直接访问淘宝的商品详情API。 如果你已经…

Innodb之redo日志

Innodb引擎执行流程 redo log ​ MySQL中的redo log(重做日志)是实现WAL(预写式日志)技术的关键组件,用于确保事务的持久性和数据库的crash-safe能力。借用《孔乙己》中酒店掌柜使用粉板记录赊账的故事,…

2024.4.16

三个按键的中断 do_irq.c #include "mykey.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {//获取中断号unsigned int irqno (GICC->IAR&0x3ff);switch (irqno){case 99://中断处理逻辑printf("KEY1_INTC\n&q…

jenkins构建微信小程序并展示二维码

测试小程序的过程中,很多都是在回头和前端开发说一句,兄弟帮我打一个测试版本的测试码,开发有时间的情况下还好,就直接协助了,但是很多时候他们只修复了其中几个bug,其他需要修复的bug代码正在编写&#xf…

健身管理小程序|基于微信开发健身管理小程序的系统设计与实现(源码+数据库+文档)

健身管理小程序目录 基于微信开发健身管理小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 小程序端: 后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码…

策略模式(知识点)——设计模式学习笔记

文章目录 0 概念1 使用场景2 优缺点2.1 优点2.2 缺点 3 实现方式4 和其他模式的区别5 具体例子实现5.1 实现代码 0 概念 定义:定义一个算法族,并分别封装起来。策略让算法的变化独立于它的客户(这样就可在不修改上下文代码或其他策略的情况下…

前端三件套学习笔记(持更)

HTML CSS 1、HTML&#xff0c;CSS&#xff0c;JS区别 HTML--结构 CSS--表现 JavaScript--行为 2、HTML5 中新增 1&#xff09;语义化标签 <header>、<main>页面主要内容、<aside>侧边栏、<footer>、<nav>、<article> 加载页面一块…

Redis 缓存预热、预热数据选取策略、缓存保温、性能边界

缓存预热 热点数据预热&#xff1a;根据业务分析或统计数据&#xff0c;确定热点数据&#xff08;经常被访问的数据&#xff09;&#xff0c;并将其提前加载到Redis缓存中。可以根据访问频率、访问量或其他业务指标来确定热点数据。定时预热&#xff1a;可以设置定时任务&…

QT 串口助手 学习制作记录

QT 串口助手qt 学习制作记录 参考教程&#xff1a;​​​​​​QT初体验&#xff1a;手把手带你写一个自己的串口助手_qt设计串口助手的流程图-CSDN博客 Qt之串口编程&#xff08;添加QSerialPort模块&#xff09;_如何安装 qt串口模块教程-CSDN博客 串口调试助手&#xff1…

纯golang开发的mqtt server

Mochi-MQTT Server github地址&#xff1a;https://github.com/mochi-mqtt/server Mochi-MQTT 是一个完全兼容的、可嵌入的高性能 Go MQTT v5&#xff08;以及 v3.1.1&#xff09;中间件/服务器。 Mochi MQTT 是一个完全兼容 MQTT v5 的可嵌入的中间件/服务器&#xff0c;完…

【C语言】每日一题,快速提升(3)!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 题目&#xff1a;杨辉三角 在屏幕上打印杨辉三角。 1 1 1 1 2 1 1 3 3 1 ……......... 解答&#xff1a; 按照题设的场景&#xff0c;能发现数字规律为&#xff1…

Flink学习(六)-容错处理

前言 Flink 是通过状态快照实现容错处理 一、State Backends 由 Flink 管理的 keyed state 是一种分片的键/值存储&#xff0c;每个 keyed state 的工作副本都保存在负责该键的 taskmanager 本地中。 一种基于 RocksDB 内嵌 key/value 存储将其工作状态保存在磁盘上&#x…

【MogDB】在ORACLE和MogDB中查看存储过程出参游标数据的方式

一、前言 使用ORACLE作为数据库的应用软件中&#xff0c;偶尔会遇到使用游标作为出参的存储过程&#xff0c;这种存储过程迁移到MogDB并不需要进行改造&#xff0c;但是在开发这样的存储过程时&#xff0c;开发人员偶尔会想要在数据库中测试执行一下&#xff0c;看看游标中的数…

项目5-博客系统1(准备工作+博客列表+博客详情页)

1.创建项目 导入以下依赖 2.项目介绍 使⽤SSM框架实现⼀个简单的博客系统 共5个页面 2.1 前端页面展示 2.1.1 用户登录 2.1.2 博客发表页 2.1.3 博客编辑页 2.1.4 博客列表页 2.1.5博客详情页 2.2 功能描述: ⽤⼾登录成功后, 可以查看所有⼈的博客. 点击 <<查看全⽂…

Big Data and Cognitive Computing (IF=3.7) 计算机/大数据/人工智能期刊投稿

Special Issue: Artificial Cognitive Systems for Computer Vision 欢迎计算机/大数据/人工智能/计算机视觉相关工作的投稿&#xff01; 影响因子3.7&#xff0c;截止时间2024年12月31日 投稿咨询&#xff1a;lqyan18fudan.edu.cn 投稿网址&#xff1a;https://www.mdpi.com/j…

2024 计算机毕业设计之SpringBoot+Vue项目合集(源码+L文+PPT)

各位朋友大家好&#xff0c;有幸与屏幕前你们相识&#xff0c;博主现已经搬砖9年&#xff0c;趁着头发还充裕&#xff0c;希望给大家提供一些编程领域的帮助&#xff0c;深知计算机毕业生这个阶段的崩溃与闹心&#xff0c;让我们共同交流进步。 博主给大家列举了项目合集&#…

如何在PPT中获得网页般的互动效果

如何在PPT中获得网页般的互动效果 效果可以看视频 PPT中插入网页有互动效果 当然了&#xff0c;获得网页般的互动效果&#xff0c;最简单的方法就是在 PPT 中插入网页呀。 那么如何插入呢&#xff1f; 接下来为你讲解如何获得&#xff08;此方法在 PowerPoint中行得通&#…

吴恩达llama课程笔记:第七课llama安全工具

羊驼Llama是当前最流行的开源大模型&#xff0c;其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型&#xff0c;Llama拥有7B、13B和70B&#xff08;700亿&#xff09;三种版本&#xff0c;满足不同场景和需求。 吴恩…

【笔记】探索生成范式:大型语言模型在信息提取中的作用

探索生成范式&#xff1a;大型语言模型在信息提取中的作用 摘要介绍 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成长&am…