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

Java基础知识总结(三十八)--读取数据

使用Reader体系,读取一个文本文件中的数据。返回 -1 ,标志读到结尾。

import java.io.*;

class   {

public static void main(String[] args) throws IOException {

/*

创建可以读取文本文件的流对象,让创建好的流对象和指定的文件相关联。

*/

 fr = new ("demo.txt");

int ch = 0;

while((ch = fr.read())!= -1) { //条件是没有读到结尾

System.out.println((char)ch); //调用读取流的read方法,读取一个字符。

read()方法一次读一个字节的二进制数据是int型的!

}

fr.close();

}

}

读取数据的第二种方式:第二种方式较为高效,自定义缓冲区。

import java.io.*;

class  {

public static void main(String[] args) throws IOException {

 fr = new ("demo.txt"); //创建读取流对象和指定文件关联。

//因为要使用read(char[])方法,将读取到字符存入数组。所以要创建一个字符数组,一般数组的长度都是1024的整数倍。

char[] buf = new char[1024];//读取的字符数组长度是1024

int len = 0;

while(( len=fr.read(buf)) != -1) {

System.out.println(new String(buf,0,len));//将char类型的数据从0到len转换成String

}

fr.close();

}

}

IO中的使用到了一个设计模式:装饰设计模式。

装饰设计模式解决:对一组类进行功能的增强。

包装:写一个类(包装类)对被包装对象进行包装;

 * 1、包装类和被包装对象要实现同样的接口;

 * 2、包装类要持有一个被包装对象;

 * 3、包装类在实现接口时,大部分方法是靠调用被包装对象来实现的,对于需要修改的方法我们自己实现;

字符流:

Reader用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。

     |---BufferedReader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

     |---LineNumberReader跟踪行号的缓冲字符输入流。此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号。

     |---InputStreamReader是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

     |---:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在  上构造一个 InputStreamReader。

     |---CharArrayReader

     |---StringReader

Writer写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。

     |---BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

     |---OutputStreamWriter是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

     |---:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在  上构造一个 OutputStreamWriter。

     |---PrintWriter

     |---CharArrayWriter

     |---StringWriter:

字节流:

InputStream是表示字节输入流的所有类的超类。

     |--- 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 。

     |--- FilterInputStream包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。

        |--- BufferedInputStream该类实现缓冲的输入流。

        |--- Stream

     |--- ObjectInputStream

     |--- PipedInputStream:

OutputStream此抽象类是表示输出字节流的所有类的超类。

     |--- 文件输出流是用于将数据写入 File 或  的输出流。

     |--- FilterOutputStream此类是过滤输出流的所有类的超类。

        |--- BufferedOutputStream该类实现缓冲的输出流。

        |--- PrintStream

        |--- DataOutputStream

     |--- ObjectOutputStream

     |--- PipedOutputStream:

缓冲区是提高效率用的,给谁提高呢?

BufferedWriter(将流和缓冲区结合):是给字符输出流提高效率用的,那就意味着,缓冲区对象建立时,必须要先有流对象。明确要提高具体的流对象的效率。

 fw = new ("bufdemo.txt");

BufferedWriter bufw = new BufferedWriter(fw);//让缓冲区和指定流相关联。

for(int x=0; x<4; x++){

bufw.write(x+"abc");

bufw.newLine()//写入一个换行符,这个换行符可以依据平台的不同写入不同的换行符。

bufw.flush();//对缓冲区进行刷新,可以让数据到目的地中。

}

bufw.close();//关闭缓冲区,其实就是在关闭具体的流。

-----------------------------

BufferedReader

 fr = new ("bufdemo.txt");

BufferedReader bufr  = new BufferedReader(fr);

String line = null;

while((line=bufr.readLine())!=null){  //readLine方法返回的时候是不带换行符的。

System.out.println(line);

}

bufr.close();

-----------------------------

//记住,只要一读取键盘录入,就用这句话。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

//将读取到的从键盘输入的字节转化成字符存在流中,并将其放入缓冲区

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));//输出到控制台

String line = null;

while((line=bufr.readLine())!=null){

if("over".equals(line))

break;

bufw.write(line.toUpperCase());//将输入的字符转成大写字符输出

bufw.newLine();//换行

bufw.flush();

}

bufw.close();

bufr.close();

http://www.lryc.cn/news/530110.html

相关文章:

  • 交错定理和切比雪夫节点的联系与区别
  • 大数据相关职位介绍之三(数据挖掘,数据安全 ,数据合规师,首席数据官,数据科学家 )
  • GitHub Actions定时任务配置完全指南:从Cron语法到实战示例
  • Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想
  • Easy系列PLC尺寸测量功能块ST代码(激光微距仪应用)
  • Manacher 最长回文子串
  • 51单片机开发:独立键盘实验
  • 组件框架漏洞
  • OFDM系统仿真
  • 基于单片机的盲人智能水杯系统(论文+源码)
  • 安心即美的生活方式
  • 安卓(android)订餐菜单【Android移动开发基础案例教程(第2版)黑马程序员】
  • 【cocos creator】【模拟经营】餐厅经营demo
  • 前端 | 深入理解Promise
  • Visual Studio Code修改terminal字体
  • 自然语言处理-词嵌入 (Word Embeddings)
  • 自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数
  • 【论文笔记】Fast3R:前向并行muti-view重建方法
  • 谈谈你所了解的AR技术吧!
  • upload labs靶场
  • 搜索引擎友好:设计快速收录的网站架构
  • 基于 oneM2M 标准的空气质量监测系统的互操作性
  • 春晚舞台上的人形机器人:科技与文化的奇妙融合
  • 零基础学习书生.浦语大模型-入门岛
  • Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr
  • 数据结构---图的遍历
  • Qwen 模型自动构建知识图谱,生成病例 + 评价指标优化策略
  • .Net Web API 访问权限限定
  • 项目架构调整,切换版本并发布到中央仓库
  • 考试知识点位运算