Java 核心编程系列-文件与输入输出流(IO)(基础篇)

    技术2022-07-15  65

    文件与输入输出流

    一、概述

    导入包:java.io 超类:java.io.File —— 文件和目录路径名的抽象表示形式 Java会把计算机中的文件和文件夹(目录)封装成File类,该类包括文件属性(路径、名称、大小创建时间等等)和行为(读、写、改、删等等)。

    二、绝对路径、相对路径

    绝对路径:有根目录,从盘符开始的完整路径相对路径:不带根目录,相对项目位置的简化路径

    注意:不同的操作系统文件和目录的格式存在差异。

    文件名称分隔符路径分隔符Windows\;Linus/:

    所以,基于这一点,为了兼容性更好,不能把路径写死:

    "c:"+File.separator+"abc"+File.separator+"a.txt"

    三、File类

    1、构造方法:

    (注意:调用构造函数创建File对象并非创建文件和目录,只是指明路径,无论该路径下是否存在文件或者目录,都不影响File对象的创建。 )

    public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

    2、常用方法(基本文件操作):

    获取路径 public String getAbsolutePath() :返回此File的绝对路径字符串。public String getPath() :将此File转换为路径字符串。public String getParent():返回父目录。public String getName() :返回由此File表示的文件或目录的名称。 判断属性 public boolean exists() :此File表示的文件或目录是否实际存在。public boolean isDirectory() :此File表示的是否为目录。public boolean isFile() :此File表示的是否为文件。 设置属性 boolean setReadable(true/false) :设置可读性。boolean setWritable(true/false) :设置可写性。boolean setReadOnly():设置为只读。 文件目录操作: public long length() :返回由此File表示的文件的长度。public long lastModified() :返回此File表示的文件或目录最新修改时间。

    (遍历获取)

    public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

    (创建)

    public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。public boolean mkdir() :创建由此File表示的目录。public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。(直接用这个方便)

    (删除)

    public boolean delete() :删除由此File表示的文件或目录。

    以上API需要注意的:

    length(),表示文件的长度。但是File对象表示目录,则返回值未指定。当且仅当具有该名称的文件尚不存在时,创建一个新的空文件,否则因重复而报错。delete方法,前提是文件或目录存在,如果此File表示目录,则目录必须为空才能删除。调用listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历。

    四、输入输出流

    “流” 是数据处理的一种抽象,是指一组有序的数据序列

    根据数据处理基本单位的不同,分为字节流、字符流。

    根据数据传输方向的不同,分为输入流、输出流。(站在内存即应用程序的角度来区分输入输出流,站在程序员即内存即应用程序的角度来区分读取写入。)

    1、字节流

    (抽象)超类:InputStream、OutputStream

    文件字节流:FileInputStream、FileOutputStream

    方法: read()、read(byte[] b):一次读取一个字节 available():返回从流中读取的字节数 write()、write(byte[] b):写入

    2、字符流

    (抽象)超类:Reader、Writer

    文件字符流:FileReader、FileWriter

    方法: read()、read(char[] b):一次读取一个字符 write()、write(char[] b):写入

    3、缓冲流

    超类:BufferedInputStream、BufferedOutputStream和BufferedWriter、BufferedReader作用:利用其缓冲区可以加快读写速度

    4、转换流

    》》两者互相转换:InputStreamReader、OutputStreamWriter

    经典例子:

    获取socket连接上的字节型输入流 InputStream socketByteIN = s.getInputStream(); 将字节输入流-->字符输入流 InputStreamReader irCharIN = new InputStreamReader(socketByteIN); 将字符输入流-->字符缓冲流 BufferedReader in = new BufferedReader(irCharIN); //以上简写三流转换: BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    Processed: 0.010, SQL: 10