Java使用bufferedreader解析txt文件

本文介绍如何在Android中使用BufferedReader从res/raw或assets文件夹读取和解析TXT文件。BufferedReader提供了高效的文本读取,通过readLine()方法逐行读取内容。当文件位于assets下时,需要通过AssetManager获取。示例代码展示了如何解析并提取TXT文件的每一行数据。

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

Android中的res文件夹是用来存储资源的,res文件夹下的raw文件夹的内容会在编译的时候原样打包,不会被编译成二进制文件,所以我们可以在raw文件夹下存放的txt文件来保存我们的一些信息,或者也可以放入assets文件夹下进行读取,两者的不同之处在于:raw文件夹下的data.txt文件通过

InputStream inputStream = getResource().openRawResource(R.raw.data);

而asserts文件夹下的data.txt需要通过assetManager获得

AssetManager am = null;
am = getAssets();
InputStrem inputStream = am.open("data.txt");

我们假设txt文件内容如下,用bufferedreader解析出其中的内容

province.txt
1 北京市
2 天津市
3 河北省
4 山西省
5 内蒙古自治区
6 辽宁省
7 吉林省
8 黑龙江省
9 上海市
10 江苏省
11 浙江省
12 安徽省
13 福建省
14 江西省
15 山东省
16 河南省
17 湖北省
18 湖南省
19 广东省
20 广西壮族自治区
21 海南省
22 重庆市
23 四川省
24 贵州省
25 云南省
26 西藏自治区
27 陕西省
28 甘肃省
29 青海省
30 宁夏回族自治区
31 新疆维吾尔自治区
32 香港特别行政区
33 澳门特别行政区
34 台湾省

该txt存于asset文件夹下,我们使用bufferedreader的readline()方法来解析。
Bufferedreader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,

 BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));

将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。
readline()方法读取一个文本行,通过换行(‘\n’)、回车(‘\r’)或回车后直接跟着换行来判断某行是否已经结束。我们需要注意一下方法的返回值,readline返回包含该行类型的字符串,不包括任何行终止符,如果已经到达流末尾,则返回null。下面直接上代码:

AssetManager am = null;
am = getAssets();
InputStream is = am.open("province.txt");

public static String getString() {
    InputStreamReader isr = null;
    try{
        isr = new InputStreamReader(is, gbk);
    } catch(UnsupportedEncodingException e1) {
        e1.printStackTrace();
    }

    BufferedReader reader = new BufferedReader(isr);
    StringBuffer sb = new StringBuffer("");
    String line;
    try {
        while((line = reader.readline()) != null) {
            sb.append(line);
            sb.append("\n");
        }
    } catch (IOException e) {
            e.printStackTrace();
        }
    return sb.toString();
}

那么province.txt文件里的内容就被解析出来了,如果想具体获得每一行里面的内容,可以使用split函数分隔提取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值