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

news2024/9/23 19:15:10

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

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

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

在这里插入图片描述

文本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类构造方法有:
   FileReader(String fileName) 
   FileReader(File file)

FileWriter

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

问题描述:

  • 编写程序,使用FileReader和FileWriter 将文件input.txt 的内容复制到output.txt文件中。
  • 思路:用input.txt创建FileReader,用output.txt创建FileWriter,从文件输入流读取字符,写入文件输出流。
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类的构造方法如下:
  BufferedReader(Reader in) 
  BufferedReader(Reader in, int sz)
   BufferedReader in = new BufferedReader(
                  new FileReader("input.txt"));
public String readLine()

BufferedWriter

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

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

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类实现文本打印输出流,构造方法如下:
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中。

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作为其构造方法的参数。
    Scanner input = new Scanner(System.in);
    int n = input.nextInt();
  • 使用Scanner还可以关联文本文件,从文本文件中读取数据。
  • Scanner类的常用的构造方法有:
   Scanner(String source)
   Scanner(InputStream source)
  • Scanner常用方法:
   byte nextByte()
   double nextDouble()
   String nextLine() 
   boolean hasNextDouble()
   void close()
综合演练

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

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.coloradmin.cn/o/2038635.html

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

相关文章

【运维】报错Resource averaged_perceptron_tagger_eng not found.

文章目录 报错信息解决报错信息 able of handling various complex tasks. Please report the progress of this project to the team members.> ========================<

回溯算法探索篇Ⅲ

Leetcode93——复原IP地址 题目描述&#xff1a; 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是…

PyTorch — 初学者教程

一、说明 在本文中,我将编译 PyTorch 的初学者教程。本教程大量使用了官方 PyTorch 教程中的材料。

Java SE--IO流

一.File类型 如果我们想在程序中操作或者描述一个文件夹或文件&#xff0c;可以使用File类型 File类型在java.io包下 File可以新建&#xff0c;删除&#xff0c;移动&#xff0c;修改&#xff0c;重命名文件夹&#xff0c;也可以对文件或者文件夹的属性进行访问&#xff1b;…

嵌入式软件--模电基础 DAY 2

强电和弱电&#xff0c;简单一点是以电死人为标准的&#xff0c;交流电36伏特以下&#xff0c;直流电24V以下&#xff0c;为安全电压&#xff0c;是为弱电&#xff0c;反则强电。 市电进入家庭&#xff0c;连接你的电脑&#xff0c;220V的电压为什么没有让你感到危险&#xff…

【TiDB】09-修改tidb客户端访问密码

目录 1、修改配置文件 2、停止tidb-server 3、以root方式启动脚本 4、修改密码 5、停止脚本重启服务 1、修改配置文件 进入tidb-server默认部署位置 #切换tidb账号 su tidb# 进入tidb-server部署路径 cd /tidb-deploy/tidb-4000# 修改配置 vim ./conf/tidb.toml添加内容…

Nginx之我不会的

安装 windows下安装 这里我们选择windows下的稳定版本 之后就是解压&#xff0c;安装到英文目录下 启动&#xff08;关闭&#xff09;命令 windows命令 启动 nginx.exe 或者 start nginx 关闭 nginx -s quit&#xff08;会有一定程序退出&#xff09; 或 nginx -s stop &…

企业低代码平台那个好用?企业低代码推荐

近些年&#xff0c;很多大型的互联网公司开始了自研低代码开发平台的尝试&#xff0c;包括阿里、腾讯、华为等等国内头部大厂。由此我们可以了解到即使是开发能力富余的互联网大厂&#xff0c;也同样需要低代码的快速响应需求能力来应对数字化时代多变的功能需求。然而&#xf…

本地phpstudy部署算命系统,用户端是H5页面,支持微信支付宝支付,支持微信支付宝登录

算命系统本地部署教程 0. 技术架构1. 启动Apache、MySQL服务2. 创建前台和后台两个网站3. Navicat连接数据库4. 登录后台是长这个样子5. 登录前台登录样子6. 代码结构是 0. 技术架构 前端&#xff1a;HTMLCSSJquery 后端&#xff1a;PHP 数据库&#xff1a;MySQL 1. 启动Ap…

C++简单实现多态案例-制作饮品

