第十五章---I/O(输入/输出)

15.1输入输出流

流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O(Input/Output,(输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然 I/O 流疆盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口等。

Jaa 语言定义了许多类专门负责各种方式的输入/输出,这些类都被放在java.io 包中。其中输入流

类都是抽象类input stream(字节输入流)或抽象reader(字符输入流)的子类;而所有输出流都是抽象类output stream(字节输出流)或抽象类writer(字符输出流)的子类。

15.1.1输入流
ImputStream 类是字书输入流的抽象类,它是所有字节输入流的父类。IputStream 类的具体层构如图15.3所示。

该类中所有方法遇到错误时都会引发IOException 异常。下面是对该类中的一些方法的简要说明区: read0方法:从输入流中读取数据的下一个字节。返回025的 int 字节值。如果因为已经达流末尾而没有可用的字节,则返回值为-1。
read(bytell b):从输入流中读入一定长度的字节,并以整数的形式返回字节数。
mark(int readlimi)方法:在输入流的当前位置放置一个标记readlimit 参数告知此输入流在标记位置失效之前允许读取的字节数。reset0方法:将输入指针返回到当前所做的标记处。sipong )方法:跳过输入流上的 个字节并返回实际跳过的字节数

makSupported()方法:如果当前流支持 mark0/reset0操作就返回 true

close方法:关闭此输入流并释放与该流关联的所有系统资源。

Java中的字符是 Unicode 编码,是双字节的。InputStream 类是用来处理字节的,并不适合处理字文本Java为字符文本的输入专门提供了一套单独的类,即 Reader 类,但 Reader 类并不是 InputStream的替换者,只是在处理字符串时简化了编程。Reader 类是字符输入流的抽象类,所有字符输入流的变现都是它的子类。Reader 类的具体层次结构如图 15.4所示。

Reader类中的方法与InputStream类中的方法类似,读者在需要时可查看JDK文档

15.1.2输出流

OutputStream 类是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的超类。OutputStream类的具体层次如图15.5所示。

OutputStream 类中的所有方法均返回 void,在遇wrte(intb)方法:将指定的宇节写入此输出流。回 wrle(byteDb)方法:将b个字节从指定的 byte 数组写入此输出流。

wrle(byteDb)方法:将b个字节从指定的 byte 数组写入此输出流。
writer(byte[]b,int off,int len)方法:将指定byte数组中从偏移量off开始的len个字节写入此输出流
fush0方法:彻底完成输出并清空缓存区

close()方法:关闭输出流

writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。Writer 类的层次结图15.6所示。

5.2 File类

File 类是javaio 包中唯一代表磁盘文件本身的类。File 类定义了一些与平台无关的方法来操作件,可以通过调用 File 类中的方法,实现创建、删除、重命名文件等操作。File 类的对象主要用来取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等。数据流可以将数据写入文件中,文件也是数据流最常用的数据媒体。

15.21 文件的创建与删除
1.File(String pathname)
 

import java.io.File;
 
public class FileTest {
 
    public static void main(String[] args) {
    File file=new File("D:\\word.txt");//创建文件对象
    if(file.exists()) {//如果文件存在
        file.delete();//将文件删除
        System.out.println("文件已删除");
    }else{//如果文件不存在
        try {//try语句块捕捉可能出现的异常
            file.createNewFile();//创建该文件
            System.out.println("文件已创建");
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    }
}

 

import java.io.File;
public class FileTest {
    public static void main(String[] args) {
        File file=new File("D:\\word.txt");//创建文件对象
        if(file.exists()) {//如果文件存在
            String name=file.getName();//获取文件名称
            long length=file.length();//获取文件长度
            boolean hidden=file.isHidden();//判断文件是否为隐藏文件
            System.out.println("文件名称:"+name);//输出信息
            System.out.println("文件长度:"+length);
            System.out.println("该文件是否隐藏文件吗?"+hidden);
        }else {//如果文件不存在
            System.out.println("该文件不存在");//输出信息
        }
    }

import java.io.File;
public class FileTest {//创建类
    public static void main(String[] args) {//主方法
        File file=new File("D:\\word.txt");//创建对象
        printAllFile(file);
    }
    public static void printAllFile(File foldersPc) {
        for(File fileEntry:foldersPc.listFiles()) {
            if(fileEntry.isDirectory()) {
            System.out.println("--------"+fileEntry.getName()+"--------");
            printAllFile(fileEntry);
        }else {
            System.out.println(fileEntry.getName());
        }
    }
}
}

 

文件输入/输出流
        程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存文件中。 

FileInputStream 类与 FileOutputStream 类 
        FileInputStream 类与 FileOutputStream 类 都用来操磁盘文件。如果用户的文件读取要求比较简单,则可以使用  FileInputStream 类,该类继承自 InputStream 类。FileOutputStream 类是 OutputStream 类的子类。

 FileInputStream 类常用的构造方法:

FileInputStream(String name)
FileInputStream(File file)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class FileReaderDemo {
 
    public static void main(String[] args) throws IOException {
        File file=new File("D:\\word.txt");
        //输出的字符流
        FileWriter writer=new FileWriter(file);//创建字符输出流
        writer.write("门前大桥下 游过一群鸭");//将字符串写入文件中
        writer.close();
        
        //输入的字符流
        FileReader reader=new FileReader(file);//创建字符输入流
        char[] ch1=new char[1024];//缓存字符数组
        int len=reader.read(ch1);//将文件中的字符读入缓存数组中
        System.out.println(new String(ch1,0,len));//将字符转为字符串输出
        reader.close();//关闭流
        }
    }

带缓存的输入/输入流
        缓存时 I/O 的一种性能优化。缓存流为 I/O 流增加了内存缓存区,使得再流上执行 skip()、mark()、和 reset()方法成为可能。

BufferedReader 与 BufferedWriter 类 
         BufferedReader 类与 BufferedWriter 类分别继承 Reader 与 Writer 类。这两个类同时具有内部缓存机制,并能够以行单位进行输入/输出。

 BufferedReader 类常用的方法如下: 

read()方法:读取单个字符
readLine()方法:读取一个文本行,并将其返回为字符串。若无数据可读,返回null。
BufferedWriter 类中的方法都返回void。常用的方法如下:

write(String s,int off,int len)方法:写入字符串的某一部分

flush()方法:刷新该流的缓存
newLine()方法:写入一个行分隔符

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileTest {
    public static void main(String[] args){
        String content[]= {"好久不见","最近还好","常联系"};//写入的内容
        File file=new File("D:\\word.txt");//创建文件对象
        try {
        FileWriter fw=new FileWriter(file);//文件字符输出流
        BufferedWriter bw=new BufferedWriter(fw);//换成输出流
        for(int k=0;k<content.length;k++) {//遍历要写入的内容
            bw.write(content[k]);//写入字符串
            bw.newLine();//写一个换行符
        }
        bw.close();//关闭缓冲输出流
        fw.close();//关闭文件字符输出流
        }catch(IOException e) {
            e.printStackTrace();
        }
        try {
        FileReader fr=new FileReader(file);//文件字符输入流
        BufferedReader br=new BufferedReader(fr);//缓冲输入流
        String tmp=null;//作为缓冲的临时字符串
        int i=1;//行数
        while((tmp=br.readLine())!=null) {
            System.out.println("第"+i+"行"+tmp);//输出读取的内容
            i++;//行数递增
        }
            br.close();//关闭缓冲输入流
            fr.close();/关闭文件字符输入流
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
}

数据输入/输出流 
        数据输入/输出流 (DataInputStream 类与 DataOutputStream 类)允许应用程序以与机器无关的方式从底层输入流中读取基本 Java 数据类型。也就是说,当读取一个数据时,不必关心这个数值应当是哪个字节。

        DataInputStream 类提供了将字符串、double 数据、int 数据、Boolean 数据写入文件的方法;DataOutputStream 类只提供了一个readUTF()方法返回字符串。

 DataInputStream 类与 DataOutputStream 类的构造方法:

DataInputStream(DataInputStream in):使用指定的基础 InputStream 对象创建一个 DataInputStream 对象。
DataOutputStream(DataOutputStream out):创建一个新的数据输出流,将数据写入一个指定基础输出流。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class DataStreamDemo {
    public static void main(String[] args) throws IOException {
        File file=new File("D:\\word.txt");
//创建 FileOutputStream 对象,指定要向其中写入数据的文件
        FileOutputStream fos=new FileOutputStream(file);
//创建 DataOutputStream 对象,用来向文件中写入数据
        DataOutputStream dos=new DataOutputStream(fos);
        dos.writeBoolean(false);//将boolean数据写入文件
        dos.writeUTF("使用writeuTE() 方法写入数据");//将字符串写入文件
        dos.writeDouble(19.8);    //将double数据写入文件
        dos.writeInt(298);//将int数据写入文件
        dos.close();
        fos.close();
//创建 FileInputStream 对象,指定要从中读取数据文件        
        FileInputStream fis=new FileInputStream(file);
//创建 DataInputStream 对象,用来从文件中读取
        DataInputStream dis=new DataInputStream(fis);
        System.out.println(dis.readBoolean());//读取boolean数据
        System.out.println(dis.readUTF());//读取字符串
        System.out.println(dis.readDouble());//读取double数据 
        System.out.println(dis.readInt());//读取int数据
        dis.close();
        fis.close();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152822.shtml

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

相关文章

Vue3 源码解读系列(十)——props/emit

props props 的作用&#xff1a;允许组件的使用者在外部传递&#xff0c;实现各种各样的功能。 初始化 props 初始化 Props 主要做了 3 件事&#xff1a; 设置 props 的值验证 props 合法把 props 变为响应式并且添加到组件实例 instance 上 /*** 初始化组件*/ function s…

华为---OSPF网络虚连接(Virtual Link)简介及示例配置

OSPF网络虚连接&#xff08;Virtual Link&#xff09;简介 为了避免区域间的环路&#xff0c;OSPF规定不允许直接在两个非骨干区域之间发布路由信息&#xff0c;只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息。因此&#xff0c;每个ABR都必须连接到骨干区域…

QT基础学习

2创建项目 2.1使用向导创建 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框&#xff0c;选择Qt Widgets Application&#xff0c; 选择【Choose】按钮&#xff0c;弹出如下对话框 设置项目名称和路径&#xf…

N 字形变换

将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a; P A H N A P L S I I G Y I R 之后&#xff0c;你的输出需要从左往右逐行读取&#xff0…

网络参考模型与标准协议(一)

OSI参考模型 OSI 模型(Open Systems Interconnection Model)&#xff0c;由国际化标准组织ISO (TheInternational Organization for Standardization )收录在ISO 7489标准中并于1984年发布。 OSI参考模型又被称为七层模型&#xff0c;由下至上依次为: 物理层: 在设备之间传输比…

Linux编辑器-gcc/g++使用

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练使用gcc/g编译器 > 毒鸡汤&#xff1a;真正…

75基于matlab的模拟退火算法优化TSP(SA-TSP),最优路径动态寻优,输出最优路径值、路径曲线、迭代曲线。

基于matlab的模拟退火算法优化TSP(SA-TSP)&#xff0c;最优路径动态寻优&#xff0c;输出最优路径值、路径曲线、迭代曲线。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 75matlab模拟退火算法TSP问题 (xiaohongshu.com)

s28.CentOS、Ubuntu、Rocky Linux系统初始化脚本v6版本

CentOS、Ubuntu、Rocky系统初始化脚本 Shell脚本源码地址&#xff1a; Gitee&#xff1a;https://gitee.com/raymond9/shell Github&#xff1a;https://github.com/raymond999999/shell 可以去上面的Gitee或Github仓库代码拉取脚本。 版本功能v6版更新内容1.由于CentOS 6…

【金融分析】Python:病人预约安排政策 | 金融模拟分析

目录: 说明(Instructions) 问题描述(Problem Description) 仿真设置(Simulation Setting) 仿真过程的 Python 代码

WMS仓库管理系统库位功能

后端 &#xfeff;using Infrastructure.Attribute; using Model.Dto.WarehouseManagement; using Model.Page; using Model.WarehouseManagement; using Repository; using Service.Interface.WarehouseManagement; using SqlSugar;namespace Service.WarehouseManagement {[…

如何通过cpolar内网穿透工具实现远程访问本地postgreSQL

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;,下…

uniapp开发小程序,包过大解决方案

1、首先和大家说一下 微信小程序 主包限制不能超过2M 分包一共不能超过8M 然后具体解决优化步骤如下&#xff0c; 将主包进行分包 在pages.json 下subPackages里面进行配置分包 分包配置完 配置过的文件都需要进行修改对应的路径 2 、 在运行的时候 一定要勾选 压缩代码 有…

2311d导入c的语义不同

原文 以下D代码正常工作: enum X "X"; import core.stdc.stdio; void main(){puts(X); }但是,如果该X枚举是C文件中#define的结果,则会出现错误: //x.c #define X "X" //D代码 import x; import core.stdc.stdio; void main(){puts(X); //错误 }错误:不…

Android Termux安装MySQL,内网穿透实现公网远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

【电路笔记】-欧姆定律

欧姆定律 文章目录 欧姆定律1、概述2、AC电路的等效性2.1 输入电阻2.2 输入电感2.3 输入电容 3、欧姆定律的局部形式3.1 介绍和定义3.2 德鲁德模型(Drude Model)3.3 局部形式表达式 4、电阻和宏观欧姆定律5、总结 电流、电压和电阻之间的基本关系被称为欧姆定律&#xff0c;可能…

国家开放大学 平时作业训练题

试卷代号&#xff1a;1428 风险沟通 参考试题&#xff08;开卷&#xff09; 一、单项选择题&#xff08;每题2分&#xff0c;共40分&#xff09; 1.关于组织传播&#xff0c;下列描述中不正确的是( )。 A.是组织成员之间、组织内部机构之间的信息交流和沟通 B.决策应变是…

cpu飙高问题,案例分析(一)

一、复习知识点&#xff1a; CPU性能指标&#xff1a; load average&#xff1a;负载&#xff0c;linux查看的时候&#xff0c;通常显示如下&#xff1a; load average后面有三段数字&#xff1a;代表了系统1分钟&#xff0c;5分钟&#xff0c;15分钟平均负载。 形象的类别可…

使用npm发布自己的组件库

在日常开发中&#xff0c;我们习惯性的会封装一些个性化的组件以适配各种业务场景&#xff0c;突发奇想能不能建一个自己的组件库&#xff0c;今后在各种业务里可以自由下载安装自己的组件。 一. 项目搭建 首先直接使用vue-cli创建一个vue2版本的项目&#xff0c;并下载好ele…

Ps:陷印

在准备图像进行专业印刷之前&#xff0c;陷印 Trap是一个重要的步骤。 在彩色印刷中&#xff0c;多种颜色的墨水通常分别印刷。陷印是一种叠印技术&#xff0c;它可避免打印时印版的微小偏差或移动而使打印图像出现微小的缝隙。 进行陷印处理以纠正未对齐现象 A. 未对齐现象&am…

原始值的响应式方案

原始值指的是 Boolean、Number、BigInt、String、Symbol、undefined 和 null 等类型的值。在JavaScript 中&#xff0c;原始值是按值传递的&#xff0c;而非按引用传递。这意味着&#xff0c;如果一个函数接收原始值作为参数&#xff0c;那么形参与实参之间没有引用关系&#x…