文件操作-IO

目录

一、认识文件

1、文件路径

2、绝对路径和相对路径

二、File概述

2.1 文件系统操作

2.2 文件内容操作


一、认识文件

1、文件路径

        文件路径是计算机系统用于定义文件的唯一标识。文件路径可以是绝对路径和相对路径。绝对路径表示文件在文件系统中的完整位置,从根目录开始。相对路径表示文件相对于另一个文件或目录的位置。

2、绝对路径和相对路径

        绝对路径:从根目录开始,一直到达指定文件所经过的位置,表示文件在文件系统中的完整位置。

 例如:找CNN.py这个文件,采用绝对路径查找,从磁盘出发

G:/pythonProject/pytorch/cnn/cnn.py

        相对路径:可以从任意结点出发,进行路径的描述,而这种描述方式就被成为相对路径。

 例子:一样寻找CNN.py这个文件,采用相对路径查找,我们以pythonProject为基准来查找

./pytorch/cnn/cnn.py

相对路径中使用的一些特殊符号包括:

1、'.' 表示当前目录

2、‘..’表示上一级目录

注意这个符号'\'叫做路径分隔符,在Java中,反斜杠有特殊的含义,它是转义字符的前缀,所以要在字符串中表示一个反斜杠,必须写两个反斜杠。

或者我们可以使用“/”来进行代替,就不用担心转义字符了。

二、File概述

构造方法

方法说明

File(File parent, String

child)

根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname)根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径

File(String parent, String

child)

根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

方法

修饰符及返回值类型方法说明
StringgetParent()返回 File 对象的父目录文件路径
StringgetName()返回 FIle 对象的纯文件名称
StringgetPath()返回 File 对象的文件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的文件是否真实存在
booleanisDirectory()判断 File 对象代表的文件是否是一个目录
booleanisFile()判断 File 对象代表的文件是否是一个普通文件
booleancreateNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 true
booleandelete()根据 File 对象,删除该文件。成功删除后返回 true
voiddeleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行
String[]list()返回 File 对象代表的目录下的所有文件名
File[]listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示
booleanmkdir()创建 File 对象代表的目录
booleanmkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
booleanrenameTo(File   dest)进行文件改名,也可以视为我们平时的剪切、粘贴操作
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限

2.1 文件系统操作

public class IODemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("d:/cat.jpg");
        //返回 File 对象的父目录文件路径
        System.out.println(file.getParent());
        //返回 FIle 对象的纯文件名称
        System.out.println(file.getName());
        //返回 File 对象的文件路径
        System.out.println(file.getPath());
        //返回 File 对象的绝对路径
        System.out.println(file.getAbsoluteFile());
        //返回 File 对象的修饰过的绝对路径
        System.out.println(file.getCanonicalFile());
    }
}
public class IODemo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("./cat.jpg");
        //返回 File 对象的父目录文件路径
        System.out.println(file.getParent());
        //返回 FIle 对象的纯文件名称
        System.out.println(file.getName());
        //返回 File 对象的文件路径
        System.out.println(file.getPath());
        //返回 File 对象的绝对路径
        System.out.println(file.getAbsoluteFile());
        //返回 File 对象的修饰过的绝对路径
        System.out.println(file.getCanonicalFile());
    }
}
public class IODemo3 {
    public static void main(String[] args) throws IOException {
        //在相对路径中,./通常可以省略
        File file = new File("./hello word.txt");
        //判断 File 对象描述的文件是否真实存在
        System.out.println(file.exists());
        //判断 File 对象代表的文件是否是一个目录
        System.out.println(file.isDirectory());
        //判断 File 对象代表的文件是否是一个普通文件
        System.out.println(file.isFile());

        //创建文件
        file.createNewFile();
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
    }
}
public class IODemo4 {
    public static void main(String[] args) {
        File file = new File("test_dir");
        //创建 File 对象代表的目录,只能创建一级目录
        file.mkdir();
    }
}
public class IODemo5 {
    public static void main(String[] args) {
        File file = new File("test_dir/aaa/bbb");
        //创建多级目录
        file.mkdirs();
    }
}
public class IODemo6 {
    public static void main(String[] args) {
        File file = new File("test222");
        String[] results = file.list();
        System.out.println(Arrays.toString(results));
        File[] results2 = file.listFiles();
        System.out.println(Arrays.toString(results2));
    }
public class IODemo7 {
    public static void main(String[] args) {
        //重命名
        File src = new File("./test_dir");
        File dest = new File("./test222");
        src.renameTo(dest);
    }
}

2.2 文件内容操作

InputStream概述

方法

修饰符及返回值类型方法说明
intread()
读取一个字节的数据,返回 -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 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用 FileInputStream

 InputStream类是一个抽象类,不能直接进行实例化,需要借助它的子类进行实例化

构造方法
签名说明
FileInputStream(File file)
利用 File 构造文件输入流
FileInputStream(String name)
利用文件路径构造文件输入流
public class IODemo8 {
    public static void main(String[] args) throws IOException {
        //这个过程相当于C中的fopen,文件的打开操作
        //InputStream inputStream = new FileInputStream("g:/test.txt");
        //inputStream.close();

        //try with resources 带有资源的try操作,会在try代码块结束,自动执行close关闭操作
        //因为InputStream实现了一个特定的接口Closeable
        try (InputStream inputStream = new FileInputStream("g:/test.txt")){
            //读文件
            //read一次返回的是一个字节,但是此时的返回值类型是int
            while (true) {
                int b = inputStream.read();
                if(b == -1) {
                    break;
                }
                System.out.println(b);
            }
        }
    }
}
OutputStream 概述
方法
修饰符号及返回值类型方法说明
voidwrite(int b)写入要给字节的数据
voidwrite(byte[] b)
b 这个字符数组中的数据全部写入 os
intwrite(byte[] b,int off,int len)
b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len
voidclose()关闭字节流
void
flush()
重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的 一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写 入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的 数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置, 调用 flush(刷新)操作,将数据刷到设备中。
public class IODemo9 {
    public static void main(String[] args) {
        try (OutputStream outputStream = new FileOutputStream("g:/test.txt")){
            outputStream.write(97);
            outputStream.write(98);
            outputStream.write(99);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

try-with-resource语句

try-with-resource是Java7中引入的一个特性,它是为了简化在程序中使用资源(列如文件、网络连接)的管理。在Java程序中,资源的正确关闭非常重要,因为资源泄露可能导致性能问题、程序错或其它问题。try-with-resource语句确保在代码块执行完毕后自动关闭资源,无论代码执行过程中是否发生异常。

try-with-resources语句实现自动关闭资源的方式是通过在资源实现java.lang.AutoCloseablejava.io.Closeable接口的情况下,确保close()方法被调用。这两个接口都包含一个close()方法,它们的实现负责释放资源。

try (ResourceType resource = new ResourceType()) {
    // 使用资源的代码
} catch (Exception e) {
    // 处理异常的代码
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值