文件操作和IO

文件操作——IO

(一)java中操作文件

1.File对象

构造File对象:

构造的过程中,可以使用绝对路径或者相对路径进行初始化,这个路径指向的文件可以是真实存在的,也可以是不存在的。

File类中的常见属性:

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

2.File类方法

File类的构造方法:

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

比如我需要再java中表示D盘下的test.txt文件可以这样写:

 public static void main(String[] args) throws IOException {
        File file = new File("D:/test.txt");
    }

这样无论这个文件是否存在File类都可以表示。

File类的方法:

返回值类型方法签名说明
StringgetParent()返回 File 对象的父目录文件路径
StringgetName()返回 FIle 对象的纯文件名称
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetPath()返回 File 对象的文件路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的文件是否真实存在
booleanisDirectory()判断 File 对象所描述的文件是否是一个目录
booleanisFile()判断 File 对象所描述的文件是否我是一个普通文件
booleandelete()根据 File 对象, 删除该文件
booleancreateNewFile()根据 File 对象, 自动创建一个空文件
voiddeleteOnExist()根据 File 对象, 删除该文件, 删除动作会在 JVM 运行结束时进行
String[]list()返回 File 对象所代表目录下的所有文件名
File[]listFiles()返回 File 对象所代表的目录下所有的文件, 以 File 对象表示
booleanmkdir()创建 File 对象所代表的目录
booleanmkdirs()创建 File 对象所代表的多级目录
booleanrenameTo(File dest)进行文件的重命名
booleancanRead()判断该用户是否对文件有可读权限
booleancanWrite()判断该用户是否对文件有可写权限

3.代码实例

实例1:get方法系列的特点和差异

public class IODemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        System.out.println(file.getName());
        System.out.println(file.getParent());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }
}

在这里插入图片描述

这里不要求文件test.txt存在

实例2:普通文件的创建

public class IODemo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");
        file.createNewFile();
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
    }
}

在这里插入图片描述
在这里插入图片描述
实例3:普通文件的删除

public class IODemo3 {
    public static void main(String[] args) {
        File file = new File("./test.txt");
        System.out.println(file.exists());
        file.delete();
        System.out.println(file.exists());
    }
}

在这里插入图片描述

这里可以看到两个日志一个是删除前查看文件是否存在,结果为true一个删除后查看文件是否存在结果为false。

实例4:目录创建

public class IoDemo4 {
    public static void main(String[] args) {
        File dir = new File("./test/aaa/b");
        System.out.println(dir.isDirectory());
        dir.mkdirs();
        System.out.println(dir.isDirectory());
    }
}

在这里插入图片描述
在这里插入图片描述
实例5:文件重命名

public class IODemo5 {
    public static void main(String[] args) {
        File file = new File("./test");
        File dest = new File("./testBBB");
        System.out.println(file.isDirectory());
        System.out.println(dest.isDirectory());
        file.renameTo(dest);
        System.out.println(file.isDirectory());
        System.out.println(dest.isDirectory());
    }
}

在这里插入图片描述

在这里插入图片描述

可以看到第一目录test被修改为乐testBBB,并且日志结果返回来修改前后相应的目录是否存在。

(二)文件内容的读写 —— 数据流

1.FileInputStream (读取文件)

方法说明
read()读取一个字节的数据返回-1证明读取完毕
read(byte[] b)最多读取b.length字节数据到b中,返回实际读到的数量,-1代表读完
close()关闭字节流

例如读取“d:/test.txt”文件:
在这里插入图片描述

 public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("d:/test.txt");
        while (true){
            byte[] buffer = new byte[1024];
            int len = inputStream.read(buffer);
            System.out.println("len:" + len);
            if(len == -1){
                break;
            }
            for (int i = 0; i < len; i++) {
                System.out.printf("%x\n",buffer[i]);
            }
        }
        inputStream.close();
    }

在这里插入图片描述

结果为读取字节的ASCII值

InputStream inputStream = new FileInputStream("d:/test.txt");
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);

实际上完成读取的操作仅仅只有这三行代码

2.FileOutputStream (字符写入)

方法说明
write(int b)写入数据
write(byte[] b)将b这个字符数组中的数据全部写入os中
close()关闭字节流

例如要对“d:/test.txt”文件写入:
写入前文件内容:
在这里插入图片描述

 public static void main(String[] args) throws IOException {
        try(OutputStream outputStream = new FileOutputStream("d:/test.txt")) {
            outputStream.write(97);
            outputStream.write(98);
            outputStream.write(99);
            outputStream.write(100);
            outputStream.flush();
        }
    }

写入后文档内容:
在这里插入图片描述
写入和写出最后都不能忘记调用close()方法进行关闭,因为程序在创建出流对象的时候会在进程PCB的文件描述符表中申请一个空间,里面记录着文件打开的信息,关闭文件会释放着个空间,如果不手动去释放着块空间,在长时间程序运行对很多文件进行操作的情况下,文件描述符表很快就会被占满,之后这个进程将不能再打开文件,以至于抛出异常,所以在文件使用完毕后要记得使用close()方法进行关闭释放空间。

然后在FileOutputStream的代码实例中我们并没有使用close()方法,这是因为我们将打开文件的操作放入了try()中,这样虽然没有写close()方法,当时在try()执行结束的时候会自动执行close()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值