文件IO之 File 类和 InputStream, OutputStream 的用法(一)

简介: 文件IO之 File 类和 InputStream, OutputStream 的用法

如何对文件操作


文件是存储在硬盘上的, 直接通过代码操作硬盘不方便, 就在内存中创建一个对应的对象, 操作这个对象就可以间接的影响到硬盘中的文件了.


Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意,有 File 对象,并不代表真实存在该文件。


File 类


构造方法


5e5800aef3344e868863d72385c039d4.png


普通方法


fced97a66799445589364a53a9816ccd.png


代码1(文件获取):


public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("./hello.txt");
        System.out.println(file.getParent());  // 获取File对象父目录文件路径
        System.out.println(file.getName());    //获取File对象名称
        System.out.println(file.getPath());    //获取File对象文件路径
        System.out.println(file.getAbsolutePath());  //获取File对象绝对路径
        System.out.println(file.getCanonicalPath()); //获取File对象修饰过的绝对路径
    }
}


9dcaa133f4c6415580676aed264fee03.png

代码2(文件的删除创建):


public class Test {
    public static void main(String[] args) throws IOException, InterruptedException {
        File file = new File("hello.txt");
        System.out.println("1 :" + file.exists());     //判断File对象代表文件是否存在
        System.out.println("2 :" + file.isDirectory()); //判断File对象代表文件是否是目录
        System.out.println("3 :" + file.isFile());    //判断File对象代表文件是否是一个普通文件
        System.out.println("4 :" + file.createNewFile());  //创建File对象代表文件, 成功返回true
        System.out.println("5 :" + file.createNewFile());
        System.out.println("6 :" + file.exists());
        System.out.println("7 :" + file.isDirectory());
        System.out.println("8 :" + file.isFile());
        Thread.sleep(5000);   //睡眠5s 便于观察文件是否存在
        System.out.println("9 :" + file.delete());  //删除该文件, 成功返回true
        System.out.println("10 :" + file.exists());
    }
}

ab8e9da105404db99308792a364c0aa1.png


在在睡眠 5s 时, 我们观察到, 文件确实被创建出来了.


b40e570908764eebb368feddde3eb5f8.png

代码3(另一种文件删除:deleteOnExit) :


public class Test {
    public static void main(String[] args) throws IOException, InterruptedException {
        File file = new File("hello.next");
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        file.deleteOnExit();
        System.out.println(file.exists());
        Thread.sleep(5000);
    }
}

23c45556c492454ca688a09055e4428b.png

观察文件目录发现, hello.txt 文件在程序运行结束时被删除了.


代码4(目录创建) :


public class Test {
    public static void main(String[] args) {
        File file = new File("目录");
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.mkdir());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
    }
}


d0c83bb92e8b41718dcd9c8713011d28.png

成功创建目录 :

0af9dc20a8bf4cf19569071adfcd3fa7.png


创建子目录


public class Test {
    public static void main(String[] args) {
        File file = new File("a/b");  //要求两个目录不存在
        System.out.println(file.mkdir());  //没有中间目录不能创建
        System.out.println(file.mkdirs());  //没有中间目录 就会创建中间目录
    }
}

6a115a89c14c45128db8d9120cef6a50.png


b5c3c610e772490990f1c67767eadc6d.png



代码4(文件重命名) :

public class Test {
    public static void main(String[] args) throws IOException {
        File file1 = new File("hello.txt");  //该文件得存在
        file1.createNewFile();
        File file2 = new File("world.txt");  //要求该文件不存在
        System.out.println(file1.renameTo(file2));
        System.out.println(file1.exists());
        System.out.println(file2.exists());
    }
}

22e7576cae4b42399799df962304ee0f.png

a541bfd7bbed4eb29419bbad53778776.png

可以理解为 hello.txt 的数据换了个名字继续存在.


相关文章
|
5月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
251 2
|
9月前
|
XML JSON Go
Go语言中的文件与IO:JSON、CSV、XML处理
本文介绍了 Go 语言中对 JSON、CSV 和 XML 三种常见数据格式的处理方法。通过标准库 `encoding/json`、`encoding/csv` 和 `encoding/xml`,可以实现结构体与数据格式之间的序列化与反序列化。JSON 适合 Web API 和前后端通信,因其清晰易读;CSV 适用于表格数据和轻量级交换;XML 则支持复杂嵌套结构,常用于配置文件和 SOAP 协议。文中提供代码示例,涵盖基本使用、嵌套结构处理及实战建议,帮助开发者高效操作这些格式。
|
9月前
|
Unix Go
Go语言中的文件与IO:文件读写
本文介绍了 Go 语言中文件操作的基础方法,涵盖打开与关闭文件、读取和写入文件内容、追加写入以及复制文件等功能。通过 `os`、`bufio` 和 `io` 等标准库包,提供了高效且灵活的实现方式,如使用 `os.ReadFile` 读取整个文件、`bufio.Scanner` 逐行读取、`os.Create` 创建文件以及 `io.Copy` 复制文件内容。同时强调了错误处理的重要性,例如使用 `defer` 确保文件关闭,并推荐注意文件权限设置(如 UNIX 系统中的 `0644`)。最后以表格形式总结了常用操作及其推荐方法,便于快速查阅和应用。
|
9月前
|
Go 数据处理
Go语言中的文件与IO:bufio 和 scanner
Go 标准库中的 `bufio` 包高效读写功能,适用于文件和数据处理。`bufio.Reader` 支持按行或分隔符读取,`bufio.Writer` 提供高性能写入并需调用 `Flush()` 确保数据写入。`bufio.Scanner` 是处理文本文件(如日志、配置)的利器,可按行、单词等分割内容。本文详解其用法,并给出实践建议,如统计字符数、模拟 `tail -f` 和词频分析等。
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
577 34
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
821 12
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
651 2
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。