代码示例如下&#xff1a; #include<iostream> using namespace std;class AbstractDrinking { public:virtual void Soil() 0;//第一步、煮开水virtual void Brew() 0;//第二步、冲泡virtual void PourInCup() 0;//第三步、倒入杯中virtual void AddSomething() 0;…

Lab 1 实验 MapReduce

&#x1f442; 若月亮没来 (若是月亮还没来)&#xff08;若是月亮还没来&#xff09; - 王宇宙Leto/乔浚丞 - 单曲 - 网易云音乐 目录 &#x1f33c;参考代码 &#x1f419;解析 &#x1f41f;mrsequential.go &#x1f41f;mrapps/wc.go &#x1f4d5;实验--准备 &…

Linux---02---系统目录及文件基本操作命令

课程回顾 操作系统 虚拟机安装 本章重点 Linux系统目录结构 常用命令 熟练区分Linux下各层目录的作用 熟练掌握Linux的常用命令&#xff08;文件命令、时间命令等&#xff09; 一、Linux系统目录结构 1.1 目录结构 /&#xff1a; 根目录&#xff0c;一般根目录下只存放…

KEEPALIVED是什么?以及实现各功能的配置实验

一、高可用集群KEEPALIVED 1.1 KEEPALIVED的出现 LVS ---> HAProxy ---> KEEPALIVED LVS&#xff1a; LVS&#xff1a;四层调度&#xff0c;IP地址&#xff0c;mac地址以及端口对后端进行调度。优点&#xff1a;速度快&#xff0c;对 LVS 的性能要求比较低。缺点&…

离职保密协议是什么?怎么样才是合法的?如何维护公司权益?

“商贾之道&#xff0c;在于诚信&#xff1b;机密之重&#xff0c;犹胜千金。” 在历史的长河中&#xff0c;商业机密一直是商家兴衰成败的关键。 时至今日&#xff0c;随着科技的飞速发展&#xff0c;信息时代的浪潮更是将商业秘密的保护推向了新的高度。 离职保密协议&…

前端(HTML + CSS)小兔鲜儿项目(仿)

前言 这是一个简单的商城网站&#xff0c;代码部分为HTML CSS 和少量JS代码 项目总览 一、头部区域 头部的 购物车 和 手机 用的是 文字图标&#xff0c;所以效果可以和文字一样 购物车右上角用的是绝对定位 logo用的是 h1 标签&#xff0c;用来提高网站搜索排名 二、banne…

简单的class.getResource与classLoader.getResource区别

简单的getClass().getResource()与ClassLoader.getResource()区别 1.简介 我们在springboot项目中&#xff0c;如果要获取到自己配置的资源或者配置类信息一般会用到Class.getResource()或ClassLoader.getResource()&#xff0c;这两种方式在使用的过程中很容易混淆&#xff…

echarts格式化图例回调函数返回对象

使用返回的对象可以自定义图例显示 formatter:function(obj){var label obj.seriesName "<br/>" obj.marker obj.name ":" obj.value "宗" "<br/>" "占比" obj.percent "%";return label…

四川大型数字媒体产业园区在哪里,有推荐吗?

四川省作为中国西南地区的经济和文化重镇&#xff0c;数字媒体产业的发展取得了令人瞩目的成绩。以下是四川省排名前十的数字媒体产业园&#xff0c;这些园区在推动科技创新和区域经济发展方面发挥了重要作用。 1、 国际数字影像产业园 位置&#xff1a;成都市金牛区 特点&…

触摸屏接口设置-洋桃百科

触摸屏接口设置-洋桃百科 电路设计 ​​ 触摸屏的组成&#xff1a; PCB板层&#xff1a;是电子设备中用于支撑和连接电子元件的基板。 显示层&#xff1a;是LCD触摸屏的核心部分&#xff0c;负责生成视觉图像。它由以下部分组成&#xff1a; 液晶层&#xff1a;包含液晶材料…

框架盛行,还记得原生JS如何获取表单数据吗?

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏和关注&#xff01;个人知乎 在这个前端框架遍地开花的时代&#xff0c;同学们常常被React、Vue、Angular等现代JavaScript框架的便捷性和高效性所吸引。那么多年过去&#xff0c;你还记得原生JS是如何获取表单数据的吗…