zoukankan      html  css  js  c++  java
  • JAVA IO操作

    Java IO操作

    I/O操作

    文件和目录的抽象表示

    1568432936396
    File类在java.io.File中

    file类与操作系统无关

    1568433108243
    路径分隔符:windows中就是分号(;),Linux是冒号(:)

    默认名称分隔符:也称之为文件名称分隔符,windows是反斜杠(),Linux是正斜杠(/)

    这里使用这些标识符,就是为了实现跨平台性!所以应该积极使用这些标识符而不是直接将这些符号写死:

    1568433306216
    绝对路径和相对路径:

    ? 1568433395838
    划重点:相对路径是相对于当前项目的根目录的!

    注意事项:

    1. 路径不区分大小写
    2. 路径中使用一个转义字符+一个普通字符的方式来表示一个普通字符

    File类中的构造方法

    1568433622957
    划重点:

    1. 路径可以是文件,也可以是文件夹
    2. 这里只是把路径封装为File对象,并不获取路径的内容,所以不需要考虑路径的真假情况,路径本身不存在也没事

    File f1=new File(pathname);

    File类有四种创建方法:

    1568433827317
    第三种将父路径和子路径拆开的好处:

    1568433882219
    第一种相比第三种的区别:

    父路径是File类型,可以使用File的方法对路径进行一些操作,再用路径创建新的对象

    File类中的常用方法

    1568434445553
    第一种方法和第二种方法的区别:

    第二种方法只会返回当初创建对象时传入的路径,是相对就传相对,是绝对就传绝对,而第一种只传递绝对路径

    length()返回的不是文件名的长度,而是文件的长度,也就是文件的大小,它的单位是字节(注意,文件夹是没有大小概念的,所以不能用来获取文件夹的大小,要是获取了也是0)

    如果给出的路径是不存在的,调用length()并不会报错,只会返回0

    1568434797945
    1568434983253
    1568435009619

    文件过滤器

    在File类中有两个和ListFiles重载的方法,方法的参数就是过滤器

    1568443358895
    1568443464894
    java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器

    ? 作用:用来过滤文件

    第一个方法的参数:File pathname:其实就是使用Listfiles方法遍历目录,得到的每一个文件对象

    1568443555888
    ? 作用:用于过滤文件名称

    ? 参数:File dir:构造方法中传递的被遍历的目录 String name:遍历目睹获得的每一个文件的名称

    注意,两个过滤器接口没有实现类,需要自己写实现类,重写过滤方法accept,在方法中自己定义过滤的规则具体流程如下:

    1. 创建过滤器的实现类,重写过滤方法,定义过滤规则
    2. 1568443819827
      可以优化为匿名内部类:

    1568444039612

    字节输出流OutputStream

    是所有字节输出流的父类,定义了一些共性的成员方法

    1568450694367
    1568450736468
    这些已知子类中对应着输出的不同场景

    FilterOutputStream:带过滤器的输出流

    ObjectOutputStream:写对象

    重点学习FileOutputStream:

    1568450973318
    写入数据的原理:

    java程序-》JVM-》OS-》调用OS中写数据的方法-》写入文件

    写入步骤:

    1. 创建FileOutputStream对象,构造方法中传递写入数据的目的地
    2. 调用write方法写入
    3. 释放资源(流的使用会占用内存)

    一次写入多个字节的方法

    1568452478956
    追加写:

    1568452601888

    InputStream

    常用方法:

    1568452708547
    FileInputStream:文件字节输入流

    1568452752579
    读取多个字节:

    1568452863173
    返回的int是读取的有效字符数

    字节数组转换为字符串

    1568452938436

    字符流

    对于像中文符号这样的需要使用多个字节来表示的符号,使用字节读入会造成显示上的问题,所以这里我们采用字符流,以字符而不是字节为单位进行。字符流对于文本的处理能力要比字节流好。

    实际使用上,对字符的操作还是比对字节的操作要多的

    1568453969410
    Reader是一个父类,其有和字节流完全类似的子类和用法,这里就不再赘述了

    Flush和Close方法的区别

    1568454346678
    write是写入到内存缓存区中,只有调用Flush或者Close才会写入到硬盘

    其他写出数据的方法

    1568454473999

    常用API

    Random,ArrayList,Scanner

    API简介

    下面这张图的表达有问题,“Java API文档是程序员的字典”而不是API本身

    1568444166582
    1568444208774

    Scanner

    Scanner可以做到键盘输入数据

    import java.util.Scanner

    包的导入要在package之后,类的定义之前

    Scanner sc=new Scanner(System.in);System.in是从键盘输入

    1. 获取键盘输入的一个int数字: int num=sc.nextInt();
    2. 获取键盘输入的一个字符串: String str=sc.next();

    ArrayList

    和C++STL中的vector类似


  • 相关阅读:
    Spring MVC
    Hibernate的状态
    设计模式
    Git在Eclipse中的使用
    深入理解Node.js基于事件驱动的回调
    nodejs核心技术
    webpack使用
    vue各种实例集合
    vue之component
    axios详解
  • 原文地址:https://www.cnblogs.com/jiading/p/11705854.html
Copyright © 2011-2022 走看看