当前位置: 首页 > news >正文

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中");

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

相关文章:

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

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…...

GB/T 5023.3-2008额定电压450/750V及以下聚氯乙烯绝缘电缆

聚氯乙烯绝缘电缆产品分为固定布线用无护套电缆、固定布线用护套电缆、轻型无护套软电缆、一般用途护套软电缆、安装用电线和屏蔽电线、特殊用途护套软电缆、聚氯乙烯绝缘阻燃/耐火电缆等产品。 GB/T 5023.3-2008额定电压450/750V及以下聚氯乙烯绝缘电缆 第3部分&#xff1a;固…...

深入单例模式

1. 饿汉模式 饿坏了&#xff0c;上来就先实例化一个对象&#xff0c;好处是代码简单&#xff0c;坏处是这个对象后面如果一直用不到&#xff0c;就是个浪费。 public class A{ private static A a new A(); private A(){} public static A getInstance(){ return a; } } 2. 懒…...

MongoDB 单机和集群环境部署教程

目录 一、MongoDB 单机环境部署1. 环境准备2. 安装 MongoDB2.1 在 Ubuntu 上安装 MongoDB2.2 在 CentOS 上安装 MongoDB2.3 启动 MongoDB 服务2.4 验证 MongoDB 安装2.5 MongoDB 基本安全设置 3. 单机部署注意事项 二、MongoDB 集群环境部署1. 环境准备2. MongoDB Replica Set …...

【学习笔记】Day 20

一、进度概述 1、机器学习常识12-18&#xff0c;以及相关代码复现 二、详情 12、SVM&#xff08;support vector machines&#xff0c;支持向量机&#xff09; 实际上&#xff0c;支持向量机是一种二分类模型&#xff0c;它将实例的特征向量映射为空间中的一些点&#xff0c;…...

StringBuffer与StringBuilder 2024-8-21 22-13

目录 一、StringBuffer二、StringBuilder三、总结 一、StringBuffer StringBuffer是一个可变的字符序列&#xff0c;它的存在是为了解决频繁操作字符串时产生大量临时对象的问题。 构造方法&#xff1a; StringBuffer()&#xff1a;创建一个空的字符串缓冲区&#xff0c;初始容…...

会声会影剪辑视频收费吗,会声会影最新破解版

会声会影2024&#xff1a;引领视频创作新时代的创新之旅** 在数字时代的浪潮中&#xff0c;视频创作已成为连接世界、表达创意的重要方式。随着技术的不断进步&#xff0c;一款名为“会声会影2024”的视频编辑软件横空出世&#xff0c;它不仅继承了前代产品的优秀传统&#xf…...

在Windows11强制开启copilot

在 Windows 11 上启用自带的基于 GPT-4 的 Copilot 功能。以下是具体步骤&#xff1a; 更新系统&#xff1a; 确保你的 Windows 11 系统已经更新到最新版本&#xff08;23H2 或更高版本&#xff09;。你可以在“设置” > “Windows 更新”中检查并安装最新更新。 更改区域和…...

基于Java的开源CMS有哪些推荐,各自特点是什么

最强大、最易用的CMS&#xff0c;向大家做一个简要介绍。 01 Alfresco Alfresco是一个开源的企业网站内容管理系统&#xff0c;它提供了文档管理、多人协作、记录管理、知识管理网页内容和图像管理等功能。它使用Spring、 Hibernate、 Lucene 和JSF等最新java技术构建了模…...

IPC进程通信以及网络通信

一、IPC 进程间通信方式 共享内存 //最高效的进程间通信方式 不需要把用户的东西再复制到内核 他们与内核进行绑定 共享内存&#xff1a; 1、是一块&#xff0c;内核预留的空间 2、最高效的通信方式 //避免了用户空间到内核空间的数据拷贝 IPC通信方式 ---操作流程类似的…...

【脏数据 bug 解决】ValueError: mean must have 1 elements if it is an iterable, got 3

问题描述&#xff1a; 在训练模型的过程中&#xff0c;出现 clip_image_processor 无法处理数据的问题&#xff0c;说明数据集中很可能出现了脏数据。本文使用的数据为 LAION-Aesthetics-V2-6.5plus&#xff0c;从 https://dagshub.com/DagsHub-Datasets/LAION-Aesthetics-V2-…...

【Vue3】集成 Ant Design Vue

【Vue3】集成 Ant Design Vue 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…...

如何处理前端项目中的SEO优化:从SPA到SSR与SSG

如何处理前端项目中的SEO优化&#xff1a;从SPA到SSR与SSG 在前端开发的日常工作中&#xff0c;你可能经常会遇到这样的情况&#xff1a;辛辛苦苦写了一个功能丰富、界面炫酷的单页应用&#xff08;SPA&#xff09;&#xff0c;但上线后发现搜索引擎的表现却不尽如人意。页面内…...

【UE5】Groom毛发系统的基本使用——给小白人添加头发

目录 效果 步骤 一、准备 二、使用3DsMax制作毛发 三、在UE中给小白人安装毛发 四、修改毛发材质 效果 步骤 一、准备 1. 新建一个第三人称模板工程 2. 在项目设置中&#xff0c;勾选“支持计算蒙皮缓存” 3. 在插件面板中&#xff0c;启用“Groom”和“Alembic Gro…...

DataWorks函数

文章目录 0、MaxCompute预置的函数分类1、日期函数2、数学函数3、算术运算符4、窗口函数5、聚合函数6、字符串函数7、复杂类型函数8、加密函数9、其他函数 0、MaxCompute预置的函数分类 函数类型说明日期函数支持处理DATE、DATETIME、TIMESTAMP等日期类型数据&#xff0c;实现…...

设计模式学习优质网站分享:refactoring.guru

地址 英文版地址&#xff1a;https://refactoring.guru/design-patterns 中文版地址&#xff1a;https://refactoringguru.cn/design-patterns 介绍 这个网站是专门学习 设计模式 和 软件重构 的网站 整体来说并不花哨&#xff0c;但我觉得他最大的优点就是&#xff1a; 概…...

JVM-Java的四种引用

引用分析 无论是通过引用计数算法判断对象的引用数量&#xff0c;还是通过可达性分析算法判断对象是否可达&#xff0c;判定对象是否可被回收都与引用有关&#xff0c;Java 提供了四种强度不同的引用类型 强引用&#xff1a; 被强引用关联的对象不会被回收&#xff0c;只有所…...

探索《黑神话:悟空》品质保障的背后:ISO体系认证

《黑神话&#xff1a;悟空》横空出世 8月20日上午10点&#xff0c;国产首款大型3A游戏《黑神话&#xff1a;悟空》正式上线。游戏一经上线便吸引了无数国内外用户的关注&#xff0c;不仅仅是因为其高超的游戏制作技术&#xff0c;极高的画面精度&#xff0c;精良的的视觉和战斗…...

ArcGIS Pro 实现人口分布栅格TIFF数据的网格提取与可视化

这里在分享一个人口1km精度栅格数据&#xff0c;LandScan是由美国能源部橡树岭国家实验室&#xff08;ORNL&#xff09;提供的全球人口分布数据集&#xff0c;具有最高分辨率的全球人口分布数据&#xff0c;是全球人口数据发布的社会标准&#xff0c;是全球最为准确、可靠&…...

select的缺点;poll ;poll的缺点;epoll

1.select的缺点&#xff1a; 1.select监听的文件描述符集合是一个数组&#xff0c;有上限&#xff08;1024个&#xff09; 2.select监听的文件描述符集合在应用层&#xff0c;内核层监听事件后需要传递给用户层带来资源开销 3.select需要用户手动查找产生事件的文件…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...