• File 和 InputStream, OutputStream 的用法


    一、File

    首先我们要先了解文件路径:

    文件路径分为 绝对路径 相对路径 两种。

    绝对路径:相对于树来说就是,从根节点到叶子结点的整个路径。windows即是从各个磁盘                    下开始到目标文件的整个路径。

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

    文件的权限:读,写,执行


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

    File 概述

    属性:

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

    方法:

    修饰符及返回
    值类型
    方法签名说明
    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()判断用户是否对文件有可写权限

    在java中提供了一个File类通过这个类来完成文件系统的相关操作:

    通过以上列出的这些方法,我们可以对文件进行各种操作。

    1)列出目录中有哪些文件

    2)创建文件

    3)创建目录

    4)删除文件

    5)重命名文件

    二、InputStream, OutputStream 的用法

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

    针对文件内容的读写,Java标准库提供了一组类~
    首先按照文件的内容,分成了两个系列:
    1)字节流对象,针对二进制文件,以字节为单位进行读写

    1. 读:InputStream
    2. 写:OutputStream

    2)字符流对象,针对文本文件,是以字符为单位进行读写的

    1. 读:Reader
    2. 写:Writer

    但是实际应用总中,上述这些都是抽象类 实际使用往往都需要他们的子类:FileInputStream、FileOutputStream、FileReader、FileWrite

    2.2 InputStream 概述

    方法:

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

    FileInputStream 概述
    构造方法:

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

    例:

    1. import java.io.*;
    2. // 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "Hello" 的内容
    3. public class Main {
    4. public static void main(String[] args) throws IOException {
    5. try (InputStream is = new FileInputStream("hello.txt")) {
    6. while (true) {
    7. int b = is.read();
    8. if (b == -1) {
    9. // 代表文件已经全部读完
    10. break;
    11. }
    12. System.out.printf("%c", b);
    13. }
    14. }
    15. }
    16. }

    例二:


    2.3 OutputStream 概述

    方法:

    修饰符及返

    回值类型

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

    我们通常利用 OutputStreamWriter 进行字符写入

    1. import java.io.*;
    2. public class Main {
    3. public static void main(String[] args) throws IOException {
    4. try (OutputStream os = new FileOutputStream("output.txt")) {
    5. os.write('H');
    6. os.write('e');
    7. os.write('l');
    8. os.write('l');
    9. os.write('o');
    10. // 不要忘记 flush
    11. os.flush();
    12. }
    13. }
    14. }

    也可以利用 PrintWriter 找到我们熟悉的方法

     三、针对字符流对象进行读写操作

    使用reader进行文件的读操作。

    1. import java.io.*;
    2. public class text {
    3. public static void main(String[] args) throws IOException {
    4. Reader reader=new FileReader("D:/xxx.txt");
    5. while (true) {
    6. char[] buffer= new char[1024];
    7. int len = reader.read(buffer);
    8. if (len == -1) {
    9. break;
    10. }
    11. for (int i = 0;i < len;i++) {
    12. System.out.println(buffer[i]);
    13. }
    14. }
    15. }
    16. }

     使用write进行写操作

    1. import java.io.*;
    2. public class text {
    3. public static void main(String[] args) throws IOException {
    4. Writer writer=new FileWriter("D:/xxx.txt");
    5. writer.write("123456");
    6. writer.close();
    7. }
    8. }

  • 相关阅读:
    GGTalk 开源即时通讯系统源码剖析之:聊天消息防错漏机制
    数据匿名化的几种技术手段
    apache 模式、优化、功能 与 nginx优化、应用
    SA8255 Q+A android 登录QNX
    Win10电脑重装系统更新关闭了还自动打开怎么解决?
    华为OD机试 - 特异性双端队列(Java 2023 B卷 100分)
    读《vue3设计与实现》2- vue的diff算法核心
    opencv计算图像梯度:Sobel、Scharr、Laplacian详解
    Go Http Get 和 Post 工具函数
    计算机毕业设计Java高等数学试卷系统(源码+系统+mysql数据库+lw文档)
  • 原文地址:https://blog.csdn.net/TheDevice/article/details/125410069