广告
返回顶部
首页 > 资讯 > 精选 >java中IO的概念及使用
  • 953
分享到

java中IO的概念及使用

2023-06-20 19:06:39 953人浏览 安东尼
摘要

本篇内容主要讲解“java中io的概念及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中IO的概念及使用”吧!目录一.认识IOIO的分类IO的方式IO读写的方式IO的特性二.文件操作

本篇内容主要讲解“java中io的概念及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中IO的概念及使用”吧!

目录
  • 一.认识IO

    • IO的分类

    • IO的方式

    • IO读写的方式

    • IO的特性

  • 二.文件操作

    • 文件的构成

    • 文件的创建

    • 文件操作的api使用

  • 三.IO流

    • 流的分类

    • 流的创建

    • 流的使用

      • <1>输入流

      • <2>输出流

      • <3>实例:文件的复制

  • 总结

    一.认识IO

    1.IO的分类

    (1)BIO:同步阻塞IO

    (2)NIO:同步非阻塞IO

    (3)aiO:异步阻塞IO

    注意: 这里主要介绍BIO

    2.IO的方式

    IO本质就是对数据的操作

    (1)网络IO

    (2)本地IO

    3.IO读写的方式

    java中IO的概念及使用

    4.IO的特性

    (1)本质上属于数据传输

    (2)涉及两个设备间的传输方向(一般,自己写java程序的时候,只关注自己程序的一方)

    (3)数据流

    java中IO的概念及使用

    (4)java进程的IO操作,对进程的影响:

    • 阻塞IO 会导致进程在运行态和阻塞态之间转变,由操作系统完成后序的IO操作

    • java进程,在内核态和用户态之间切换:性能会收到影响(下降)

    (5)IO缓冲流

    java中IO的概念及使用

    不使用缓冲流:java程序每次都从主机内存读写数据,每次都直接读取数据/发送数据。write()/read()

    使用/不使用缓冲区的区别:

    例如:循环10000次,每次write1个字节数据到本地文件

    不使用缓冲区:每次循环都是IO操作,都涉及进程状态由运行态变为阻塞态,由用户态变为内核态(10000次影响)

    使用缓冲区:每次write复制数据到缓冲区,flush才算IO操作(一定要记得)(一次影响)性能更好

    二.文件操作

    1.文件的构成

    (1)文件的头信息(Metadata)

    (2)文件的内容

    注意: java.io.File 不是对文件的内容操作,知识对文件本身或者头信息操作

    2.文件的创建

    java中IO的概念及使用

    new操作时的注意事项:

    • 既可以指定文件,也可以指定文件夹

    • 通过路径创建File:可以使用绝对路径/相对路径

    • 不管路径上是否存在这个文件/文件夹,java都可以创建得到一个File对象(但是对这个File操作时,可能会抛出异常)

    3.文件操作的API使用

    java中IO的概念及使用

    文件操作示例:遍历某个目录下,所有的子文件/子文件夹

      public static void main(String[] args) {        File file=new File("C:\\Users\\26905\\Desktop\\javaCode");        List<File> list=listDir(file);//        for (int i = 0; i <list.size() ; i++) {//            System.out.println(list.get(i));//        }        //jdk1.8集合框架使用Stream操作,可以使用lambda表达式打印        list.stream().forEach(System.out::println);    }

    方法一: 效率不高

    public static List<File> listDir(File dir){        List<File> list=new ArrayList<>();        if(dir.isFile()){            list.add(dir);//效率不太好的地方,如果是文件,返回的list只存放一个元素        }else {            File[] children=dir.listFiles();            for(File file:children){                List<File> files=listDir(file);                list.addAll(files);            }        }        return list;    }

    方法二: 效率较高

     public static List<File>  listDir2(File dir){        List<File> list=new ArrayList<>();        if(dir.isDirectory()){            //获取目录下一级的子文件和子文件夹            File[] children=dir.listFiles();            if(children!=null){                for(File file:children){                    if(file.isDirectory()){                        //如果子文件还是文件夹,递归调用                        list.addAll(listDir2(file));                    }else{                        list.add(file);                    }                }            }        }        return list;    }

    三.IO流

    1.流的分类

    java中IO的概念及使用

    java中IO的概念及使用

    java中IO的概念及使用

    2.流的创建

    java中IO的概念及使用

    3.流的使用

    java中IO的概念及使用

    <1>输入流
    import java.io.*;public class  FileInput {        public static void main(String[] args) throws IOException {        //图片文件,以二进制的方式操作        File file1=new File("C:\\Users\\26905\\Desktop\\画图笔记\\javaweb\\JSONajax简单介绍");        File file =new File("C:\\Users\\26905\\Desktop\\论文,ppt,作业,笔记,图片等\\比特草稿本.txt");        //1.文件输入字节流        FileInputStream fis=new FileInputStream(file);        //不知道文件有多 大,先定义一个一定大小的字节数组,然后不停读入,每次刷新以下就好        byte[] bytes=new byte[1024*8];        //输入流读取的固定写法:读取到一个字节/字符数组,定义read的返回值变量,while        int len=0;        //len表示读入字节的长度        //如果不等于-1,说明读取未结束        while ((len=fis.read(bytes)) !=-1){            //读取到的长度,数组可能读满,也可能没有读满            //当次读取,一般使用数组[0,len]表示读取内容            //字节数组转字符串            String str=new String(bytes,0,len);           // System.out.println(str);        }        //一般来说,输入输出流使用完,一定要关闭,关闭的关系是反向关系        //例如:创建的时候是从里往外创建,则关闭的时候就是从外往内关闭        fis.close();        //2.文件的字符输入流        FileReader fr=new FileReader(file);        char []chars=new char[1024];        int lenFr=0;        while ((lenFr=fr.read(chars))!=-1){             String strFr=new String(chars,0,lenFr);            //System.out.println(strFr);        }        fr.close();        //3.缓冲流:缓冲字节输入,缓冲字符输入        FileInputStream FIS=new FileInputStream(file);//文件字节输入流        //字节流转字符流一定要经过字节字符转换流来转换,并且还可以指定编码        InputStreamReader isr=new InputStreamReader(FIS);        //缓冲流        BufferedReader br=new BufferedReader(isr);        String str;        //读取,当字符串为空时,结束        while ((str=br.readLine()) !=null){            System.out.println(str);        }        br.close();        isr.close();        FIS.close();    }}
    <2>输出流
    import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintWriter;public class FileOutput {    public static void main(String[] args) throws IOException {                //路径上没有该文件,new File不会报错,但是在操作输出流会抛出FileNotFoundException        File file2=new File("D:\\java代码\\1.txt");        //把a-z换行输出到某个文件,需要考虑文件是否存在的问题        if(!file2.exists()){            file2.createNewFile();        }        //new FileWriter()  文件的不带缓冲的字符输出        //new FileWriter()  文件的不带缓冲的字节输出        //new BufferedWriter() 带缓冲的字符输出        //new PrintWriter()    打印输出流        //缓冲的字符输出//        BufferedWriter bw=new BufferedWriter(new FileWriter(file2));//        bw.write("\n");        //打印输出流        //PrintWriter pw=new PrintWriter(new FileWriter(file));        PrintWriter pw =new PrintWriter(new FileOutputStream(file2));        //快速打印a-z        for (int i = 'a'; i <='z' ; i++) {            pw.println((char)i);        }        pw.flush();    }}
    <3>实例:文件的复制
    import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileCopy {    public static void main(String[] args) throws IOException {        //文件复制        File input=new File("D:\\java代码\\1.txt");        File output=new File("D:\\java代码\\2.txt");        if(!output.exists()){            output.createNewFile();        }        //定义输入输出流        //输入流        FileInputStream fis=new FileInputStream(input);        // 输出流        FileOutputStream fos=new FileOutputStream(output);        byte[]bytes=new byte[1024*8];        int len;        while ((len=fis.read(bytes))!=-1){//每次从输入流读取到byte[]的内容,直接输出到某个文件,就是复制            //bytes可能没存满,需要指定长度            fos.write(bytes,0,len);        }        fis.close();        fos.close();    }}

    到此,相信大家对“java中IO的概念及使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: java中IO的概念及使用

    本文链接: https://www.lsjlt.com/news/299349.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • java中IO的概念及使用
      本篇内容主要讲解“java中IO的概念及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中IO的概念及使用”吧!目录一.认识IOIO的分类IO的方式IO读写的方式IO的特性二.文件操作...
      99+
      2023-06-20
    • Java接口interface的概念及使用
      本篇内容介绍了“Java接口interface的概念及使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在抽象类中,可以包含一个或多个抽象方...
      99+
      2023-06-03
    • Java多线程的概念及使用
      本篇内容介绍了“Java多线程的概念及使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录线程Thread类Runnable接口创建线程T...
      99+
      2023-06-20
    • Java IO中Reactor网络模型的概念是什么
      小编给大家分享一下Java IO中Reactor网络模型的概念是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、什么是 Reactor 模型:Th...
      99+
      2023-06-28
    • Java IO篇之Reactor 网络模型的概念
      目录一、什么是 Reactor 模型:二、Reactor 模型的分类:1、单 Reactor 单线程模型:1.1、处理流程:1.2、优缺点:2、单 Reactor 多线程模型:2.1...
      99+
      2022-11-13
    • AJAX概念以及使用
      AJAX (Asynchronous JavaScript and XML) 是一种用于在网页上实现异步数据交互的技术。它允许网页在...
      99+
      2023-09-23
      AJAX
    • java中@SuppressWarnings的概念是什么及怎么用
      本文小编为大家详细介绍“java中@SuppressWarnings的概念是什么及怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“java中@SuppressWarnings的概念是什么及怎么用”文章能帮助大家解决疑惑,下面跟着小编的...
      99+
      2023-06-30
    • Mycat的使用 - 01.概念, 及安装
      初识Mycat1. Mycat是什么Mycat是一款数据库中间件, 其用于分库分表, 还实现了读写分离, 故障切换等功能.2. Mycat的工作原理用一个动词来概括就是"拦截", 它拦截...
      99+
      2022-10-18
    • 在Visual Studio 中使用git及Git概念
      目录第一部分:Git是什么?一、工作与操作流程1、Git工作流程2、Git操作过程图解3 Git中常见名词解释二、 Windows上安装Git三、SVN与Git的最主要的区别?四、理...
      99+
      2022-11-12
    • laravel中的Service Container的概念及使用方法
      这篇文章主要讲解了“laravel中的Service Container的概念及使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“laravel中的Service Container的概...
      99+
      2023-06-20
    • Java内部类和异常类的概念以及使用
      目录1 内部类2 匿名类2.1 和子类有关的匿名类2.2 和接口有关的匿名类3 异常类3.1 try-catch语句3.2 自定义异常类4 断言图4.1图4.25 综合案例1 内部类...
      99+
      2022-11-12
    • JSON Schema概念及使用场景
      目录1.什么是JSON Schema2. JSON Schema的应用场景2.1 表单数据校验2.2 接口数据校验2.3 低代码 low-code1.什么是JSON Schema 相...
      99+
      2022-11-13
    • vue使用websocket概念及示例
      目录概念部分:使用示例概念部分: 1,WebSocket 是 HTML5 提供的 TCP 连接上进行全双工通讯的协议。一次握手之后,服务器和客户端可以互相主动通信,双向传输数据。 2...
      99+
      2022-11-13
    • JavaScript类型概念及使用的方法
      这篇文章主要介绍“JavaScript类型概念及使用的方法”,在日常操作中,相信很多人在JavaScript类型概念及使用的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
      99+
      2022-10-19
    • Java继承的概念是什么及怎么用
      这篇文章主要讲解了“Java继承的概念是什么及怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java继承的概念是什么及怎么用”吧!继承的概念继承就是子类继承父类的特征和行为,使得子类对...
      99+
      2023-06-30
    • vue项目中 jsconfig.json概念及使用步骤
      目录vue项目中 jsconfig.json是什么概述一、使用tsconfig.json或jsconfig.json二、使用步骤1. 配置说明2. 配置 webpack 别名3. c...
      99+
      2022-11-13
    • 【JAVA】 javaSE中的数组|数组的概念&使用
      数组的概念 什么是Java中的数组 数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。在java中,包含6个整形类型元素的数组,可以看做是酒店中连续的6个房间. 数组中存放的元素其类型相同 数组的空间是连在一起的 每个...
      99+
      2023-08-31
      java 开发语言
    • MongoDB索引概念及使用详解
      索引,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓名(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮...
      99+
      2022-10-18
    • python imutils包基本概念及使用
      1.imutils功能简介 imutils是在OPenCV基础上的一个封装,达到更为简结的调用OPenCV接口的目的,它可以轻松的实现图像的平移,旋转,缩放,骨架化等一系列的操作。 安装方法: pip instal...
      99+
      2022-06-02
      python imutils包 python imutils包使用
    • MySQL中Like概念及用法讲解
      Like中文解释为喜欢的意思,但当应用于MySQL数据库中,Like则是一种语句,用于模糊查询,主要是针对字符型字段的,在一个字符型字段列中检索包含对应子串的。本文向大家介绍MySQL中Like语句。 一、Like是...
      99+
      2022-05-30
      MySQL Like
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作