服务器测评网
我们一直在努力

Java如何用代码打开并读取txt文件内容?

Java操作TXT文件的基础方法

在Java开发中,处理TXT文件是一项常见任务,无论是读取配置文件、日志数据,还是写入结果信息,都需要掌握文件操作的核心方法,Java提供了多种方式操作TXT文件,本文将详细介绍如何使用标准I/O流、NIO(New I/O)以及第三方库(如Apache Commons IO)实现文件的打开、读取与写入,并针对不同场景提供最佳实践。

Java如何用代码打开并读取txt文件内容?

使用FileInputStream和FileReader读取TXT文件

Java中最基础的文件读取方式是通过字节流(FileInputStream)和字符流(FileReader),字节流适合处理二进制文件,而字符流专门用于文本文件,能自动处理字符编码问题。

字节流读取(FileInputStream)
FileInputStream以字节为单位读取文件,适合读取无特定编码的文本文件或二进制文件,基本步骤如下:

  • 创建File对象,指定文件路径;
  • 用FileInputStream打开文件流;
  • 读取字节数据并转换为字符串(如使用String(byte[], charset));
  • 关闭流(通过try-finally或try-with-resources确保释放资源)。

示例代码:

import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
public class ReadByByteStream {  
    public static void main(String[] args) {  
        File file = new File("example.txt");  
        try (FileInputStream fis = new FileInputStream(file)) {  
            byte[] buffer = new byte[1024];  
            int bytesRead;  
            StringBuilder content = new StringBuilder();  
            while ((bytesRead = fis.read(buffer)) != -1) {  
                content.append(new String(buffer, 0, bytesRead, "UTF-8"));  
            }  
            System.out.println(content.toString());  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

字符流读取(FileReader)
FileReader基于字符读取,直接支持文本文件的字符编码转换(默认为系统编码),使用时需结合BufferedReader提高读取效率:

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

使用NIO(New I/O)高效读取TXT文件

Java NIO(自Java 1.4引入)提供了更高效的文件操作方式,通过PathFiles类简化了文件读写逻辑,尤其适合大文件处理。

Files.readAllLines()读取全部内容
适合小文件,直接将文件内容读取为List<String>,每行为一个元素:

Java如何用代码打开并读取txt文件内容?

import java.io.IOException;  
import java.nio.file.Files;  
import java.nio.file.Path;  
import java.nio.file.Paths;  
import java.util.List;  
public class ReadByNIO {  
    public static void main(String[] args) {  
        Path path = Paths.get("example.txt");  
        try {  
            List<String> lines = Files.readAllLines(path, java.nio.charset.StandardCharsets.UTF_8);  
            lines.forEach(System.out::println);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

Files.lines()流式读取大文件
对于大文件,使用Files.lines()返回Stream<String>,可结合流式处理避免内存溢出:

import java.io.IOException;  
import java.nio.file.Files;  
import java.nio.file.Path;  
import java.nio.file.Paths;  
public class ReadLargeFileByNIO {  
    public static void main(String[] args) {  
        Path path = Paths.get("large_example.txt");  
        try {  
            Files.lines(path, java.nio.charset.StandardCharsets.UTF_8)  
                 .filter(line -> line.contains("keyword"))  
                 .forEach(System.out::println);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

使用BufferedWriter和FileOutputStream写入TXT文件

写入TXT文件时,同样需要区分字节流和字符流,字符流(BufferedWriter)更适合文本写入,能自动处理换行符和编码问题。

字符流写入(BufferedWriter)
BufferedWriter自带缓冲区,可减少磁盘I/O次数,提高写入效率:

import java.io.BufferedWriter;  
import java.io.FileWriter;  
import java.io.IOException;  
public class WriteByCharStream {  
    public static void main(String[] args) {  
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt", true))) {  
            writer.write("Hello, Java!");  
            writer.newLine(); // 插入换行符  
            writer.write("This is a text file.");  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

NIO写入(Files.write())
NIO的Files.write()方法支持直接写入字节数组或字符串,适合简单场景:

import java.io.IOException;  
import java.nio.file.Files;  
import java.nio.file.Path;  
import java.nio.file.Paths;  
import java.nio.charset.StandardCharsets;  
public class WriteByNIO {  
    public static void main(String[] args) {  
        Path path = Paths.get("output_nio.txt");  
        String content = "Hello, NIO!";  
        try {  
            Files.write(path, content.getBytes(StandardCharsets.UTF_8));  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

处理文件路径与编码问题

文件路径规范

  • 使用Paths.get()File.separator处理跨平台路径分隔符(Windows用\,Linux/macOS用);
  • 避免硬编码绝对路径,推荐使用相对路径或配置文件存储路径。

字符编码设置
读写时需明确指定编码(如UTF-8),避免因默认编码(如GBK)导致乱码:

Java如何用代码打开并读取txt文件内容?

  • FileReader/FileWriter默认使用系统编码,可通过InputStreamReader/OutputStreamWriter指定编码;
  • NIO的Files.readAllLines()Files.write()均支持编码参数。

异常处理与资源管理

文件操作需处理IOException,并通过try-with-resources语法自动关闭资源(避免内存泄漏):

  • 对于多个流嵌套(如BufferedReader(new FileReader(file))),try-with-resources会按逆序关闭;
  • 检查文件是否存在(Files.exists(path))及可读可写权限(Files.isReadable(path))。

第三方库简化操作(Apache Commons IO)

若需更简洁的API,可引入Apache Commons IO库(依赖commons-io):

  • 读取文件:FileUtils.readFileToString(new File("file.txt"), "UTF-8")
  • 写入文件:FileUtils.writeStringToFile(new File("file.txt"), "content", "UTF-8")
  • 复制/移动文件:FileUtils.copyFile(src, dest)

Java操作TXT文件可根据需求选择合适的方式:基础I/O流适合简单场景,NIO适合大文件和高性能需求,第三方库则能进一步简化代码,无论哪种方式,都需注意路径规范、编码设置及资源管理,确保程序健壮性,通过合理选择工具和方法,可高效实现TXT文件的读取与写入功能。

赞(0)
未经允许不得转载:好主机测评网 » Java如何用代码打开并读取txt文件内容?