JAVA |日常开发中操作文件详解

发布于:2024-12-06 ⋅ 阅读:(105) ⋅ 点赞:(0)

在这里插入图片描述
在这里插入图片描述

JAVA |日常开发中操作文件详解

  • 前言
  • 一、文件读取
    • 1.1 按字节读取(FileInputStream)
    • 1.2 按字符读取(FileReader)
    • 1.3 使用缓冲读取(BufferedReader)
  • 二、文件写入
    • 2.1 按字节写入(FileOutputStream)
    • 2.2 按字符写入(FileWriter)
    • 2.3 使用缓冲写入(BufferedWriter)
  • 三、文件操作(创建、删除、重命名等)
    • 3.1 文件创建(File类)
    • 3.2 文件删除(File类)
    • 3.3 文件重命名(File类)
  • 四、目录操作
    • 4.1 目录创建(File类)
    • 4.2 目录遍历(File类和递归)
  • 结束语
  • 优质源码分享

JAVA |日常开发中操作文件详解,在日常的Java开发中,操作文件是一个非常重要的技能。无论是读取配置文件、写入日志文件、处理用户上传的文件,还是进行数据的持久化存储,文件操作都是必不可少的。本文将详细介绍Java中如何操作文件,包括文件的创建、读取、写入、删除以及文件目录的操作等。

前言

        在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。

一、文件读取

1.1 按字节读取(FileInputStream)

    原理:FileInputStream用于从文件系统中的文件获取输入字节。它以字节为单位读取文件内容,适用于读取二进制文件(如图像、音频等)或对文本文件进行底层字节处理。

