JAVA IO流详解

2023-11-07

File

File是java.io包下的类,代表与平台无关的文件和目录

  • File能创建,删除,重命名文件和目录,也能检测,访问文件和目录本身
  • File不能访问文件中的内容,如果要访问内容,则需要使用输入,输出流

在这里插入图片描述

过滤文件

  1. File类的listFiles()方法可以接受一个参数,用于在列举文件时对其进行过滤;
  2. File类会依次将文件传给过滤器,当过滤器返回true时,File类才会列举该文件;

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

 public static void main(String[] args) {
        File dir = new File("D:/DXL/DXL5/A");

        File[] files=dir.listFiles();

        files=dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                System.out.println(pathname+"     sdad");
                return true;
            }
        });
        System.out.println("========================================================================================================");
        files=dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                System.out.println(dir + "   " + name);
             if (name.endsWith("f")){
                 return false;
             }
             return true;
            }
        });

        System.out.println(Arrays.toString(files));

    }

在这里插入图片描述

遍历文件

public static void main(String[] args) {
      printFile("C:\\eSupport",0);
    }


    public  static void printFile(String filePath,int depth){

        File file = new File(filePath);

        if (!file.exists()){
            throw new IllegalArgumentException("文件不存在");
        }

//      打印空格
        for (int i = 0; i < depth; i++) {
            System.out.print(" ");
            
        }

//        打印名字
        if (file.isFile()){
            System.out.print(" - ");
        }
        System.out.println(file.getName());

//        目录递归  isDirectory判断是否是目录
        if (file.isDirectory()){
            File[] files = file.listFiles();
            for (File f:files){
                printFile(f.getPath(),depth+1 );
            }
        }

    }

IO流简介

  1. IO(Input Output)用于实现对数据的输入与输出操作;
  2. Java把不同的输入/输出源(键盘、文件、网络等)抽象表述为流(Stream);
  3. 流是从起源到接收的有序数据,程序采用同一方式可以访问不同的输入/输出源在这里插入图片描述

流的分类

  • 输入流和输出流(方向)
  • 输入流只能读取数据,不能写入数据;
  • 输出流只能写入数据,不能读取数据;
    字节流和字符流(数据)
  • 字节流操作的数据单元是 8位的字节;
  • 字符流操作的数据单元是16位的字符;
    节点流和处理流(功能)
  • 节点流可以直接从/向一个特定的IO设备(磁盘、网络等)读/写数据,也称为低级流;
  • 处理流是对节点流的连接或封装,用于简化数据读/写功能或提高效率,也称为高级流

在这里插入图片描述

流的 模型

在这里插入图片描述

抽象基类

输入流

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

输出流

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

注意事项

  1. 上述四个类都是抽象类,不能直接实例化;
  2. 上述四个类都定义了close()方法,你需要在使用流之后调用此方法将其关闭;
  3. 无论是否发生异常,使用流后都要尝试关闭它,所以通常在finally中关闭流;
  4. 上述四个类都实现了Closeable接口,因此可以在try()中创建流,以便于自动关闭。

文件流

