Java语言程序设计——篇十三(1)

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

       🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

在这里插入图片描述

输入输出

  • 主要内容
  • Java I/O概述
    • 二进制I/O流
      • 主要内容
        • 1️⃣java.io.File类
          • File类常用方法
        • 2️⃣二进制I/O与文本I/O
        • 3️⃣InputStream类和OutputStream类
        • 4️⃣常用二进制I/O流
          • 文件字节流的应用
          • 数据I/O流
          • PrintStream类
          • 标准I/O流
            • 综合实例

主要内容

1️⃣二进制I/O流
2️⃣ 文本I/O流
3️⃣ 对象序列化:对象I/O流
4️⃣ NIO 和NIO.2:new I/O
5️⃣Files类操作:读写和操作目录和文件。

Java I/O概述

  • 目前Java支持文件I/O和流式I/O。流式I/O分为输入流和输出流。
    在这里插入图片描述

  • 按照处理数据的类型分,数据流又可分为:
    二进制流,也称为字节流。 单位:字节
    文本流,也称为字符流。 单位:字符

二进制I/O流

主要内容

①java.io.File类应用
②二进制I/O与文本I/O
③InputStream类和OutputStream类
④常用二进制I/O流
⑤标准输入/输出流

1️⃣java.io.File类
  • java.io.File类用来表示物理磁盘上的实际文件或目录,但它不表示文件中数据。
  • 绝对文件名是由驱动器字母、完整的路径以及文件名组成,如D:\study\Hello.txt是Windows系统下的一个绝对文件名。
  • 相对文件名是相对于当前工作目录的。例如,Hello.txt是一个相对文件名。如果当前工作目录是D:\study,绝对文件名是D:\study\Hello.txt。
File类常用方法
  public boolean exists()public long length()public boolean createNewFile()public boolean renameTo(File newName)public boolean delete()public long lastModified()
2️⃣二进制I/O与文本I/O
  • 文件通常可以分为文本文件二进制文件。
  • 使用文本I/O将字符串“123”写入文件,那么每个字符的二进制编码都会写入到文件。
    在这里插入图片描述
    使用二进制I/O向文件写入一个数据,就是将内存中的值复制到文件中。例如,一个byte类型的数值123在内存中表示为0111 1011,将它写入文件也是0111 1011。
    在这里插入图片描述
3️⃣InputStream类和OutputStream类
  • InputStream类是二进制输入流的根类,它有多个子类。
    在这里插入图片描述
public int read()
public int read(byte[] b)
public void close()
  • OutputStream类是二进制输出流的根类,它有多个子类。
    在这里插入图片描述
  public void write(int b)public void write(byte[] b)public void close()
4️⃣常用二进制I/O流
  • FileInputStream类和FileOutputStream类用来实现文件的输入输出处理。
  • FileInputStream类和FileOutputStream类都实现了java.lang.AutoClosable接口,因此可以在try-with-resources语句中使用,当流使用完自动将它们关闭。
文件字节流的应用

问题描述:
编写程序,用FileOutputStream对象向output.dat文件中写入10个10到99的随机整数。
编写另一个程序,然后使用FileInputStream对象从output.dat文件中读出这10个数并输出。
第一个程序:写入文件