示例代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileReadByByte {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            FileInputStream fis = new FileInputStream(file);
            int content;
            while ((content = fis.read())!= -1) {
                System.out.print((char) content);
            }
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    在上述代码中,首先创建一个File对象来表示要读取的文件。然后通过FileInputStream构造函数将File对象传入,打开文件输入流。read方法用于读取一个字节,当读取到文件末尾时返回 - 1。通过循环读取每个字节,并将字节转换为字符(如果是文本文件)后输出。最后要关闭文件输入流,释放资源。

1.2 按字符读取(FileReader)

    原理:FileReader用于读取字符文件。它是基于字符的输入流,会将字节流转换为字符流,使用系统默认的字符编码(通常是 UTF - 8 等)进行解码。

示例代码:

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileReadByChar {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            FileReader fr = new FileReader(file);
            int content;
            while ((content = fr.read())!= -1) {
                System.out.print((char) content);
            }
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    这里的FileReader读取方式和FileInputStream类似,但是它直接读取字符,而不是字节。在读取字符文件时更加方便,不需要手动进行字节到字符的转换。

1.3 使用缓冲读取(BufferedReader)

    原理:BufferedReader提供了缓冲功能,可以提高文件读取的效率。它内部维护一个缓冲区,减少了对底层文件系统的频繁访问。通常会配合FileReader一起使用,用于读取文本文件。

示例代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileReadWithBufferedReader {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine())!= null) {
                System.out.println(line);
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    在这个示例中,首先创建FileReader对象,然后将其传递给BufferedReader构造函数。readLine方法用于读取一行文本,当读取到文件末尾时返回null。通过循环逐行读取文件内容并输出,这种方式在读取较大的文本文件时效率更高。

二、文件写入

2.1 按字节写入(FileOutputStream)

    原理:FileOutputStream用于将字节写入文件。它可以创建一个新文件或者覆盖已有文件的内容。如果文件不存在,会自动创建;如果文件已经存在,根据构造函数的参数可以选择覆盖或者追加内容。

示例代码:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileWriteByByte {
    public static void main(String[] args) {
        try {
            File file = new File("output.txt");
            FileOutputStream fos = new FileOutputStream(file);
            String content = "这是要写入文件的内容";
            byte[] bytes = content.getBytes();
            fos.write(bytes);
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    首先创建一个File对象来指定要写入的文件。然后通过FileOutputStream构造函数打开文件输出流。将字符串转换为字节数组后,使用write方法将字节数组写入文件。最后关闭文件输出流,释放资源。

2.2 按字符写入(FileWriter)

    原理:FileWriter用于将字符写入文件。它会使用系统默认的字符编码将字符转换为字节后写入文件。和FileReader类似,它是基于字符的输出流。

示例代码:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteByChar {
    public static void main(String[] args) {
        try {
            File file = new File("output.txt");
            FileWriter fw = new FileWriter(file);
            fw.write("这是要写入文件的内容");
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    这里直接使用FileWriter的write方法将字符串写入文件。在写入字符文件时比较方便,不需要手动进行字符到字节的转换。

2.3 使用缓冲写入(BufferedWriter)

    原理:BufferedWriter提供了缓冲功能,可以提高文件写入的效率。它会先将数据写入缓冲区,当缓冲区满或者手动调用flush方法时,才会将数据真正写入文件。通常会配合FileWriter一起使用。

示例代码:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteWithBufferedWriter {
    public static void main(String[] args) {
        try {
            File file = new File("output.txt");
            BufferedWriter bw = new BufferedWriter(new FileWriter(file));
            bw.write("这是要写入文件的第一行");
            bw.newLine();
            bw.write("这是要写入文件的第二行");
            bw.flush();
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    首先创建FileWriter对象,然后将其传递给BufferedWriter构造函数。使用write方法写入内容,newLine方法用于写入一个换行符。在写入完成后,通过flush方法将缓冲区的数据写入文件,最后关闭BufferedWriter。

三、文件操作(创建、删除、重命名等)

3.1 文件创建(File类)

    原理:File类用于抽象地表示文件和目录路径。可以使用它来创建文件,不过在某些操作系统中,创建文件可能还需要相应的文件系统权限。

示例代码:

import java.io.File;
import java.io.IOException;
public class FileCreate {
    public static void main(String[] args) {
        File file = new File("newFile.txt");
        try {
            if (file.createNewFile()) {
                System.out.println("文件创建成功");
            } else {
                System.out.println("文件已存在");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    首先创建一个File对象,指定要创建的文件名称。然后使用createNewFile方法创建文件,如果文件不存在,则创建成功并返回true;如果文件已经存在,则返回false。

3.2 文件删除(File类)

    原理:File类的delete方法用于删除文件。如果文件不存在,delete方法会返回false;如果文件存在并且删除成功,会返回true。不过要注意,有些文件可能由于权限问题或者被其他程序占用而无法删除。

示例代码:

import java.io.File;
public class FileDelete {
    public static void main(String[] args) {
        File file = new File("fileToDelete.txt");
        if (file.delete()) {
            System.out.println("文件删除成功");
        } else {
            System.out.println("文件删除失败");
        }
    }
}

3.3 文件重命名(File类)

    原理:File类的renameTo方法用于将文件重命名为指定的文件名。这个方法会将文件移动到新的文件名位置,如果重命名成功,会返回true;否则返回false。

示例代码:

import java.io.File;
public class FileRename {
    public static void main(String[] args) {
        File oldFile = new File("oldFileName.txt");
        File newFile = new File("newFileName.txt");
        if (oldFile.renameTo(newFile)) {
            System.out.println("文件重命名成功");
        } else {
            System.out.println("文件重命名失败");
        }
    }
}

四、目录操作

4.1 目录创建(File类)

    原理:使用File类创建目录。可以创建单级目录或者多级目录,创建多级目录时需要使用mkdirs方法。

示例代码:

import java.io.File;
public class DirectoryCreate {
    public static void main(String[] args) {
        File directory = new File("newDirectory");
        if (directory.mkdir()) {
            System.out.println("目录创建成功");
        } else {
            System.out.println("目录创建失败");
        }
    }
}

    这里创建一个单级目录。如果要创建多级目录,例如newDirectory/subDirectory,可以使用File dir = new File(“newDirectory/subDirectory”); dir.mkdirs();。

4.2 目录遍历(File类和递归)

    原理:通过File类的listFiles方法可以获取目录下的所有文件和子目录。结合递归算法,可以遍历整个目录树。

示例代码:

import java.io.File;
public class DirectoryTraversal {
    public static void traverseDirectory(File directory) {
        File[] files = directory.listFiles();
        if (files!= null) {
            for (File file : files) {
                if (file.isFile()) {
                    System.out.println("文件: " + file.getName());
                } else if (file.isDirectory()) {
                    System.out.println("目录: " + file.getName());
                    traverseDirectory(file);
                }
            }
        }
    }
    public static void main(String[] args) {
        File rootDirectory = new File(".");
        traverseDirectory(rootDirectory);
    }
}

    在traverseDirectory方法中,首先获取目录下的所有文件和子目录。对于每个元素,如果是文件,则输出文件名;如果是目录,则输出目录名并递归调用traverseDirectory方法来遍历子目录。在main方法中,以当前目录(File rootDirectory = new File(".");)为例进行目录遍历。

结束语

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


--------------- 业精于勤,荒于嬉 ---------------
 

请添加图片描述

--------------- 行成于思,毁于随 ---------------

优质源码分享


在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署(有自己的阿里云);
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有)https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/144187492(防止抄袭,原文地址不可删除)


网站公告

今日签到

点亮在社区的每一天
去签到