Java操作文件

本文详细介绍了Java中使用`java.nio.file`包进行文件元信息处理和路径操作,以及通过`InputStream`和`OutputStream`进行文件读写,包括字节流和字符流的区别、使用示例和注意事项。
摘要由CSDN通过智能技术生成

本文将从两个方面来阐述Java中的文件操作,可以使用java.nio.file包中的类来处理文件的元信息和路径操作以及用InputStream等类来进行文件读写操作。

文件的元信息和路径的处理

获取文件的元信息

以下是具体示范:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.io.IOException;

public class FileInfoExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        try {
            BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class);
            System.out.println("File creation time: " + attr.creationTime());
            System.out.println("File last modified time: " + attr.lastModifiedTime());
            System.out.println("Is directory? " + attr.isDirectory());
            System.out.println("Is regular file? " + attr.isRegularFile());
            System.out.println("File size: " + attr.size());
        } catch (IOException e) {
            System.err.println("Unable to read file attributes: " + e.getMessage());
        }
    }
}

路径操作

import java.nio.file.Path;
import java.nio.file.Paths;

public class PathExample {
    public static void main(String[] args) {
        Path path = Paths.get("C:/Users/Username/Documents/example.txt");

        // 获取文件名
        System.out.println("File name: " + path.getFileName());

        // 获取父目录
        System.out.println("Parent directory: " + path.getParent());

        // 获取绝对路径
        System.out.println("Absolute path: " + path.toAbsolutePath());

        // 转换为字符串
        String pathString = path.toString();
        System.out.println("Path as string: " + pathString);

        // 检查路径是否是绝对路径
        System.out.println("Is absolute path? " + path.isAbsolute());
    }
}

 文件读写

在Java中,流(Stream)是一种用于在程序之间传输数据的抽象概念。流可以是输入流(Input Stream)用于读取数据,也可以是输出流(Output Stream)用于写入数据。流可以从不同的数据源(如文件、网络连接、内存等)读取数据,也可以将数据写入到不同的目的地。

Java中的流可以分为两种主要类型:字节流和字符流。

字节流(Byte Streams):

字节流以字节为单位进行读写操作,适用于处理二进制数据或无格式的文本数据。主要的字节流类有:

  • InputStream:所有字节输入流的基类。
  • OutputStream:所有字节输出流的基类。
  • FileInputStream:用于从文件中读取数据的输入流。
  • FileOutputStream:用于向文件中写入数据的输出流。
  • ByteArrayInputStream:从字节数组中读取数据的输入流。
  • ByteArrayOutputStream:向字节数组中写入数据的输出流。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) {
        try {
            // 写入文件
            FileOutputStream outputStream = new FileOutputStream("example.txt");
            String data = "Hello, World!";
            byte[] bytes = data.getBytes();
            outputStream.write(bytes);
            outputStream.close();
            System.out.println("Data written to file successfully.");

            // 读取文件
            FileInputStream inputStream = new FileInputStream("example.txt");
            int byteData;
            while ((byteData = inputStream.read()) != -1) {
                System.out.print((char) byteData);
            }
            inputStream.close();
        } catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

字符流(Character Streams):

字符流以字符为单位进行读写操作,适用于处理文本数据。字符流会自动处理字符编码和解码,因此更适合处理文本数据,特别是涉及到国际化的情况。主要的字符流类有:

  • Reader:所有字符输入流的基类。
  • Writer:所有字符输出流的基类。
  • FileReader:用于从文件中读取字符数据的输入流。
  • FileWriter:用于向文件中写入字符数据的输出流。
  • BufferedReader:提供缓冲功能,用于高效读取字符数据。
  • BufferedWriter:提供缓冲功能,用于高效写入字符数据。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CharacterStreamExample {
    public static void main(String[] args) {
        try {
            // 写入文件
            BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"));
            writer.write("Hello, World!");
            writer.close();
            System.out.println("Data written to file successfully.");

            // 读取文件
            BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

区别:

  1. 处理数据单位:字节流以字节为单位进行读写操作,而字符流以字符为单位进行读写操作。
  2. 适用数据类型:字节流适用于处理二进制数据或无格式的文本数据,而字符流适用于处理文本数据。
  3. 处理文本编码:字符流会自动处理字符编码和解码,而字节流不会,需要手动进行处理。

在选择流类型时,需要根据所处理的数据类型以及需求来决定使用字节流还是字符流。通常情况下,如果处理的是文本数据,推荐使用字符流;如果处理的是二进制数据或无格式的文本数据,可以使用字节流。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值