java中的字节流和File类

本文详细介绍了Java中的File类、FileInputStream和FileOutputStream,阐述了它们在文件操作中的作用,包括文件和目录管理、字节输入和输出,以及各自的构造方法、常用方法和注意事项。
摘要由CSDN通过智能技术生成

目录

正文:

1.File类

1.1概述

1.2常用方法

2.FileInputStream

2.1概述

2.2常用方法

3.FileOutputStream

3.1概述

3.2常用方法

总结:


正文:

1.File类

1.1概述

File类是Java中用来表示文件或目录的类,它提供了一系列方法来操作文件和目录。但File类并不是一个真正的文件对象,它只是一个用于操作文件的引用。它允许你访问和修改文件的属性,如名称、路径、权限等,以及执行一些基本的文件操作,如创建、删除、移动文件或目录

1.2常用方法

构造方法:File类提供了多种构造方法来创建File对象:

  1. File(String pathname):根据给定的路径名创建一个新File对象。
  2. File(String parent, String child):根据父路径和子路径创建一个新File对象。
  3. File(File parent, String child):根据父File对象和子路径创建一个新File对象。

exists():检查指定的文件或目录是否存在。

boolean exists = file.exists();

isFile():检查指定的路径是否指向一个文件。

boolean isFile = file.isFile();

isDirectory():检查指定的路径是否指向一个目录。

boolean isDirectory = file.isDirectory();

delete():删除文件或目录。如果文件是目录,则只有当它为空时才能被删除。

boolean deleted = file.delete();

mkdir():创建文件指示的目录。

boolean created = file.mkdir();

mkdirs():创建文件指示的目录,包括任何必需但不存在的父目录。

boolean created = file.mkdirs();

renameTo(File dest):将文件重命名为指定的目标文件。如果目标是一个目录,则原文件将被移动到该目录下。

File dest = new File("path/to/new/location"); boolean renamed = file.renameTo(dest);

listFiles():列出当前目录下的文件和子目录。

File[] files = file.listFiles();
for (File f : files) {
    System.out.println(f.getName());
}

length():返回文件的长度,如果表示的是一个目录,则返回0L。

long size = file.length();

getAbsolutePath():返回文件的绝对路径。

String path = file.getAbsolutePath();

getPath():返回文件的路径名字符串。

String path = file.getPath();

getName():返回由父目录的路径分隔符分隔的文件名。

String name = file.getName();

lastModified():返回文件的最后一次修改时间。

long time = file.lastModified();

setLastModified(long time):设置文件的最后一次修改时间。

boolean modified = file.setLastModified(System.currentTimeMillis());

setReadOnly():将文件设置为只读。

boolean readOnly = file.setReadOnly();

canRead():检查应用程序是否有权限读取此文件。

boolean canRead = file.canRead();

canWrite():检查应用程序是否有权限修改此文件。

boolean canWrite = file.canWrite();

下面给几个代码示例来加深理解

普通文件的创建,删除示例

import java.io.File;
import java.io.IOException;

public class test {
    public static void main(String[] args) throws IOException {
        //当前文件并不存在
        File file = new File("hello-world.txt");
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.createNewFile());
    }
}

这段代码需要注意的是,调用File的构造方法并不会创建出这个文件,只是创建出文件的引用即使这个文件并不存在,调用crateNewFile后才真正有了文件。

运行结果:

 

 目录创建示例:

import java.io.File;
import java.io.IOException;

public class test {
    public static void main(String[] args) throws IOException {
        //该文件并不存在
        File dir = new File("some-parent\\some-dir");
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdir());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
    }
}

mkdir() 的时候,如果中间目录不存在,则无法创建成功; mkdirs() 可以解决这个问题。

运行结果为:

 

2.FileInputStream

2.1概述

字节输入流(InputStream)是Java中用于从输入源读取字节数据的抽象类。它是所有字节输入流类的超类,提供了一系列方法来读取字节数据。FileInputStream是字节输入流的一种,用于从文件中读取字节数据。它继承自InputStream类,并提供了一系列方法用于读取文件中的数据。

