java文件操作和IO流入门级教程_文件操作

举报
bug郭 发表于 2022/09/30 23:42:08 2022/09/30
【摘要】 大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流作者简介:CSDN java领域新星创作者blog.csdn.net/bug…掘金LV3用户 juejin.cn/user/bug…阿里云社区专家博主,星级博主,developer.a...

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

java文件操作

我们java提供了一个File类,在java.io包下,我们通过这个类就可以完成对文件的操作,首先这个文件对象就描述了一个文件/目录,就可以实现很多功能!

  • File文件和目录路径名的抽象表示。

在这里插入图片描述

文件系统相关的操作

文件系统相关的操作也就是我们看到的文件系统所具有的操作文件的功能,我们通过java代码也能实现!
在这里插入图片描述
这里可执行的功能,我们通过java代码也都可以实现!
例如:打开文件,删除文件,查看文件大小,日期…一系列关于文件的操作我们都可以进行!

我们java有一组文件操作的API

在这里插入图片描述
通过上述的方法就可以对文件进行管理!
我们来演示几个常用的方法:

package file;
import java.io.File;
import java.io.IOException;

public class File1 {
    public static void main1(String[] args) {
        //我们创建一个File对象,传入路径
        File file1 = new File("D:/1.txt");
        File file2 = new File("D:/test.txt");
        //判断该文件是否存在!
        System.out.println(file1.getName()+"是否存在:"+file1.exists());
        System.out.println(file2.getName()+"是否存在:"+file2.exists());
    }

    public static void main(String[] args) {
        File file = new File("D:/test.txt");
        System.out.println("是否可读:"+file.canRead());
        System.out.println("是否可写"+file.canWrite());
        System.out.println(file.isDirectory());
        System.out.println("路径:"+file.getAbsolutePath());
        System.out.println("路径:"+file.getPath());
        System.out.println("是否为目录文件:"+file.isDirectory());
        System.out.println("父目录路径:"+file.getParent());
        System.out.println("父目录文件:"+file.getParentFile());
        //在D盘下创建 4_22.txt文件!
        //只是创建了一个文件对象!在硬盘中并没有文件!
        File newFile = new File("D:/4_22.txt");
        try {
            //在硬盘中创建该文件!
            newFile.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("文件:"+newFile.getName());
        System.out.println("文件大小:"+newFile.length());
        System.out.println("删除文件:"+newFile.delete());
        System.out.println("文件是否存在:"+newFile.exists());
    }
}

我们D盘下并没有1.txt文件,所以文件不存在!
在这里插入图片描述

在这里插入图片描述
我们通过文件对象File调用createNewFile()方法,就可以真正的在我们的计算机中创建该文件!
在这里插入图片描述

//创建目录文件!
public static void main(String[] args) {
        //创建目录!
        File file = new File("./aaa");
        // 创建一级目录 mkdir 方法!
        file.mkdir();
        System.out.println(file.isDirectory());
        // 创建多级目录 mkdirs 方法!
        File file1 = new File("../aaa/bbb/ccc");
        file1.mkdirs();
        System.out.println(file1.isDirectory());
    }

在该项目的父目录路径下创建一个目录文件!
在这里插入图片描述在该项目下创建一个目录文件!
在这里插入图片描述
还有很多关于文件系统相关的操作,大家可以阅读javaAPI进行学习!!!
点击查看javaAPI

文件内容相关的操作

文件内容相关的操作,就是对文件内容进行读写操!

我们也是通过java中的API进行学习!

我们java提供了两种对文件操作读取的方案!

  • 字符流: 以字符为单位进行读取!
  • 文件流: 以字节为单位进行读取!

这里的字节流和字符流就对应了我们的二进制文件和字符文件的读取

什么是流呢?
就好比水流,我们将文件的读取抽象成了水流!

  • 输入流: 就好比你在喝水,文件读取的过程!
  • 输出流:就好比你在输出知识,文件删除的过程!
分类 抽象类读(子类) 抽象类写(子类)
字节流 InputStream(FileInputStream) OutputStream(FileOutputStream)
字符流 Reader(FileReader) Writer(FileReader)

我们通过这个表格就可以对字符流和字节流的读取进行区分!
我们会详细学习这些读取类!

字节流

字节流:就是以字节为单位,一次读写一个或多个字节!

读操作

如果我们要对一个文件进行读操作,都要进行那些步骤呢?

