Java eight 解读流(Stream)、文件(File)、IO和异常处理的使用方法

news2024/11/16 15:56:32

目录

  • Java 流(Stream)、文件(File)和IO
    • 读取控制台输入
    • 读写文件
      • FileInputStream
      • FileOutputStream
    • Java目录
  • Java 异常处理

Java 流(Stream)、文件(File)和IO

java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。

一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

读取控制台输入

//使用 BufferedReader 在控制台读取字符
 
import java.io.*;
 
public class BRRead {
    public static void main(String[] args) throws IOException {
        char c;
        // 使用 System.in 创建 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("输入字符, 按下 'q' 键退出。");
        // 读取字符
        do {
            c = (char) br.read();
            System.out.println(c);
        } while (c != 'q');
    }
}

读写文件

FileInputStream

该流用于从文件读取数据

InputStream f = new FileInputStream("C:/java/hello");

使用以下方法来读取流或者进行其他的流操作

  1. public void close() throws IOException{} 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。

  2. protected void finalize()throws IOException {} 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。

  3. public int read(int r)throws IOException{} 这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。

  4. public int read(byte[] r) throws IOException{}
    这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。

  5. public int available() throws IOException{} 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。

FileOutputStream

创建一个文件并向文件中写数据。文件不存在,则创建。

OutputStream f = new FileOutputStream("C:/java/hello")
  1. public void close() throws IOException{}
    关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。

  2. protected void finalize()throws IOException {}
    这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。

  3. public void write(int w)throws IOException{} 这个方法把指定的字节写到输出流中。

  4. public void write(byte[] w) 把指定数组中w.length长度的字节写到OutputStream中。

文件操作代码参考

Java目录

创建目录

mkdir()方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。

mkdirs()方法创建一个文件夹和它的所有父文件夹。

读取目录

一个目录其实就是一个 File 对象,它包含其他文件和文件夹。

如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true

使用 list() 方法来检查一个文件夹中包含的内容:

import java.io.File;
 
public class DirList {
    public static void main(String args[]) {
        String dirname = "/tmp";
        File f1 = new File(dirname);
        if (f1.isDirectory()) {
            System.out.println("目录 " + dirname);
            String s[] = f1.list();
            for (int i = 0; i < s.length; i++) {
                File f = new File(dirname + "/" + s[i]);
                if (f.isDirectory()) {
                    System.out.println(s[i] + " 是一个目录");
                } else {
                    System.out.println(s[i] + " 是一个文件");
                }
            }
        } else {
            System.out.println(dirname + " 不是一个目录");
        }
    }
}

删除目录或文件

删除文件可以使用 java.io.File.delete() 方法。

当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。

import java.io.File;
 
public class DeleteFileDemo {
    public static void main(String[] args) {
        // 这里修改为自己的测试目录
        File folder = new File("/tmp/java/");
        deleteFolder(folder);
    }
 
    // 删除文件及目录
    public static void deleteFolder(File folder) {
        File[] files = folder.listFiles();
        if (files != null) {
            for (File f : files) {
                if (f.isDirectory()) {
                    deleteFolder(f);
                } else {
                    f.delete();
                }
            }
        }
        folder.delete();
    }
}

Java 异常处理

异常发生的原因
用户输入了非法数据。
要打开的文件不存在。
网络通信时连接中断,或者JVM内存溢出。

Java 的非检查性异常
在这里插入图片描述
检查性异常类

在这里插入图片描述
异常方法

  1. public String getMessage() 返回关于发生的异常的详细信息。这个消息在Throwable
    类的构造函数中初始化了。

  2. public Throwable getCause() 返回一个 Throwable 对象代表异常原因。

  3. public String toString() 返回此 Throwable 的简短描述。

  4. public void printStackTrace() 将此 Throwable 及其回溯打印到标准错误流。

  5. public StackTraceElement [] getStackTrace()
    返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。

  6. public Throwable fillInStackTrace() 用当前的调用栈层次填充Throwable
    对象栈层次,添加到栈层次任何先前信息中。

捕获异常

使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方;
Catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。

finally 关键字用来创建在 try 代码块后面执行的代码块。无论是否发生异常,finally 代码块中的代码总会被执行。

try{
  // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}finally{
  // 程序代码
}

throws/throw 关键字

throw 关键字用于在代码中抛出异常;
throws 关键字用于在方法声明中指定可能会抛出的异常类型。可以声明抛出多个异常;

public void readFile(String filePath) throws IOExceptionRemoteException,InsufficientFundsException {
  BufferedReader reader = new BufferedReader(new FileReader(filePath));
  String line = reader.readLine();
  while (line != null) {
    System.out.println(line);
    line = reader.readLine();
    if (line == 0) {
       throw new IllegalArgumentException("Number must be positive");
    }
  }
  reader.close();
}

try-with-resources(可查阅详细内容进行了解)
JDK7 之后,Java 新增的 try-with-resource 语法糖来打开资源,并且可以在语句执行完毕后确保每个资源都被自动关闭 。

声明自定义异常

所有异常都必须是 Throwable 的子类。
如果希望写一个检查性异常类,则需要继承 Exception 类。
如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

通用异常

JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException类,IllegalStateException 类。

在这里欢迎大家的点赞、关注、评论,以此来促进大家互相学习交流,同时可以让新加入的小伙伴更快的了解新知识!!!

以上内容如有侵权,请联系作者进行删除

≧◠◡◠≦ 1分2分都是爱,感谢已经打赏的老板,和正在打赏的老板们 ≧◠◡◠≦

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

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

相关文章

wpf从cs代码创建简单3D物体和3D Tools研究