2.2常用方法
  1. 构造方法:

    • FileInputStream(String name):根据指定的文件名创建FileInputStream对象。
    • FileInputStream(File file):根据指定的File对象创建FileInputStream对象。
  2. 读取数据方法:

    • int read():从输入流中读取下一个字节的数据,返回读取的字节(0-255),如果到达文件末尾则返回-1。
    • int read(byte[] b):从输入流中最多读取b.length个字节的数据到字节数组b中,返回实际读取的字节数。
    • int read(byte[] b, int off, int len):从输入流中最多读取len个字节的数据到字节数组b中,从数组的off位置开始存储,返回实际读取的字节数。
  3. 其他方法:

    • long skip(long n):跳过n个字节的数据,返回实际跳过的字节数。
    • int available():返回剩余可读取的字节数。
    • void close():关闭输入流并释放与之关联的资源。

使用FileInputStream的一般步骤如下:

  1. 创建FileInputStream对象,指定要读取的文件。
  2. 使用read()方法读取文件中的数据,可以逐字节读取或读取到字节数组中。
  3. 处理读取的数据。
  4. 关闭FileInputStream对象,释放资源。

代码示例:

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamExample {
    public static void main(String[] args) {
        // 尝试打开一个文件输入流
        try (InputStream in = new FileInputStream("example.txt")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            // 循环读取数据直到文件结束
            while ((bytesRead = in.read(buffer)) != -1) {
                // 将读取的字节转换为字符串
                String readData = new String(buffer, 0, bytesRead);
                System.out.println(readData);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • InputStreamread()方法可能会抛出IOException,因此在读取数据时需要进行异常处理。
  • 使用try-with-resources语句可以确保InputStream在使用完毕后被正确关闭,避免资源泄露。
  • 读取操作是阻塞的,如果读取到流的末尾,read()方法将返回-1。
  • available()方法返回的是一个估计值,实际可读取的字节数可能会更少。
  • FileInputStream是以字节为单位进行读取的,因此无法直接处理中文字符。当使用FileInputStream读取包含中文的文件时,需要将字节数据转换为字符数据。

3.FileOutputStream

3.1概述

Java中的输出流是用于将数据从Java程序发送到外部目的地的I/O流。OutputStream是所有字节输出流的抽象类,定义了写入字节数据的基本方法。FileOutputStream是Java中用于向文件写入数据的输出流类。它继承自OutputStream类,是字节输出流的一种。FileOutputStream可以用来写入字节数据到文件中,可以创建新文件或覆盖已有文件的内容。

3.2常用方法
  1. 构造方法:

    • FileOutputStream(String name):根据指定的文件名创建FileOutputStream对象。如果文件不存在,则会创建新文件;如果文件已存在,则会覆盖原有内容。
    • FileOutputStream(String name, boolean append):根据指定的文件名和追加标志创建FileOutputStream对象。如果append为true,则会在文件末尾追加数据;如果为false,则会覆盖原有内容。
    • FileOutputStream(File file):根据指定的File对象创建FileOutputStream对象。
  2. 常用方法:

    • void write(int b):将指定的字节写入文件。
    • void write(byte[] b):将字节数组b中的数据写入文件。
    • write(byte[] b, int off, int len):写入字节数组的一部分,从偏移量 off 开始,长度为 len。
    • void close():关闭输出流并释放资源。

示例代码:

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamExample {
    public static void main(String[] args) {
        String content = "Hello, World!";
        String fileName = "example.txt";

        try (FileOutputStream fos = new FileOutputStream(fileName)) {
            // 将字符串转换为字节并写入文件
            fos.write(content.getBytes());
            System.out.println("Data written to " + fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这段代码实现了将字符串内容"Hello, World!"写入到文件"example.txt"中的功能。通过FileOutputStream的write方法,将字符串转换为字节数组并写入文件。

注意事项

  • 使用 FileOutputStream 写入文件时,如果文件不存在,它会自动创建文件;如果文件已存在,它将覆盖文件内容,除非在构造方法中指定 append 参数为 true
  • FileOutputStream 的写入方法是阻塞的,意味着在所有数据被写入之前,调用线程将被阻塞。
  • 必须处理 IOException,因为写入操作可能会失败,例如,如果设备已满或访问被拒绝。
  • 使用 try-with-resources 语句可以确保 FileOutputStream 在使用完毕后被正确关闭,即使发生异常也是如此。
  • 如果需要写入字符数据,应使用 Writer 类(如 FileWriter),因为 FileOutputStream 只能处理字节数据。

总结:

File类用于文件和目录的管理,FileInputStream用于从文件中读取字节数据,FileOutputStream用于向文件写入字节数据。这三个类在文件操作中扮演着不同的角色,分别用于文件的元数据操作、读取数据和写入数据。在文件处理中,这三个类通常会结合使用,实现对文件的完整操作。

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值