  • 打开文件
  • 进行读操作
  • 关闭文件
    我们通过下面案例对字节流读取进行学习!
//字节流读操作!
import java.io.*;
public class File2 {
    public static void main(String[] args) throws IOException {
        //输入操作,也就是读文件(学习读书过程就是输入)
        File file = new File("./hello.txt");
        //输入流,打开文件!
        InputStream inputStream = new FileInputStream(file);

        byte[] result = new byte[1024];
        //byte数组用来存放读取结果
        while (true){
            int len = inputStream.read(result);//保存了有效字节数!
            if(len==-1){//读取完成!
                break;
            }
            for (int i = 0; i <len; i++) {//将结果打印!
                System.out.print((char)result[i]);
            }
        }
        //关闭文件!
        inputStream.close();
    }
 }

hello.txt文件:
在这里插入图片描述

读取结果:
在这里插入图片描述

FileInputStream用于读取诸如图像数据的原始字节流!

构造方法:
在这里插入图片描述
我们这里的字节流读操作,用到了read方法!
在这里插入图片描述 下面3个read方法都是对输入流进行读操作!

  • int read()
    从该输入流读取一个字节的数据。

无参方法read(),默认读取一个字节,返回值是一个整型int!
为啥不是返回一个byte型呢?
我们知道byte范围是-128~127
而我们规定当返回值为-1就表示读取到文件末尾!
如果这样就冲突了!
所以这里的返回值是int 一个字节的范围是 0~255

  • int read(byte[] b)
    从该输入流读取最多b.length个字节的数据为字节数组。

我们通过byte数组,去接收读取的结果!
而这里的返回值是读取到的有效字节个数!
在这里插入图片描述返回-1就是读取结束!

  • int read(byte[] b, int off, int len)
    从该输入流读取最多 len`字节的数据为字节数组。

和上面的读取操作类似!
这里的b字节数组存放读取内容时,是从off数组下标开始,一次最多可以读取len长度的字节!
而返回值是读取到有效字节数!

输出流写操作
写文件也是类似的步骤!

  • 打开文件
  • 进行写操作
  • 关闭文件

我们先看一个案例:

//字节流写操作
public static void main(String[] args) throws IOException {
        //输出操作,也就是写文件(学习做题,写博客过程就是输出)
        File file = new File("./4_22.txt");
        //打开文件!
       OutputStream outputStream = new FileOutputStream(file);
       //我们将string字符串写入 file文件!
       String string = "hello world!";
       //我们要通过字节方式进行写操作!
       outputStream.write(string.getBytes());
        System.out.println("写入成功!");
        //关闭流文件!
        outputStream.close();
    }

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

FileOutputStream用于写入诸如图像数据的原始字节流。 对于写入字符流,请考虑使用FileWriter 。

我们输出流写操作,主要通过write 方法进行!

  • void write(byte[] b)
    将 b.length个字节从指定的字节数组写入此文件输出流。
  • void write(byte[] b, int off, int len)
    将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。
  • void write(int b)
    将指定的字节写入此文件输出流。

这里的writeread类似!
这里是将b数组里的内容写到file文件!

注意:
这里每次打开文件进行写操作,都会将文件内容置空,再进行写操作!如果并不存在此文件,就会创建改文件!
如果我们要从文件末尾开始写操作呢?

//追加写入操作!
public static void main(String[] args) throws IOException {
        //输出操作,也就是写文件(学习做题,写博客过程就是输出)
        File file = new File("./4_22.txt");
        //打开文件!
        //true可追加!默认不可追加!
       OutputStream outputStream = new FileOutputStream(file,true);
       //我们将string字符串写入 file文件!
       String string = "hello world!";
       //我们要通过字节方式进行写操作!
       outputStream.write(string.getBytes());
        System.out.println("追加写入成功!");
        //关闭流文件!
        outputStream.close();
    }

我们需要在创建输出流对象时通过构造方法传参设置是否可追加!
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

字符流

字符流:就是以字符为单位,一次读取一个或多个字符!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。