前面已经说了&#xff0c;WPF项目中引入3DTools dll之后&#xff0c;在xaml中加入它的命名空间&#xff0c; xmlns:tools"clr-namespace:_3DTools;assembly3DTools" 把<Viewport3D>标签包含在<tools:TrackballDecorator>标签之中&#xff0c;就可以用鼠…

Bean的生命周期和执行流程

文章目录 一.Bean的生命周期1.Bean的作用域2.设置Bean的作用域3.Spring的执行流程4.Bean的生命周期 一.Bean的生命周期 1.Bean的作用域 Bean的作用域指的是Bean在Spring容器中的某种行为模式,默认是singleton(单例模式)&#xff0c;一共分为6种,后四种用于spring mvc中有用 si…

C++ 读写Excel LibXL库的使用附注册码(key)

LibXL是一款用于读写处理 Excel 文件的库,支持C, C++, C#,Python等语言。并且支持多个平台windows、Linux、Mac等,它提供了一系列的API,让开发人员可以方便地读取、修改和创建Excel文件。 一、关于库的key与使用 1.价值3000多的key 但是这个库并不是免费的,使用此库需要…

Leetcode:【448. 找到所有数组中消失的数字】题解

题目 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 难度&#xff1a;简单 题目链接&#xff1a;448. 找到所有数组中消失的数字 示例1 输入&…

基于硬件隔离增强risc-v调试安全2_安全提议

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

springboot添加ssl证书文件后报错:DerInputStream.getLength(): lengthTag=111, too big.

1、添加证书文件 springboot添加SSL证书&#xff0c;支持https与http 按照上述连接中的方法添加证书文件后&#xff0c;启动报错&#xff1a;DerInputStream.getLength(): lengthTag111, too big. 2、解决办法 在pom.xml中添加配置 再次启动解决问题 <plugin><arti…

基于Java+SpringBoot+Vue前后端分离秒杀系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

《vue3实战》通过indexOf方法实现电影评价系统的模糊查询功能

目录 前言 一、indexOf是什么&#xff1f;indexOf有什么作用&#xff1f; 含义&#xff1a; 作用&#xff1a; 二、功能实现 这段是查询过程中过滤筛选功能的代码部分: 分析&#xff1a; 这段是查询用户和性别功能的代码部分&#xff1a; 分析&#xff1a; 三、最终效…

软考A计划-网络工程师-协议名称与简介

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

uniapp实现:点击拨打电话,弹出电话号码列表,可以选择其中一个进行拨打

一、实现效果&#xff1a; 二、代码实现&#xff1a; 在uni-app中&#xff0c;使用uni.showActionSheet方法实现点击拨打电话的功能&#xff0c;并弹出相关的电话列表供用户选择。 当用户选择了其中一个电话后&#xff0c;会触发success回调函数&#xff0c;并通过res.tapInde…

双路快速排序(Java 实例代码)

双路快速排序 一、概念及其介绍 双路快速排序算法是随机化快速排序的改进版本&#xff0c;partition 过程使用两个索引值&#xff08;i、j&#xff09;用来遍历数组&#xff0c;将 <v 的元素放在索引i所指向位置的左边&#xff0c;而将 >v 的元素放在索引j所指向位置的…

SpringBoot入门篇3 - 整合junit、整合mybatis、基于SpringBoot实现ssm整合

目录 1.整合JUnit Spring整合JUnit SpringBoot整合JUnit 测试类注解&#xff1a;SpringBootTest 作用&#xff1a;设置JUnit加载的SpringBoot启动类 2.整合mybatis ①使用spring initializr初始化项目的时候&#xff0c;添加依赖。 ②设置数据源application.yml spring:d…

ESP32应用教程(2)— SD NAND(记录飞控LOG)

文章目录 前言 1 SD NAND概述 2 代码说明 3 记录Log 前言 本文基于 ESP32 芯片作为主控制器&#xff0c;测试 SD NAND 记录飞控 Log 功能。 关于 MCU 的存储方面&#xff0c;以前基本上用内置的 E2PROM&#xff0c;或者是外置的 NOR Flash 就可以。随着物联网的兴起&#…

网络编程 day 3

1、UDP下载 #include<myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define SER_PORT 8888 //端口号&#xff0c;范围1024~49151 #define SET_IP "192.168.114.85" //本机…

C#,数值计算——高斯权重(GaussianWeights)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class GaussianWeights { private static double[] x { 0.1488743389816312, 0.4333953941292472, 0.6794095682990244, 0.8650633666889845, 0.9739065285171717 …

豆瓣《乡村振兴战略下传统村落文化旅游设计》中国建筑出版传媒许少辉八一新书

豆瓣《乡村振兴战略下传统村落文化旅游设计》中国建筑出版传媒许少辉八一新书

八一参考文献:[八一新书]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.

八一参考文献&#xff1a;&#xff3b;八一新书&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑出版传媒&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&#xff0e;

MySQL数据库——多表查询(2)-内连接、外连接

目录 内连接 查询语法 内连接演示 外连接 查询语法 外连接演示 内连接 内连接查询的是两张表交集的部分&#xff0c;返回A表和B表交集部分的数据。内连接分为两种形式&#xff1a;隐式内连接和显式内连接。 查询语法 隐式内连接 SELECT 字段列表 FROM 表1,表2 WHERE 条…

redis应用 9: Scan

在平时线上 Redis 维护工作中&#xff0c;有时候需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据&#xff0c;可能是修改它的值&#xff0c;也可能是删除 key。这里就有一个问题&#xff0c;如何从海量的 key 中找出满足特定前缀的 key 列表来&#…

python unitest自动化框架

以下举一个最简单的unitest实例&#xff0c;包含备注&#xff0c;自己拉取代码运行一次就知道原理了 import unittest import osclass TestSample(unittest.TestCase):classmethoddef setUpClass(cls) -> None:print(整个测试类只执行一次)def setUp(self) -> None:prin…