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

news/2024/9/19 18:42:18/ 标签: java, python, 开发语言, eclipse, ide

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

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

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

在这里插入图片描述

文本I/O流

  • 文本I/O流概述
    • Reader类和Writer类
      • Reader
      • Writer
    • FileReader和FileWriter类
      • FileReader
      • FileWriter
        • 实战演练
    • BufferedReader和BufferedWriter类
      • BufferedReader
      • BufferedWriter
        • 实战演练
        • PrintWriter类的应用
    • 使用Scanner对象
          • 综合演练

文本I/O流概述

  • 文本I/O流以字符为基本单位, 也叫字符I/O流。
  • 抽象类ReaderWriter分别是文本输入流和输出流的根类。
    在这里插入图片描述
    在这里插入图片描述

Reader类和Writer类

Reader

  • Reader类是文本输入流的根类,主要方法有:
       int read() 返回值0-65535之间
       int read(char[] cbuf)
       void close()

    Writer

  • Writer是字符输出流的根类,主要方法有:
       void write(int c) 写入c的低16位
       void write(char [] cbuf)
       void write(String str)
       void close()

FileReader和FileWriter类

FileReader

  • FileReader类构造方法有:
java">   FileReader(String fileName) FileReader(File file)

FileWriter

  • FileWriter类构造方法有:
java">   FileWriter(String fileName) FileWriter(File file) FileWriter(String fileName, boolean append)
实战演练

问题描述:

  • 编写程序,使用FileReader和FileWriter 将文件input.txt 的内容复制到output.txt文件中。
  • 思路:用input.txt创建FileReader,用output.txt创建FileWriter,从文件输入流读取字符,写入文件输出流。
