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.rhkb.cn/news/397145.html

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

相关文章

C#语言基础速成Day07

“知止而后有定&#xff0c;定而后能静&#xff0c;静而后能安&#xff0c;安而后能虑&#xff0c;虑而后能得。” 目录 前言文章有误敬请斧正 不胜感恩&#xff01;||Day07 C#常见数据结构&#xff1a;1. 集合&#xff08;Collection&#xff09;1.1 **List<T>**1.2 **H…

前端(三):Ajax

一、Ajax Asynchronous JavaScript And XML&#xff0c;简称Ajax&#xff0c;是异步的JavaScript和XML。 作用&#xff1a;数据交换&#xff0c;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互&#xff1a;可以在不重新加载整个页面的情况下&…

本地环境VMware使用代理解决 Docker 镜像拉取问题

引言 本文将分享我在 Windows 10 环境下&#xff0c;通过 VMware 运行的 CentOS 7.8 虚拟机中配置 Docker 代理&#xff0c;成功解决了镜像拉取问题的经验。 问题描述 在尝试启动一个依赖 Docker 的 GitHub 项目时&#xff0c;拉取 Docker 镜像的失败。尝试配置了几个国内源…

Spring Boot优缺点

Spring Boot 是一款用于简化Spring应用开发的框架&#xff0c;它集成了大量常用的框架和工具&#xff0c;大大简化了Spring项目的配置和部署。下面是Spring Boot的优缺点&#xff1a; 优点&#xff1a; 简化配置&#xff1a;Spring Boot自动配置功能可以根据应用的依赖自动配…

Spring Boot - 在Spring Boot中实现灵活的API版本控制(上)

文章目录 为什么需要多版本管理&#xff1f;在Spring Boot中实现多版本API的常用方法1. URL路径中包含版本号2. 请求头中包含版本号3. 自定义注解和拦截器 注意事项 为什么需要多版本管理&#xff1f; API接口的多版本管理在我们日常的开发中很重要&#xff0c;特别是当API需要…

2.mysql数据库-DML-DQL-DCL

