java读取txt文件及乱码处理

目录

一、java如何读取txt文件

方式1、文件流处理(FileInputStream)

方式2、JDK11及以上版本

方式3、JDK8

[jdk8 方式4、jdk8JDK8jdk8 一次性全部读取](#jdk8 方式4、jdk8JDK8jdk8 一次性全部读取)

二、java读取文件的乱码问题

场景1、使用maven导入类库:Cpdetector

场景2、二进制读取方式


一、java如何读取txt文件

方式1、文件流处理(FileInputStream)

FileInputStream有两种构造方式

  • 采用文件路径构造
  • 以文件对象构造

示例代码:

java 复制代码
import java.io*;
public class MainTest{
    public static void main(String args[]){
        String filePath = "D:/test/a.txt";
        FileInputStream fis = new FileInputStream(filePath);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        String strTmp = "";
        while((strTmp = br.readLine())!=null){
            System.out.println(strTmp);
        }
        br.close();
    }
}
方式2、JDK11及以上版本
java 复制代码
Path path = Paths.get("D:/test/a.txt");
String data = Files.readString(path);
System.out.println(data);
方式3、JDK8
java 复制代码
Path path = Paths.get("D:/aa.txt");
List<String>  lines = Files.readLines(path);
jdk8 方式4、jdk8JDK8jdk8 一次性全部读取
java 复制代码
Path path = Paths.get("D:/aa.txt");
byte[] data = Files.readAllBytes(path);
String result = new String(data, "utf-8");

二、java读取文件的乱码问题

场景1、使用maven导入类库:Cpdetector
java 复制代码
CodepageDetectorProxy codepageDetectorProxy = CodepageDetectorProxy.getInstance();
codepageDetectorProxy.add(JChardetFacade.getInstance());
// Charset就是字符集,可以用来解码byte数组为字符串
Charset charset = codepageDetectorProxy.detectCodepage(file.toURI().toURL());
场景2、二进制读取方式

2.1 使用DataInputStream

java 复制代码
DataInputStream din = new DataInputStream(new FileInputStream(file));
byte[] data = new byte[1024];
while(din.read(data) > 0) {
    // 处理数据
}
din.close(); 

2.2 使用RandomAccessFile

java 复制代码
RandomAccessFile randomFile = new RandomAccessFile(file, "r");
byte[] data = new byte[1024];
while(randomFile.read(data) > 0) {
    // 处理数据
}
randomFile.close();

2.3 DataInputStream 与 RandomAccessFile 的区别

RandomAccessFile可以通过移动文件指针改变读取的位置,可以按照几种基本类型直接读取数据,可以跳过一定的字节。

DataInputStream是输入流。

相关推荐
ZouZou老师几秒前
Linux Qt出现xcb异常问题解决办法
开发语言·qt
qq_12498707532 分钟前
基于Spring Boot的“味蕾探索”线上零食购物平台的设计与实现(源码+论文+部署+安装)
java·前端·数据库·spring boot·后端·小程序
知乎的哥廷根数学学派3 分钟前
基于多尺度特征提取和注意力自适应动态路由胶囊网络的工业轴承故障诊断算法(Pytorch)
开发语言·网络·人工智能·pytorch·python·算法·机器学习
lsx2024065 分钟前
JavaScript Date(日期)
开发语言
爬山算法6 分钟前
Hibernate(38)如何在Hibernate中配置乐观锁?
android·java·hibernate
奔跑的web.7 分钟前
TypeScript 全面详解:对象类型的语法规则
开发语言·前端·javascript·typescript·vue
江上月51310 分钟前
JMeter中级指南:从数据提取到断言校验全流程掌握
java·前端·数据库
晨旭缘11 分钟前
零基础后端入门:JDK21 + PostgreSQL+Java项目
java·数据库·postgresql
BullSmall12 分钟前
SpringBoot 项目日志规范(企业级标准 + 最佳实践)
java·spring boot·spring
better_liang12 分钟前
每日Java面试场景题知识点之-线程池
java·线程池·并发编程·juc·企业级开发