java">import java.io.FileReader;  
import java.io.FileWriter;  
import java.io.IOException;  public class FileCopyExample {  public static void main(String[] args) {  // 定义源文件和目标文件的路径  String inputFilePath = "input.txt";  String outputFilePath = "output.txt";  // 使用try-with-resources语句自动关闭资源  try (FileReader reader = new FileReader(inputFilePath);  FileWriter writer = new FileWriter(outputFilePath)) {  // 创建一个字符数组(缓冲区)来存储从文件读取的字符  char[] buffer = new char[1024];  int bytesRead;  // 读取文件到缓冲区,直到没有更多的数据  while ((bytesRead = reader.read(buffer)) != -1) {  // 将缓冲区中的数据写入输出文件  writer.write(buffer, 0, bytesRead);  }  System.out.println("文件复制完成。");  } catch (IOException e) {  // 如果发生I/O错误,打印错误消息  e.printStackTrace();  }  }  
}

程序解释
1、导入必要的类:

  • FileReader 用于读取字符文件。
  • FileWriter 用于写入字符文件。
  • IOException 用于处理可能发生的I/O错误。

2、定义文件路径:

  • inputFilePath 是源文件input.txt的路径。
  • outputFilePath 是目标文件output.txt的路径。

3、使用try-with-resources语句:

  • 这个语句自动管理资源(即FileReader和FileWriter对象),并在代码块执行完毕后自动关闭它们。

4、读取和写入:

  • 创建一个字符数组(或称为缓冲区)buffer,用于临时存储从input.txt读取的字符。
  • 使用while循环和read方法从FileReader中读取数据到缓冲区中,直到没有更多的数据(即read方法返回-1)。
  • 在每次循环中,使用write方法将缓冲区中的数据写入到FileWriter中。注意write方法的第三个参数指定了要写入文件的字节数(在这个情况下是bytesRead)。

5、异常处理:

  • 如果在读取或写入过程中发生IOException,则捕获该异常并打印堆栈跟踪。

这个示例展示了如何使用Java IO库中的FileReaderFileWriter类来复制文件内容。注意,由于这个示例使用了字符流,所以它最适合用于处理文本文件。如果你需要处理二进制文件,应该考虑使用FileInputStreamFileOutputStream

BufferedReader和BufferedWriter类

BufferedReader

  • BufferedReader类的构造方法如下:
java">  BufferedReader(Reader in) BufferedReader(Reader in, int sz)BufferedReader in = new BufferedReader(new FileReader("input.txt"));
public String readLine()

BufferedWriter

  • BufferedWriter类的构造方法如下:
java">  BufferedWriter(Writer out)BufferedWriter(Writer out, int sz)BufferedWriter br = new BufferedWriter(new FileWriter("output.txt"));
实战演练

问题描述
编写程序,统计文本文件article.txt中的单词数量。
思路:从article.txt文件中读取一行,解析成单词组成的字符串数组,累加数组的长度即可。
假设单词的分隔符只用空格、逗号和点号3种。

java">import java.io.BufferedReader;  
import java.io.FileReader;  
import java.io.IOException;  
import java.util.regex.Pattern;  public class WordCount {  public static void main(String[] args) {  String filePath = "article.txt";  int totalWords = 0;  try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {  String line;  while ((line = reader.readLine()) != null) {  // 使用正则表达式分割单词,这里假设单词之间由空格、逗号或点号分隔  String[] words = line.split("[\\s,.]+"); // \\s 匹配任何空白字符,+表示一个或多个  // 累加当前行的单词数量  totalWords += words.length;  // 注意:这种简单的计数方式会将连续的分隔符视为空字符串,因此可能需要进一步处理  // 但在这个特定情况下,由于我们关注的是单词的总数,所以可以接受这种“额外”的计数  }  System.out.println("Total words in the file: " + totalWords);  } catch (IOException e) {  e.printStackTrace();  }  }  
}

注意:
我们使用了split("[\\s,.]+")来根据空格、逗号和点号(一个或多个)分割字符串。这里的+确保了即使连续出现多个分隔符,它们也只被视为一个分隔点,从而避免生成空字符串(尽管在这个计数场景下空字符串不会影响最终结果)。
请确保article.txt文件存在于程序的运行目录中,或者提供正确的文件路径。
如果文件很大,或者性能是一个关注点,可能需要考虑更高效的读取和解析策略,比如使用Scanner类或者NIO包中的类来读取文件。

  • PrintWriter类实现文本打印输出流,构造方法如下:
java">PrintWriter(Writer out) 
PrintWriter(Writer out, boolean autoFlush)
void println(boolean b)
void println(int i) 
void println(String s) 
void println(Object obj) 
PrintWriter printf(String format, Object…args)
PrintWriter类的应用

问题描述
编写程序,随机产生10个100到200之间的整数,然后使用PrintWriter对象输出到文件number.txt中。

java">import java.io.FileWriter;  
import java.io.IOException;  
import java.io.PrintWriter;  
import java.util.Random;  public class RandomNumbersToFile {  public static void main(String[] args) {  // 创建 Random 对象  Random random = new Random();  // 创建 FileWriter 对象,如果文件不存在则创建文件  try (FileWriter fileWriter = new FileWriter("number.txt");  PrintWriter printWriter = new PrintWriter(fileWriter)) {  // 循环生成10个随机数  for (int i = 0; i < 10; i++) {  // 生成 100 到 200 之间的随机整数  int randomNumber = random.nextInt(101) + 100; // 因为nextInt(n)生成的是0到n-1之间的随机数  // 写入随机数到文件  printWriter.println(randomNumber);  }  // 注意:由于使用了try-with-resources语句,不需要显式关闭PrintWriter和FileWriter  } catch (IOException e) {  e.printStackTrace();  System.out.println("发生错误,无法写入文件。");  }  System.out.println("随机数已写入到number.txt文件中。");  }  
}

这个程序首先创建了一个Random对象用于生成随机数。然后,它使用FileWriterPrintWriter对象将随机数写入到number.txt文件中。注意,由于FileWriter构造函数在文件不存在时会创建文件,因此不需要事先手动创建number.txt文件。程序中的循环会生成10个随机数,并使用println方法将每个随机数写入文件(每个数占一行)。最后,使用try-with-resources语句来确保PrintWriterFileWriter在使用后能够被正确关闭,这避免了潜在的资源泄露问题。

使用Scanner对象

  • 使用Scanner类从键盘读取数据,这是在创建Scanner对象时将标准输入设备System.in作为其构造方法的参数。
java">    Scanner input = new Scanner(System.in);int n = input.nextInt();
  • 使用Scanner还可以关联文本文件,从文本文件中读取数据。
  • Scanner类的常用的构造方法有:
java">   Scanner(String source)Scanner(InputStream source)
  • Scanner常用方法:
java">   byte nextByte()double nextDouble()String nextLine() boolean hasNextDouble()void close()
综合演练

问题描述
编写程序,使用Scanner类从程序13.5创建的文本文件number.txt中读出每个整数。
思路: 先用number.txt创建FileInputStream对象,再用它创建Scanner对象,用nextInt()方法从中读出整数。

java">import java.io.File;  
import java.io.FileNotFoundException;  
import java.util.Scanner;  public class ReadNumbersFromFile {  public static void main(String[] args) {  // 指定文件路径  String filePath = "number.txt";  // 使用File对象指向文件  File file = new File(filePath);  // 创建Scanner对象来读取文件  try (Scanner scanner = new Scanner(file)) {  // 检查文件是否成功打开  if (!scanner.hasNext()) {  System.out.println("文件为空或无法读取");  return;  }  // 循环读取文件中的整数  while (scanner.hasNextInt()) {  int number = scanner.nextInt();  System.out.println(number); // 打印读取到的整数  }  // 注意:由于使用了try-with-resources语句,Scanner对象会在结束时自动关闭  } catch (FileNotFoundException e) {  System.out.println("文件未找到:" + filePath);  e.printStackTrace();  }  }  
}

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


http://www.ppmy.cn/news/1510709.html

相关文章

HarmonyOS应用开发者基础认证(二)

1、下面是ArkTS中常量名、枚举值名推荐的代码风格是&#xff1f; 答案&#xff1a; 全大写&#xff0c;下划线分割 分析&#xff1a;常量名、枚举值名采用全部大写&#xff0c;单词间使用下划线隔开。 const MAX_USER_SIZE 10000; enum UserType {TEACHER 0,STUDENT 1 };2、…

python logger冗余日志处理

在for循环中创建logger日志&#xff0c;产生冗余日志 冗余日志 import logging import osdef create_directory_file(log_path):"""创建目录&#xff0c;如果目录不存在则创建目录。"""# 获取目录路径directory os.path.dirname(log_path)# 如…

KEEPALIVED高可用集群知识大全

目录 一、KEEPALIVED高可用集群简介 1、Keepalived 高可用集群的工作原理 2、Keepalived 高可用集群的作用 二、KEEPALIVED部署 1、网络配置 2、软件安装与启动 3、配置虚拟路由器 4、效果实现 三、启用keepalived日志功能 四、KEEPALIVED的几种工作模式 1、KEEPALI…

jira敏捷开发管理工具视频教程Confluence工作流协同开发(2024)

正文&#xff1a; 随着Jira敏捷开发方法论的普及&#xff0c;Jira已经成为全球软件开发团队管理项目、任务和问题的首选工具。为了帮助团队更好地掌握Jira的核心功能&#xff0c;精心准备了一套全面开发技术及案例视频教程——《Jira敏捷开发管理工具视频教程Confluenc…

【附源码】YOLOv8:批量处理图片与目标检测裁剪

系列文章目录 机器学习&#xff1a;批量处理图片与目标检测裁剪 文章目录 系列文章目录前言一、单一照片处理与裁剪1.源代码2.代码分析 二、多个照片处理与裁剪&#xff08;指定文件夹&#xff09;1.源代码2.代码分析 总结 前言 YOLOv8是一个高效且准确的目标检测模型&#x…

MyBatis源码系列1(使用JDBC查询数据)

使用原生jdbc进行查询数据步骤. 1、加载驱动2、获取数据库连接3、创建Statement对象4、占位符赋值5、执行脚本6、解析结果7、关闭资源 代码示例 public class T0 {public static void main(String[] args) throws Exception {String sql "SELECT id,name FROM goods WH…

GD32替换STM32的型号对应选型方法

问题描述&#xff1a; GD32是国产厂商兆易创新研发的一系列32位单片机&#xff0c;与STM32具有高度兼容性。近年来&#xff0c;得益于其更具竞争力的价格优势以及部分厂商面临的制裁问题&#xff0c;GD32作为STM32替代品的使用比例逐年上升。 由于GD32与STM32的高度兼容性&am…

【产品经理】定价策略

年初的时候&#xff0c;尝试自己独立运营了一个美团店铺&#xff0c;最终没有继续做下去了&#xff0c;原因是利润率太低&#xff0c;平台和骑手把利润拿走太多了&#xff0c;根本没有钱赚&#xff0c;烧钱搞流量更是深不见底。 不过也学到了很多东西&#xff0c;比如选品策略…

Tomcat文章目录

这是一个Tomcat相关文章的目录&#xff0c;汇总了我写过的Tomcat的所有文章&#xff0c;方便进行查找回顾 第一章&#xff1a;实现一个简单的Web容器 使用Socket编程实现一个简单的服务端程序&#xff0c;但是仅仅支持静态资源&#xff08;html&#xff09;的获取。 第二章&…

鸿蒙UIAbility组件概述(二)

鸿蒙UIAbility组件概述 UIAbility组件基本用法指定UIAbility的启动页面获取UIAbility的上下文信息 UIAbility组件与UI的数据同步使用EventHub进行数据通信使用AppStorage/LocalStorage进行数据同步 UIAbility组件间交互&#xff08;设备内&#xff09;启动应用内的UIAbility启动…

深度学习入门(二):PyTorch使用-张量的类型转换,拼接操作,索引操作,形状操作

目录 1. 张量类型转换 1.1 张量转换为 numpy 数组 1.2 numpy 转换为张量 1.3 标量张量和数字的转换 1.4 小节 2. 张量拼接操作 2.1 torch.cat 函数的使用 2.2 torch.stack 函数的使用 2.3 小节 3. 张量索引操作 3.1 简单行、列索引 3.2 列表索引 3.3 范围索引 3.…

【Linux入门】简单理解程序和进程

文章目录 程序和进程程序&#xff08;Program&#xff09;进程&#xff08;Process&#xff09;程序与进程的关系举例说明程序&#xff08;Program&#xff09;进程&#xff08;Process&#xff09; 补充僵尸进程与孤儿进程僵尸进程&#xff08;Zombie Process&#xff09;孤儿…

Java养老护理助浴医院陪护陪诊小程序系统源码

&#x1f338;【关爱老人&#xff0c;从细节做起 —— 养老护理助浴医院陪护陪诊小程序全攻略】&#x1f338; &#x1f3e5; 医院陪护新选择&#xff0c;安心更省心 在家人需要住院治疗的时刻&#xff0c;我们总希望能给予他们最周全的照顾。但忙碌的生活往往让我们分身乏术…

19. OTA功能 - 1

1. 概述 耳机采用AB分区的OTA方式,AB分区详见分区表,通过手机蓝牙下发更新文件。 OTA方案,目前主要依赖恒玄现有的方案。 参考:https://blog.csdn.net/zhanghuaishu0/article/details/117668173 2. APP下载 安卓直接应用宝搜Bestechnic 国外的google play搜Bestechnic…

前端面试——UDP、TCP、HTTP、DNS详解

UDP 网络中的UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种无连接的、不可靠的、面向数据报的传输层协议。以下是对UDP的详细解析&#xff1a; 一、UDP的基本特点 无连接性&#xff1a; UDP在发送数据之前不需要在通信双方之间建立连…

php的多态

在 PHP 中&#xff0c;多态可以通过接口和抽象类来实现。以下是一个示例&#xff0c;展示如何在 PHP 中实现多态。 示例代码 <?php// 定义一个接口 interface Animal {public function speak(); }// 实现接口的 Dog 类 class Dog implements Animal {public function spe…

经纬恒润亮相第四届焉知汽车年会,功能安全赋能域控

8月初&#xff0c;第四届焉知汽车年会在上海举行。此次年会围绕当下智能电动汽车的热点和焦点&#xff0c;聚焦于智能汽车场景应用、车载通信、激光雷达、智能座舱、功能安全、电驱动系统等多个领域&#xff0c;汇聚了来自OEM、科技公司、零部件供应商、测试认证机构、政府院校…

电子行业数字工厂管理系统解决方案

电子行业数字工厂管理系统解决方案是针对电子企业特定需求而设计的一套综合管理系统&#xff0c;旨在通过数字化手段提升生产效率、优化资源配置、降低运营成本&#xff0c;并确保高品质产品的输出。以下是一个详细的电子行业数字工厂管理系统解决方案的概述&#xff1a; 一、系…

MVCC -MySQL多版本并发控制

MVCC是多版本并发控制&#xff0c;指的是一条数据记录会有多个版本&#xff0c;每次修改的时候会存储之前的版本&#xff0c;因此MVCC的控制是以一条数据为单位的而不是表。 MVCC能够实现启动的事务无锁地访问不同版本的数据&#xff0c;因此读&#xff08;普通读&#xff09;…

Leetcode 第 137 场双周赛

Powered by:NEFU AB-IN Link 文章目录 Q1. 长度为 K 的子数组的能量值 I题意思路代码 Q2. 长度为 K 的子数组的能量值 II题意思路代码 Q3. 放三个车的价值之和最大 IQ4. 放三个车的价值之和最大 II题意思路代码 Q1. 长度为 K 的子数组的能量值 I 题意 给你一个长度为 n 的整…