第十五章---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();
    }
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

启动dubbo消费端过程提示No provider available for the service的问题定位与解决

文/朱季谦 某次在启动dubbo消费端时&#xff0c;发现无法从zookeeper注册中心获取到所依赖的消费者API&#xff0c;启动日志一直出现这样的异常提示 Failed to check the status of the service com.fte.zhu.api.testService. No provider available for the service com.fte…

一道简单的积分题目

题目如下图&#xff1a; 解法1&#xff1a; 解法2&#xff1a; 解法3&#xff1a; 错误做法&#xff1a; 在 x ∈ ( 0 , ∞ ) 上有 ln ⁡ x < x &#xff0c;令 f ( x ) ln ⁡ x 1 x 2 &#xff0c; g ( x ) &#xff1d; x 1 x 2 ∴ f ( x ) < g ( x ) &#x…

中贝通信-603220 三季报分析(20231120)

中贝通信-603220 基本情况 公司名称&#xff1a;中贝通信集团股份有限公司 A股简称&#xff1a;中贝通信 成立日期&#xff1a;1999-12-29 上市日期&#xff1a;2018-11-15 所属行业&#xff1a;软件和信息技术服务业 周期性&#xff1a;1 主营业务&#xff1a;通信网络技术服务…

车载毫米波雷达行业发展1——概述

1.1 毫米波雷达定义及产品演进 1.1.1 毫米波雷达定义 毫米波雷达(mmWave Radar)是指工作在毫米波波段的雷达&#xff0c;其频域介于 30&#xff5e;300GHz&#xff0c;波长1~10mm。毫米波雷达稳定性高&#xff0c;抗干扰能力强&#xff0c;可穿透雾、烟、灰尘环境&#xff0…

Microsoft Visual Studio 2019下载及安装流程记录

第一周任务&#xff1a; 1.笔记本上安装vc2019的环境 2.再把OpenCV安装上 3.根据网上的教程&#xff0c;试着写几个opencv的程序 一、安装Visual Studio 2019社区版 首先先完成安装vc2019的环境&#xff0c; 因为&#xff1a; Microsoft Visual C是用于C编程的工具集合&am…

ATTCK 十大免费 工具和资源

01 eBook: Getting Started with ATT&CK 这本免费电子书将有关威胁情报、检测和分析、对手模拟和红队以及评估和工程的博客文章中的内容汇集到一个方便的软件包中。 02 CALDERA CALDERA是一个网络安全平台&#xff0c;旨在轻松自动化对手仿真&#xff0c;协助手动红队并自…

【鸿蒙最新全套教程】<HarmonyOS第一课>1、运行Hello World

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…

【推荐】智元兔AI:一款集写作、问答、绘画于一体的全能工具!

在当今技术飞速发展的时代&#xff0c;越来越多的领域开始应用人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;。其中&#xff0c;AI写作工具备受瞩目&#xff0c;备受推崇。在众多的选择中&#xff0c;智元兔AI是一款在笔者使用过程中非常有帮助的…

使ros1和ros2的bag一直互通

很多文章都是先source ros1 然后source ros2,再play bag source /opt/ros/noetic/setup.bash source /opt/ros/foxy/setup.bash ros2 bag play -s rosbag_v2 kitti_raw00.bag 但实测会出问题: 为使ros1和ros2的bag一直互通 sudo apt update sudo apt install ros-foxy-ro…

在使用tomcat运行项目时,遇到端口80被占用的情况问题解决

问题描述&#xff1a;Failed to initialize end point associated with ProtocolHandler ["http-bio-80"] java.net.BindException: Address already in use: NET_Bind <null>:80 在学习springmvc的时候&#xff0c;跟着黑马视频进行学习&#xff0c;结果&…

Mybatis-Plus 自定义SQL注入器,实现真正的批量插入![MyBatis-Plus系列]

导读 Hi,大家好,我是悟纤。过着爱谁谁的生活,活出不设限的人生。 在使用MyBatis-Plus时,dao层都会去继承BaseMapper接口,这样就可以用BaseMapper接口所有的方法CRUD。 在Mybatis-Plus中调用updateById方法进行数据更新默认情况下是不能更新空值字段的。

python基础练习题库实验9

题目1 编写一个程序来生成一个平方数列表。 例如&#xff1a; 代码 def generate_square_numbers(num):square_list []for i in range(num):square_list.append(i ** 2)return square_listnum_squares int(input("How many square numbers to generate? "))sq…

shell 脚本变量

目录 什么是 shell shell 的两种面向对象 shell 脚本概述 脚本 &#xff08;本质为程序&#xff09; 脚本的组成 执行脚本 例题 脚本构成 脚本执行逻辑及执行方式 脚本的常见错误 编写 shell 脚本 执行脚本文件的方式 重定向 重定向操作 shell 变量的作用及类型…

Shell判断:模式匹配:case(一)

一、前言 shell编程中if和case都是用来做流控的。 二、case语法结构 case 变量 in 模式1&#xff09; 命令序列1 ;; 模式2&#xff09; 命令序列2 ;; 模式3&#xff09; 命令序列3 ;; *) 无匹配…

电脑游戏录屏软件,记录游戏高光时刻

电脑游戏录制是游戏爱好者分享游戏乐趣、技巧和成就的绝佳方式&#xff0c;此时&#xff0c;一款好用的录屏软件就显得尤为重要。本文将为大家介绍三款电脑游戏录屏软件&#xff0c;通过对这三款软件的分步骤详细介绍&#xff0c;让大家更加了解它们的特点及使用方法。 电脑游戏…

​vmware虚拟机ubuntu系统配置静态ip​

把虚拟机当成服务器&#xff0c;如果虚拟机的ip是一直变化的&#xff0c;每次远程连接需要都修改连接虚拟机的ip地址&#xff0c;这肯定是麻烦的。 一、设置一下本机的VMnet8的ip 配置路径&#xff1a;控制面板->所有控制面板项->网络和共享中心 二、首先设置NAT 选自…

css 实现文字流光效果

经过调研发现大多滑块验证码中&#xff0c;有一些文字流光效果&#xff0c;因此在这里简单实现一下。 实现主要利用background 渐变背景以及backgorund-clip:text实现。具体代码如下 css部分 .slide {width: 300px;height: 40px;border: 1px solid #ccc;border-radius: 8px;…

IDEA中更换java项目JDK

我们打开IDEA 打开项目 然后选择 File 下的 Project Structure 这里 我们下拉选择自己需要的JDK Sources这里 也要设置一下JDK对应版本 然后 上面这个 Project 中 也要设置一下对应jdk的版本 保持一直 然后 我们打开 File 下的 Settings 然后 找到如下图配置 如果JKD版本看…

vue3之echarts区域折线图

vue3之echarts区域折线图 效果&#xff1a; 核心代码&#xff1a; <template><div class"abnormal"><div class"per">单位&#xff1a;{{ obj.data?.unit }}</div><div class"chart" ref"chartsRef"&g…

Linux 时区设置

对于服务器来说&#xff0c;linux的时区影响着运行之上的数据库和后端程序的时区 应该和数据库和后端及其他程序的时区保持一致 其他相关时区的设置 pgsql时区设置&#xff1a; php时区设置&#xff1a; 1.显示当前的时间和时区 date结果类似下面&#xff0c;图中显示的是ut…