文件操作及IO

目录

一、文件的分类

二、文件路径

三、File 常见方法

        1、get 相关方法使用

2、文件的创建和删除

3、遍历目录下所有文件

四、文件读写


一、文件的分类

站在程序员的角度,文件通常可以分为两类:

  1. 文本文件:以字符形式存储
  2. 二进制文件:以字节方式存储

有的朋友可能有疑惑:字符不也是由字节构成的吗?

是的,文本文件中的字符的确是由一个个相邻的字符构成的,但这些相邻的字节之间是存在关系的,而二进制文件里面存储的字节毫无关系!!

二、文件路径

文件路径通常可以分为两类:

  1. 绝对路径(绝对路径 (absolute path) : 以一个盘符开头的路径,就是绝对路径)
  2. 相对路径(相对路径 (relative path) 一般是以.或者..开头的路径.一般会有一个基准,去找对应的路径)

三、File 常见方法

Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述

File 属性:

修饰符及类型 属性 说明
static String pathSeparator 依赖于系统的路径分隔符,String 类型的表示
static char pathSeparator 依赖于系统的路径分隔符,char 类型的表示

构造方法:

签名 说明
File(File parent, Stringchild) 根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname) 根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径
File(String parent, Stringchild) 根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

 方法:

方法签名 说明
String getParent() 返回 File 对象的父目录文件路径
String getName() 返回 FIle 对象的纯文件名称
String getPath() 返回 File 对象的文件路径
String getAbsolutePath() 返回 File 对象的绝对路径
String getCanonicalPath() 返回 File 对象的修饰过的绝对路径
boolean exists() 判断 File 对象描述的文件是否真实存在
boolean isDirectory() 判断 File 对象代表的文件是否是一个目录
boolean isFile() 判断 File 对象代表的文件是否是一个普通文件
boolean createNewFile() 根据 File 对象,自动创建一个空文件。成功创建后返回 true
boolean delete() 根据 File 对象,删除该文件。成功删除后返回 true
void deleteOnExit() 根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
String[] list() 返回 File 对象代表的目录下的所有文件名
File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象表示
boolean mkdir() 创建 File 对象代表的目录
boolean mkdirs() 创建 File 对象代表的目录,如果必要,会创建中间目录
boolean renameTo(File dest) 进行文件改名,也可以视为我们平时的剪切、粘贴操作
boolean canRead() 判断用户是否对文件有可读权限
boolean canWrite() 判断用户是否对文件有可写权限

小练习:

1、get 相关方法使用

package com;

import java.io.File;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        // file 里边的路径是可以不存在的哦~~~
        System.out.println(file.getName());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getPath());
        System.out.println(file.getCanonicalPath());
    }
}

运行截图:

文件操作及IO_第1张图片 

2、文件的创建和删除

import java.io.File;
import java.io.IOException;

public class FileDemo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        System.out.println("创建前:");
        System.out.println("文件是否真实存在: "+file.exists());
        System.out.println("文件是否是一个目录: "+file.isDirectory());
        System.out.println("文件是否是一个普通文件: "+file.isFile());
        System.out.println("创建后:");
        System.out.println("文件创建是否成功: "+file.createNewFile());
        System.out.println("文件是否真实存在: "+file.exists());
        System.out.println("文件是否是一个目录: "+file.isDirectory());
        System.out.println("文件是否是一个普通文件: "+file.isFile());
        System.out.println("再次创建:");
        System.out.println("文件创建是否成功: "+file.createNewFile());
    }
}

 文件操作及IO_第2张图片

3、遍历目录下所有文件

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class FileDemo9 {
    // 这里的result 用来记录每一个目录里面的路径
    public static List result = new ArrayList<>();

    public static void getAllFiles(String basePath){
        File file = new File(basePath);
        if(file.isFile()){
            //如果是一个文件就之间add
            result.add(basePath);
            return ;
        }else if (file.isDirectory()){
            //这里是一个目录 就需要递归
            String[] files = file.list();
            for (String f : files){
                getAllFiles(basePath+"/"+f);
            }
        }else{
            //非普通文件,暂不考虑
        }
    }

    public static void main(String[] args) {
        getAllFiles(".");
        for (String s : result){
            System.out.println(s);
        }
    }
}

四、文件读写

 对文件的读写根据文件的类型大体可以分为两种:

  • 字节流:针对二进制文件,以字节为单位进行读写
  • 字符流:针对文本文件,以字符为单位进行读写

InputStream 读取:

方法 说明
int read() 读取一个字节的数据,返回 -1 代表已经完全读完了
int read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
int read(byte[] b,int off, int len) 最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
void close() 关闭字节流

InputStream是一个抽象类.可用使用FileInputStream来实现. 

FileInputStream 的构造方法

构造方法 说明
FileInputStream(File file) 利用 File 构造文件输入流
FileInputStream(String name) 利用文件路径构造文件输入流

OutputStream 写入:

方法 说明
void write(int b) 写入要给字节的数据
void write(byte[] b) 将 b 这个字符数组中的数据全部写入 os 中
int write(byte[] b, int off,int len) 将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
void close() 关闭字节流
void flush() 重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用

 OutputStream 也是一个抽象类,可以使用FileOutputStream来实现

你可能感兴趣的:(java,开发语言)