[文件操作] File 类的用法和 InputStream, OutputStream 的用法

本文介绍了Java中对文件系统的操作,包括文件的创建、删除、重命名,以及文本文件和二进制文件的概念。详细讲解了如何使用File类进行基础操作,通过InputStream和OutputStream进行文件读写,并演示了PrintWriter的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

能吃是不是件幸福的事呢


前言

从这章开始,我们就开始学文件操作相关的知识了~


1. 文件的相关定义

1.文件的定义可以从狭义和广义两个方面解释.
狭义: 指硬盘上的文件和目录(目录指文件夹)
广义: 在操作系统中,把很多的硬件设备和软件资源都抽象成文件,按文件的方式统一管理.
2.盘符
如D盘,C盘,用d: c: 表示,不区分大小写.
3.路径
绝对路径,就是电脑中文件的位置.如下图,双击箭头处,能获取到文件的绝对路径.
F:\Java初阶练习\LinkedList
在这里插入图片描述
相对路径: 以当下目录为基准,以" . “或者” … “开头,例如当下目录为F: ,则可以用”./Java初阶练习"代表Java初阶练习.

2. 文件类型

文件类型分为文本文件和二进制文件.
文本文件存的是文本,以字符串的方式存储.
二进制文件可以存任何类型的数据.
如何判断一个文件是文本文件还是二进制文件呢?
一个文件右键,以记事本方式打开,如果显示是乱码,则是二进制文件.

3. Java对文件系统的操作

3.1 对文件的基础操作

1.文件对象的创建
我们使用File类的构造方法,给要创建的文件指定一个路径.如下代码,f0就是在相应路径下的文件。

File f0 = new File("d:/file1.txt");
获取文件名	       System.out.println(f.getName());
获取文件路径        System.out.println(f.getPath());
获取文件绝对路径    System.out.println(f.getAbsolutePath());
                  System.out.println(f.getCanonicalPath());
是否存在           System.out.println(f.exists());
是否是文件         System.out.println(f.isFile());

执行结果如下(file不存在)
在这里插入图片描述
2.创建目录
//创建目录

        File dir = new File("./test");
        dir.mkdir();

//创建多级目录

		File dir2 = new File("./test/aaa");
        dir2.mkdirs();

3.文件重命名
如下代码,给f1重命名,将dest的名字付给f1.

		File f1 = new File("./test/aaa");
        File dest = new File("./test/AAA");
        f1.renameTo(dest);

在这里插入图片描述

3.2 读文件

读出来的字节用b接收,如果b为-1,则说明文件读取完毕.
用read()方法进行读取,这个方法有三种形式,无参,传数组,传数组的固定部分.
下面的代码是无参的形式

	InputStream in0 = new FileInputStream("d:/file1.txt");
        while(true){
            int b = in0.read();
            if(b == -1){  //b == -1,代表文件读取完毕
                break;
            }
            System.out.printf("%x\n",(byte)b);
        }
        in0.close();

执行结果如下,因为以字节形式显示,所以对应ASCII码表,这四个代表字符a,b,c,d.
在这里插入图片描述
在这里插入图片描述

以数组形式读取,把文件读到数组里.
注意,循环里的len显示的是数组真实被填写的长度.

		InputStream in1 = new FileInputStream("d:/file1.txt");
        int len = 0;
        while(true){
            //一次读取1024个字节
            byte[] b = new byte[1024];
            len = in1.read(b);
            if(len == -1){
                break;
            }
            for(int i = 0; i < len; i++){
                System.out.printf("%x\n", b[i]);
            }
        }
        in1.close();

//读取部分元素,0表示从数组0下标开始读,1表示读取1个元素.

		InputStream in1 = new FileInputStream("d:/file1.txt");
        int len = 0;
        //一次读取1024个字节
        byte[] b = new byte[1024];
        len = in1.read(b, 0, 1);
        for (int i = 0; i < len; i++) {
            System.out.printf("%x\n", b[i]);
        }

        in1.close();

3.3 写文件

写文件用write方法写,同样有三种形式,直接写,以数组形式写,把数组的部分元素写进文件.
1.直接把元素写进去,可以直接用字符表示,也可以用ASCII码表示.
注意flush()方法,我们写文件时,电脑不会写一个存一个,是先把元素存到缓冲区,直到缓冲区满了或者到了指定时刻,才会真正把缓冲区里的数据一次性转到硬盘上,提高效率.
注意,我们这里不用写close(),自己关闭文件了,把代码放进try()里,文件写完会自动关闭.

		try (OutputStream o = new FileOutputStream("d:/file1.txt")) {
            o.write('h');
            o.write(98);
            o.write(99);
            o.write(100);
            o.flush();
        }

以数组形式写入

		try(OutputStream o1 = new FileOutputStream("F:/Write.txt")) {
		//直接把全部数组元素写入
           byte[] b = new byte[]{(byte) 'h', (byte) 'a', (byte) 'b'};
           o1.write(b);
           //从0开始写,写1个元素
           o1.write(b,0,1);
           //把字符串转成byte数组写入
           String s = "i am warm";
           byte[] b1 = s.getBytes();
           o1.write(b1);
           String s1 = "我是坏人";
           byte[] b2 = s1.getBytes("utf-8");
           o1.write(b2);
           o1.flush();
       }

2.用printWriter写入.
用printWriter可以用print之类的方法写文件.

    try( OutputStream o2 = new FileOutputStream("f:/PrintWrite.txt")) {
          OutputStreamWriter osw = new OutputStreamWriter(o2, "utf-8");
          PrintWriter pw = new PrintWriter(osw);
          pw.print("mind");
          pw.println("bb");
          pw.printf("%d %s", 1, "hh");
          pw.flush();
      }

执行结果如下
在这里插入图片描述
本文完


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值