1. DML-操作数据 1.1 DML-添加数据 给指定字段添加数据 INSERT INTO 表名 (字段名1&#xff0c;字段名2,…) values (值1,值2…) 给全部字段添加数据 INSERT INTO 表名 values(值1,值2,…) 批量添加数据 INSERT INTO 表名 (字段名1&#xff0c;字段名2,…) values (值1,值2……

Java并发编程实战 读书笔记

目录 1、介绍 2、线程安全 3、共享对象 1、介绍 线程的优点 恰当使用线程&#xff0c;可以提升复杂程序的性能&#xff0c;降低开发和维护成本可以把一部分复杂代码转为直接、简洁易懂的代码更有效地利用空闲处理器资源&#xff0c;提高吞吐量用户界面有更好的响应性线程的…

网络安全 - 应急响应检查表

前言 本项目旨在为应急响应提供全方位辅助&#xff0c;以便快速解决问题。结合自身经验和网络资料&#xff0c;形成检查清单&#xff0c;期待大家提供更多技巧&#xff0c;共同完善本项目。愿大家在应急之路一帆风顺。 图片皆来源于网络&#xff0c;如有侵权请联系删除。 一…

常见框架漏洞 中(IIS6.x、IIS7.x、Apache、Nginx)

目录 中间件 IIS IIS6.x篇 PUT漏洞 漏洞描述 环境 漏洞复现 漏洞复现 工具连接 IIS6.0解析漏洞 IIS短文件漏洞 漏洞描述 原理 复现 短⽂件名特征&#xff1a; ⼯具 IIS RCE-CVE-2017-7269 简介 影响范围 复现 利⽤⼯具 反弹shell Apache 未知扩展名解析…

Oracle【plsql编写九九乘法表】

九九乘法表 DECLAREi NUMBER : 1;j NUMBER : 1; BEGINFOR i IN 1 .. 9LOOPFOR j IN 1 .. iLOOPDBMS_OUTPUT.put (i || * || j || || i * j || );END LOOP;DBMS_OUTPUT.put_line ( );END LOOP; END;输出结果

Vue3从零开始——如何巧妙使用setup语法糖、computed函数和watch函数

文章目录 一、setup语法糖二、computed函数2.1 computed的基本用法2.2 computed vs methods2.3 注意事项 三、watch函数3.1 watch的基本用法3.2 immediate和deep选项 四、综合小Demo五、总结 一、setup语法糖 之前我们在编写代码时每次都要编写setup()​ ,默认导出配置&#x…

浮毛季到了,拒绝猫咪变成“蒲公英”,宠物空气净化器去除浮毛

同为铲屎官&#xff0c;面对家中无处不在的猫毛挑战&#xff0c;想必你也深感头疼。衣物、沙发乃至地毯上的明显猫毛尚可通过吸尘器或粘毛器轻松应对&#xff0c;但那些细微漂浮的毛发却成了难以捉摸的“小恶魔”&#xff0c;普通的空气净化器往往力不从心。对于浮毛&#xff0…

分享安装Windows11系统相关的经验

文章目录 1. 概述2. 安装过程3. 经验分享本章回中我们准备向大家介绍如何安装 Window11操作系统同时分享一些相关的安装经验。 1. 概述 有看官说都什么年代了还介绍如何安装操作系统,不过介绍安装操作系统的方法不是我的重点,我的重点是分享相关的安装经验,帮助大家少走弯…

熵权法模型(评价类问题)

目录 本文章内容参考&#xff1a; 一. 概念 二. 特点 三. 实现步骤 四. 代码实现 本文章内容参考&#xff1a; 熵权法模型讲解(附matlab和python代码) 【数学建模快速入门】数模加油站 江北_哔哩哔哩_bilibili 一. 概念 利用信息熵计算各个指标的权重&#xff0c;从而为…

nvm 切换、安装 Node.js 版本

nvm下载路径 往下拉找到Assets 下载后&#xff0c;找到nvm-setup.exe双击&#xff0c;一直无脑下一步&#xff0c;即可安装成功。 配置环境变量&#xff08;我的是window11&#xff09; 打开任务栏设置–搜环境变量 配置好后&#xff0c;点确定一层一层关闭 windowR 打开控制…

Datawhale X 魔搭 AI夏令营 Task 01

Task 01 1. 注册阿里云 2. 跑通baseline 3. 生成图片并提交 后续思路&#xff1a; 调整prompt&#xff1b;更换微调数据集使用gpt生成故事简介

C++之类与对象(完结撒花篇)

目录 前言 1.再探构造函数 2.类型转换 3.static成员 4. 友元 5.内部类 6.匿名对象 7.对象拷贝时的编译器优化 结束语 前言 在前面的博客中&#xff0c;我们对类的默认成员函数都有了一定了解&#xff0c;同时实现了一个日期类对所学的没内容进行扩展延伸&#xff0c;本…

JavaWeb04-MyBatis与Spring结合

目录 前言 一、MyBatis入门&#xff08;MyBatis官网&#xff09; 1.1 创建mybatis项目&#xff08;使用spring项目整合式方法&#xff09; 1.2 JDBC 1.3 数据库连接池 1.4 实用工具&#xff1a;Lombok 二、MyBatis基础操作 2.1 准备工作 2.2 导入项目并实现操作 2.3 具…

Linux-Haproxy搭建Web群集

LVS在企业应用中抗负载能力强 不支持正则处理&#xff0c;不能实现动静分离对于大型网格&#xff0c;LVS的实施配置复杂&#xff0c;维护成本较高 Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件 适用于负载大的Web站点运行在硬件上可支持数以万计的…

【C++高阶】:特殊类设计和四种类型转换

✨ 人生如梦&#xff0c;朝露夕花&#xff0c;宛若泡影 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&am…