import java.io.FileOutputStream;  
import java.io.IOException;  
import java.util.Random;  public class WriteRandomNumbers {  public static void main(String[] args) {  Random random = new Random();  FileOutputStream fos = null;  try {  fos = new FileOutputStream("output.dat");  for (int i = 0; i < 10; i++) {  int number = random.nextInt(90) + 10; // 生成10到99之间的随机数  fos.write(number); // 直接写入int类型会有问题,因为write方法接收byte类型  // 使用DataOutputStream可以更方便地写入int等类型  // 但为了简单演示,这里仅写入低字节(不推荐)  // 更好的做法是使用DataOutputStream  fos.write('\n'); // 写入换行符,仅作分隔使用,实际文件不会以文本形式展示换行  }  } catch (IOException e) {  e.printStackTrace();  } finally {  if (fos != null) {  try {  fos.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  }  
}  // 注意:上述代码中的fos.write(number);部分直接将整数的低字节写入文件,这会导致数据丢失。  
// 正确的做法是使用DataOutputStream来写入int等复杂类型。

第二个程序:读取文件

import java.io.FileInputStream;  
import java.io.IOException;  public class ReadRandomNumbers {  public static void main(String[] args) {  FileInputStream fis = null;  try {  fis = new FileInputStream("output.dat");  int ch;  while ((ch = fis.read()) != -1) {  // 由于只写入了低字节,这里打印的将是乱码,或者是不完整的整数  System.out.print(ch + " ");  }  // 注意:这里的输出并不是原始的整数,因为写入的方式不正确  } catch (IOException e) {  e.printStackTrace();  } finally {  if (fis != null) {  try {  fis.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  }  
}  // 注意:上面的代码不能正确还原出写入的整数,因为它只读取了低字节。  
// 如果要正确读取,需要使用DataInputStream,并且写入时也应该使用DataOutputStream。
  • BufferedInputStream为缓冲输入流,BufferedOutputStream为缓冲输出流,这两个类用来对流实现缓冲功能。
  • 使用缓冲流可以减少读写数据的次数,加快输入输出的速度。
数据I/O流

DataInputStreamDataOutputStream类分别是数据输入流和数据输出流。使用这两个类可以实现基本数据类型的输入输出。

  byte readByteint readInt()char readChar()boolean readBoolean()double readDouble()String readLine()String readUTF()
   void writeByte(int v)void writeInt(int v)void writeChar(int v)void writeBoolean(boolean v)void writeDouble(double v)void writeUTF(String s)
  • 下面语句为文件input.dat创建了缓冲输入流,然后将其包装成数据输入流。
 DataInputStream inFile = new DataInputStream(new BufferedInputStream(new FileInputStream("input.dat")));
  • 下面语句为文件input.dat创建了缓冲输出流,然后将其包装成数据输出流。
 DataOutputStream outFile = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("output.dat")));
PrintStream类
  • PrintStream类为打印各种类型的数据提供了方便。该类定义了多个print()和println ()方法,可以打印输出各种类型的数据,这些方法都是把数据转换成字符串,然后输出。如果输出到文件中则可以用记事本浏览。
  • System.out对象就是PrintStream类的一个实例,用于向控制台输出数据。
标准I/O流
  • Java系统事先定义了两个对象System.in和System.out,分别与系统的标准输入和标准输出相联系,另外还定义了标准错误输出流System.err。

System.in 是InputStream类的实例
System.out 是PrintStream类的实例
System.err 是PrintStream类的实例

综合实例

问题描述
尝试用PrintStream类的对象,将打印到控制台的话打印到一个文件中

1 File file = new File("F:\\a.txt"); 
2 PrintStream printStream = new PrintStream(file); 
5 printStream.println("hello world");1 File file = new File("F:\\a.txt"); 
2 PrintStream printStream = new PrintStream(file); 
3 System.setOut(printStream); 
4 System.out.println("打印到F:\\a.txt中");

博主用心写,读者点关注,互动传真情,知识不迷路。

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

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

相关文章

系统架构师考试学习笔记第四篇——架构设计实践知识(21)安全架构设计理论与实践

本章考点&#xff1a; 第21课时主要学习信息系统中安全架构设计的理论和工作中的实践。根据考试大纲,本课时知识点会涉及案例分析题和论文题(各占25分),而在历年考试中,综合知识选择题目中也有过诸多考查。本课时内容侧重于知识点记忆;,按照以往的出题规律,安全架构设计基础知识…

SOMEIP_ETS_100: SD_ClientServiceActivate_no_FindServices_in_Main_Phase

测试目的&#xff1a; 确保客户端服务模式仅在启动阶段发送FindService消息&#xff0c;在主阶段不发送。 描述 本测试用例旨在验证DUT在客户端服务模式下的行为&#xff0c;即它应当在启动阶段发送FindService消息&#xff0c;并在进入主阶段后停止发送。 测试拓扑&#x…

【触想智能】工业一体机在物流领域上的四大应用分析

随着物流业的快速发展&#xff0c;工业一体机在物流领域上的应用越来越普遍。工业一体机是一种高级智能设备&#xff0c;是多种技术的综合应用&#xff0c;包括机械、电子、计算机、通讯等。 在物流行业中&#xff0c;工业一体机可以发挥其先进的技术和功能&#xff0c;提高物流…

基于单片机的仔猪喂饲系统设计

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

【网络安全 | 渗透工具】Cencys+Shodan使用教程

原创文章,不得转载。 文章目录 Cencys准备语法全文搜索字段和值搜索通配符搜索布尔逻辑搜索嵌套搜索时间相关搜索范围搜索双引号 (")转义序列和保留字符Censys 搜索语言中的主机查询查看主机搜索结果Censys 搜索语言中的证书查询查看证书搜索结果生成报告其余Shodan准备使…

【Java数据结构】泛型的进阶部分(泛型通配符)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

MT6895(天玑8100)处理器规格参数_MTK联发科平台方案

MT6895平台 采用台积电5nm工艺&#xff0c;与天玑 8000 相比性能提升 20% &#xff0c;搭载4 个 2.85GHz A78 核心 4 个 2.0GHz A55 核心&#xff0c;CPU能效比上一代提高 25% 。GPU 采用了第三代的Valhall Arm Mali-G610 MC6架构&#xff0c;拥有6核心&#xff0c;搭配天玑81…

逻辑函数的公式化简法

目录 逻辑函数的公式化简法 并项法 吸收法 消去法 配项法 习题1 习题2 逻辑函数的公式化简法 并项法 B或B非结果为1&#xff0c;这样可以消去B&#xff0c;将两项合并为一项。 用于消去变量。 吸收法 1或上一个变量结果为1&#xff0c;1与上A变量结果为A变量。 1或任何…

将BAT脚本设置为Windows开机自启动

1. 打开“运行”对话框 方法&#xff1a;按下键盘上的 Win R 快捷键&#xff0c;这会立即打开“运行”对话框。输入命令&#xff1a;在“运行”对话框中&#xff0c;输入 shell:startup 并按回车键。 2. 访问“启动”文件夹 目的&#xff1a;shell:startup 命令将直接打开当…

2. Python之注释及缩进以及print和input函数使用

一. Python代码中的注释及缩进 Python中注释有单行注释&#xff0c;多行注释&#xff0c;声明注释 单行注释使用符号#&#xff0c;从#开始&#xff0c;后面到本行末尾都是注释内容。多行注释可以使用’‘’ ‘’三个引号&#xff0c;三个引号内的内容都是注释声明注释&#x…

解决:Module build failed (from ./node_modules/sass-loader/dist/cjs.js)问题

一、问题 Module build failed (from ./node_modules/sass-loader/dist/cjs.js): Error: Cannot find module sass 二、解决方法 1.清除缓存 npm cache clean --force2.重构项目 npm install 3.更新&#xff08;获取最新的&#xff09;node-sass和sass-loader依赖包 npm …

MySQL数据库启用安全审计功能5.7版本

MySQL数据库启用安全审计功能5.7版本&#xff0c;需要使用插件server_audit.dllmysql安装是没有自带这个插件的需要去下载&#xff0c;也可以使用我上传的 操作步骤&#xff1a; 1.把插件复制放到自己安装的mysql下的插件位置&#xff1a;比如我的 C:\zz\ProgramFiles\MySQL\…

HarmonyOs 应用基础--ArkTS-核心-基础

目录 八. ArkTS-语句-类型进阶与渲染控制 1. 对象进阶 1.1. 定义对象数组 1.2. 使用对象数组 2. 渲染控制 - ForEach 2.1. ForEach语法 2.2. ForEach使用优化代码 2.3. 案例-学生档案 实现思路 3. Math对象 4. 综合案例 -- 抽奖卡案例 4.1. 初始页面布局&#xff08;静…

通信工程学习:什么是GSMP通用交换机管理协议

GSMP&#xff1a;通用交换机管理协议 GSMP&#xff08;General Switch Management Protocol&#xff0c;通用交换机管理协议&#xff09;是一种用于IP交换机对ATM交换机进行控制的协议。以下是对GSMP的详细解释&#xff1a; 一、定义与概述 GSMP是一种异步协议&#xff0c;它在…

在国产芯片上实现YOLOv5/v8图像AI识别-【4.4】RK3588网络摄像头推理后推流到RTSP更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 前言…

【论文阅读】01-Survey on Temporal Knowledge Graph

原文名称&#xff1a;Survey on Temporal Knowledge Graph 1 Introduction 目前有两种方法:基于距离模型的嵌入变换方法和基于语义匹配模型的双线性模型。它们的思想都是将包含实体和关系的知识图谱嵌入到连续的低纬度实向量空间中 时间知识图的推理有两种&#xff0c;第一种是…

斐纳切数列考试题

计算机二级考试有一道题 result [] a,b0,1 while a<100:print(a,end,) a, b b, ab # 0,1,1,2,3,5,8,13,21,34,55,89,

python爬虫代理ip池搭建

最近大量爬取数据的时候总会遇到被封ip的情况&#xff0c;所有打算自己搭建一个代理ip池来使用。本次使用的是开源的ip代理池项目ProxyPool 1.下载redis数据库 redis安装 这里我选择直接下载redis的解压包形式&#xff0c;方便安装。下载地址&#xff1a;发布 TPORADOWSKI/RED…

SCAU算法竞赛入门指北

首先&#xff0c;还是欢迎各位小朋友来到华南农业大学&#xff0c;虽然不是什么ACM强校&#xff0c;但是姑且还是有这么个校队存在的。本文的主要目的是给各位OI✌️介绍下acm和oi的区别&#xff0c;给各位纯萌新介绍下你需要做什么&#xff0c;以及进校队的时间线。 ACM是什么…

UE4_后期处理_后期处理材质及后期处理体积二

效果&#xff1a; 步骤&#xff1a; 1、创建后期处理材质,并设置参数。 2、回到主界面&#xff0c;找到需要发光的物体的细节面板。 渲染自定义深度通道&#xff0c;默认自定义深度模具值为10&#xff08;需要修改此值&#xff0c;此值影响物体的亮度&#xff09;。 3、添加…