File 类的用法和 InputStream, OutputStream 的用法

File概述💨

我们首先看看file类的常见属性,构造方法和方法。

属性

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

构造方法

签名说明
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()
判断用户是否对文件有可写权限

代码示例

示例1

普通文件的创建、删除。

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
的现象
        File file = new File("hello-world.txt");// 要求该文件不存在,才能看到相同
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
        
     }
}

示例2

观察目录的创建

import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
    File dir = new File("some-dir"); // 要求该目录不存在,才能看到相同的现象             
    System.out.println(dir.isDirectory()); 
    System.out.println(dir.isFile());
    System.out.println(dir.mkdir()); 
    System.out.println(dir.isDirectory()); 
    System.out.println(dir.isFile());
    }
}

文件内容的读写 —— 数据流💨

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 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本 可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用 FileInputStream.

FileInputStream 概述

构造方法

签名

说明

FileInputStream(File file)

利用 File 构造文件输入流

FileInputStream(String name)

利用文件路径构造文件输入流

代码示例

示例1

将文件完全读完的两种方式。相比较而言,后一种的 IO 次数更少,性能更好。

import java.io.*;
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "Hello" 的内容 
public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = new FileInputStream("hello.txt")) {
            while (true) {
                int b = is.read();
                if (b == -1) {
                // 代表文件已经全部读完
                    break; 
                }
                System.out.printf("%c", b);
            }
        }
    }
}
import java.io.*;
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "Hello" 的内容
public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = new FileInputStream("hello.txt")) {
            byte[] buf = new byte[1024];
            int len;
            while (true) {
                len = is.read(buf);
                if (len == -1) {
                    // 代表文件已经全部读完
                    break; 
                }
                for (int i = 0; i < len; i++) {
                    System.out.printf("%c", buf[i]);
                } 
            }
        }
    }
}

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 为 了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的 一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写 入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的 数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置, 调用 flush(刷新)操作,将数据刷到设备中。

说明

OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中, 所以使用 FileOutputStream

代码示例

示例1

利用 OutputStreamWriter 进行字符写入

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
            os.write('H');
            os.write('e'); 
            os.write('l'); 
            os.write('l'); 
            os.write('o'); 
            // 不要忘记 flush 
            os.flush();
         }
    }
}

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿拉蕾wjh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值