在这里插入图片描述

 public static void main(String[] args) {


//      copyFile("D:\\javaidea\\IntelliJ IDEA 2021.1.3\\icons.db","D:\\javaidea\\");
         copyTxtFile("D:\\DXL\\dfsf.txt","D:\\DXL\\dfsf副本.txt");
    }

    public static void copyFile(String srcFilePath,String destFile){

        try (
                FileInputStream fis=new FileInputStream(srcFilePath);
              FileOutputStream fos=  new FileOutputStream(destFile)
        ){
            byte[] bytes = new byte[128];
            int len=0;//实际获取的字节数
            while ((len=fis.read(bytes, 0,bytes.length))>0){

                fos.write(bytes,0,len);

            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

//    拷贝文本文件
    public static void copyTxtFile(String srcFilePath,String destFile){

        try (

            FileReader  fr =new FileReader(srcFilePath);
            FileWriter  fw= new FileWriter(destFile);
                ){
            char[] chars=new char[128];
            int len=0;//获取实际读取的字符数
            while ((len=fr.read(chars,0, chars.length))>0){
                System.out.println(String.valueOf(chars, 0, len));
                fw.write(chars,0,len);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

缓冲流

在这里插入图片描述

  1. 这四个类都是处理流,需要关联对应的节点流,即实例化时需传入节点流实例;
  2. 缓冲流内部维护了一个缓冲区,通过与缓冲区的交互,减少与设备的交互次数;
  3. 使用缓冲输入流时,它每次会读取一批数据将缓冲区填满,每次调用读取方法并不是直接
    从设备取值,而是从缓冲区取值,当缓冲区为空时,它会再一次读取数据,将缓冲区填满;
  4. 使用缓冲输出流时,每次调用写入方法并不是直接写入到设备,而是写入缓冲区,当缓冲
    区填满时它会自动刷入设备,也可以调用flush()方法触发刷入(关闭流时会自动调它)。
 public static void main(String[] args) {

        long l = System.currentTimeMillis();
        copyFile("D:\\下载集中地\\BaiduNetdisk_7.4.3.3.exe","D:\\下载集中地\\BaiduNetdisk副本_7.4.3.3.exe");

        long end = System.currentTimeMillis();
        System.out.println("用时:;" + (end - l));

    }

    public static void copyFile(String scrFile,String desFile){

        try (
               
                BufferedInputStream bis= new BufferedInputStream(new FileInputStream(scrFile));
                 BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(desFile));
//                FileInputStream  bis  = new FileInputStream(scrFile);
//                FileOutputStream bos  = new FileOutputStream(desFile);

                ){
            byte[] bytes = new byte[128];
            int len=0;
            while ((len=bis.read(bytes,0,bytes.length))>0){
                bos.write(bytes,0,len);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

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

第一个是缓冲流复制时间 第二个是文件流复制时间

转换流

在这里插入图片描述

  1. 这2个类都是处理流,需要关联对应的节点流,即实例化时需传入节点流实例;
  2. Scanner所提供的输入方法,其底层是采用InputStreamReader类实现的;
  3. PrintStream所提供的输出方法,其底层是采用OutputStreamWriter实现的。
 public static void main(String[] args) {

        try (
                InputStreamReader r=new InputStreamReader(System.in);
                BufferedReader  br=new BufferedReader(r);
                ){
            String line=null;
            while ((line=br.readLine())!=null){
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

打印流

在这里插入图片描述

  1. 这2个类都是处理流,需要关联对应的节点流,即实例化时需传入节点流实例;
  2. System.out就是PrintStream类型;
  3. PrintStream、PrintWriter的功能和方法基本相同,后者的设计更合理

    public static void main(String[] args) {
      testPrintStream();
    }


    public static void testPrintStream() {

    try (
            FileOutputStream fos=new FileOutputStream("D:\\DXL\\dfsf.txt");
            PrintStream ps=new PrintStream(fos);

            ){
        ps.println("我爱");
        ps.print("java");

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    }

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA IO流详解 的相关文章

  • 初始向量(IV)的CTR模式使用

    据我所知 CTR 模式不使用初始向量 它只需要一个计数器 用给定的密钥对其进行加密 然后将结果与明文进行异或以获得密文 其他分组密码模式 例如 CBC 在进行加密之前 会使用初始向量对明文进行异或 所以这是我的问题 我在 Java 中有以下
  • Java中如何动态添加charsequence[]中的数据?

    初始化的一种方法charsequence is charsequence item abc def 但我不想以这种方式初始化它 有人可以建议其他方式吗 比如我们初始化的方式string arrays 首先 修复变量声明 charsequen
  • 使用 TreeMap 和 Comparator 按值对 HashMap 进行排序

    我使用以下代码创建哈希图 然后使用树形图和比较器对哈希图中的值进行排序 然而 输出结果却出乎意料 所以任何关于我做错了什么的想法都会有帮助 Code public static void main String args System ou
  • Java如何删除设置了IMMUTABLE位的文件

    正在开发一个 Java 8 项目 我从外部源复制文件 在这些源之一中 文件设置了不可变位标志 In OSX这是这样设置的 sudo chflags schg path to file In Linux chattr i path to fi
  • 如何在谷歌地图中使用latlng字符串数组绘制多边形

    在我的应用程序中 我有包含 imagview 的 recyclerview 并且该 imageview 通过使用我存储在 sqlite 中的坐标包含静态地图图像 当我单击该图像时 我将该字符串数组格式的坐标传递给其他地图活动 然后使用该字符
  • 在 Java 8 中将对象追加到列表并返回结果?

    有没有一种方法可以将对象附加到列表并以功能性非命令方式在一行中返回结果 如果原始列表也不应该被改变 你会怎么做 Java 8 是允许的 我已经知道如何将两个列表连接到一行中 Source https stackoverflow com a
  • 使用 google-api-java-client 的 2 足 OAuth

    有谁知道如何将 2 legged OAuth 与 google api java client 一起使用 我正在尝试访问 Google Apps 配置 API 以获取特定域的用户列表 以下不起作用 HttpTransport transpo
  • IntSummaryStatistics的summaryStatistics方法

    为什么空 IntStream 上的 summaryStatistics 方法返回整数的最大和最小值作为流中存在的最大和最小 int 值 IntStream intStream IntStream of IntSummaryStatistic
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • a4j:commandLink 重新渲染后停止工作

    我创建了这个测试用例来隔离我的问题 一旦轮询执行 ajax 更新 a4j commandLink 操作就不会执行 如果我们在轮询重新渲染之前关闭 modalPanel 则会执行它 有什么建议吗 提前致谢 测试 xhtml
  • “未找到 JAVA 路径。请检查 JAVA 是否已安装。”初始化 RSelenium 时出错

    我正在尝试启动一个 RSelenium 会话到 webscrape 但是 当运行此代码时 driver lt rsDriver browser c chrome chromever 76 0 3809 126 port 4444L 我收到此
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • 如何找到 Oracle 数据库的 URL?

    如何找到 Oracle 数据库的 URL 和端口 Example jdbc oracle thin host port dbName 用户名 密码 是否有我可以查看的 SQL 命令或日志 配置文件 对于甲骨文来说 有一个tnsnames o
  • 读取不失真的灰度 PNG 图像文件

    我需要读取和处理大量的灰度 PNG 文件 我的意思是 如果它们在 Photoshop 或 GIMP 中打开 则图像模式为灰度 而不是具有灰度值的 RGB 图像 ImageIO 似乎没有实现这一点 它似乎将所有图像文件视为 sRGB 这会破坏
  • iText7 将 SVG 添加到 PdfDocument 中以及可能出现的问题

    关于问题的答案 如何使用 iText7 将 SVG 添加到 PDF 这是一个链接点击这里 https stackoverflow com questions 50059456 how to add an svg to a pdf using
  • 找出该月第一个星期日/星期一等的日期

    我想在java中检测每个月第一周 第二周的第一个星期日 星期一的日期 我怎样才能实现它 我已经检查了 java 中的 Calendar 类和 Date 类 但无法找到解决方案 所以请帮助我解决这个问题 Calendar calendar C
  • 有没有办法处理Java堆空间异常[重复]

    这个问题在这里已经有答案了 我正在寻找将文件输入流转换为大文件 文件大小为 100MB 并且抛出 java lang OutOfMemoryError Java Heap space import java io FileInputStre
  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • Spring Boot中服务接口类的用途

    我的问题是关于接口类的使用 我对 Spring 还很陌生 所以如果这过于简单 请耐心等待 首先 当您可以在 BoxService 中声明 find all 时 这里拥有 IBoxService 接口有什么意义 其次 在控制器中如何使用IBo
  • Jackson 的 ObjectMapper 和 SQL 中的 RowMapper

    我们正在使用对象映射器 当将 ObjectMapper 与 RowMapper 一起使用时 是否应该在每个 mapRow 内部 如下所示 声明它 还是在 mapRow 外部声明为类公共成员 我认为根据本文 它应该作为公共类成员在外部 我应该

随机推荐

  • 普通树转二叉树:左儿子右兄弟表示法

    这两天在吃力地学DP的优化 被虐地不行不行的 搞个小插曲 左儿子右兄弟 顾名思义 是一棵转换后的树 它是一棵二叉树 一个节点的左子树表示的是原树中这个节点的子节点 一个节点的右子树表示的是这个节点在原树中的兄弟 父节点相同的点 这么表示有什
  • 【机器学习】Reinforcement Learning-强化学习学习笔记

    一 强化学习的定义 1 1 什么是强化学习 首先 强化学习并不是某一种特定的算法 而是一类算法的统称 解决序列决策问题的一类方法 通过寻求最优策略 获取最大回报 强化学习就是智能体从环境到动作映射的学习 以使回报信号 激励信号 函数值最大
  • 在LINUX上安装Memcache服务器(实践记录)

    下载并安装Memcache服务器端 服务器端主要是安装memcache服务器端 下载 http www danga com memcached dist memcached 1 2 2 tar gz memcached 1 4 5 tar
  • Redux原理分析

    Redux原理分析 Redux是什么 很多人认为redux必须要结合React使用 其实并不是的 Redux 是 JavaScript 状态容器 只要你的项目中使用到了状态 并且状态十分复杂 那么你就可以使用Redux管理你的项目状态 它可
  • 如何卸载华为手机内置app

    作者 朱金灿 来源 clever101的专栏 为什么大多数人学不会人工智能编程 gt gt gt 最近自用的华为手机的存储空间快满了 想把手机内置的app清理一下 然后到网上搜索解决方案 大致弄明白了步骤 主要是通过华为手机内置APP卸载工
  • windows下cmd快速生成大文件命令

    fsutil file createnew 文件名 文件大小
  • C/C++中的头文件加上头文件中的ifndef/define/endif有什么作用?

    参考博客 https blog csdn net summer00072 article details 80883514 主要的作用就是防止头文件重复包含了 这个作用在Qt中是已经给你做好了 qt新建一个文件的时候就会直接给你建立完毕
  • Android结合ButterKnife创建自己的BaseActivity(兼容6.0)

    在Android开发中 我们需要创建一个BaseActivity来方便对APP中所有的activity进行统一操作 今天我们就来说说如何结合ButterKnife来打造一个加强版的BaseActivity 不熟悉ButterKnife的朋友
  • 类的默认成员函数【拷贝(复制)构造函数】

    拷贝 复制 构造函数 用一个已经存在的对象初始化另一个新对象时 编译器会自动调用拷贝构造函数 1 拷贝构造函数是构造函数的一种重载形式 2 拷贝构造函数的参数 单个形参 传递const类类型的引用 1 如果传值引用 会引发无穷调用 2 如果
  • Python输出\u编码将其转换成中文

    爬取了下小猪短租的网站出租房信息但是输出的时候是这种 百度了下 python2 7在window上的编码确实是个坑 解决如下 如果是个字典的话要先将其转成字符串 导入json库 然后 这么输出 json dumps data decode
  • python类型提示

    一 类型提示的好处 1 增强代码的可读性 2 IDE中代码提示 3 静态代码检查 第三方库 二 IDE中代码中提示功能 1 为参数与返回数据指定类型 def greeting name str gt str gt str 返回值也可以 re
  • 希波克拉底誓言——一个医生的职业道德准则

    本文转载至 http cd qq com a 20071207 000170 htm 希波克拉底誓言是2400年以前写的 大约和我们的孔子同一个时代 这个誓言总共只有五百多个字 按中文计 但是产生的影响却非常深远 至今 几乎所有学医学的学生
  • 深度解密 5 类大数据架构及实现

    前几天读到白发川的一篇文章 对比解读五种主流大数据架构的数据分析能力 文中详细总结了各类数据架构的应用以及原理 作为一名在数据仓库耕耘多年的技术人员 对于其中的一些技术细节还是破解兴趣的 所以随着作者的思路写下了我对主流数据架构的理解 如无
  • 对于Linux中errno使用的问题

    最近在网络编程使用的过程中 发现errno会经常使用 因此决定在此做个留用 以备以后使用 虽然errno是非线程安全的 但是可以通过几种机制保证其安全 最近在使用的过程中获得了errno 程序无法执行 也不知道如何解决问题 因此 理解每一个
  • springboot如何进行混淆加密(proguard+xjar)

    一 背景 项目组核心代码模块部署于用户服务器上 另外一家公司获取了该服务器的root密码 常规的通过配置环境变量来进行数据库加密处理的方式 直接甩jar包到服务器的方式 极有可能导致数据泄露和代码泄露 二 代码混淆 1 常用的混淆工具 软件
  • NoSQL与关系数据库的比较

    表中给出了NoSQL和关系数据库 Relational DataBase Management System RDBMS 的简单比较 对比指标包括数据库原理 数据规模 数据库模式 查询效率 一致性 数据完整性 扩展性 可用性 标准化 技术支
  • 一站集齐近半年大模型前沿动态

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 大 模 型 LLM 近半年大模型一路狂飙 席卷全球 已经成为了AI领域的研究热点与必争之地 AI TIME大模型系列活动定期特邀来自全球知名高校与研究机构的青年学者 分享最新大模
  • 第十个项目遥感处理cgal+pcl+gdal+opencv+qt+osg(2018年1月开始)

    这个项目是正式入职的第一个公司项目 学的东西很多 每天都在学习新东西 只是和以前的积累有点偏 严格地讲 也不叫偏 以前纯粹是瞎胡搞 API的调用而已 现在业务层次是图像处理 没有硕士学位的人不好弄 提高了门槛 也算是一种保护 免得吃青春饭
  • MongoDB进阶指南!

    想必大家很多人都在业务开发的时候遇到这样的痛点 最近在用数据库存储数据的时候发现这么一个坑 例如从消息队列中监听消息的时候 原来的做法是将监听的消息json数据存储在数据库 以便好对异常消息数据进行追溯 消息内容使用text类型存储 起初因
  • JAVA IO流详解

    File File是java io包下的类 代表与平台无关的文件和目录 File能创建 删除 重命名文件和目录 也能检测 访问文件和目录本身 File不能访问文件中的内容 如果要访问内容 则需要使用输入 输出流 过滤文件 File类的lis