欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java IO操作-按行读取txt文本文件

程序员文章站 2022-05-26 12:10:00
...

Java IO操作-按行读取txt文本文件

0.前言

同学安卓课设想做一个仿百词斩的低配版记单词APP,但是没有找到开放的单词数据接口,于是有了本文:

当然本文只是使用Java的I/O操作读取网上一个单词txt文件,后续将其存入数据库并提供接口等本文不提及。

要是想做高仿的记单词软件,那就得写爬虫获取更详细的图片,音频,例句等信息了。

百度搜到了某网站有2000常用单词的txt文件,而且还是按照一定的规律排列好的!!

2000常用单词的txt下载网站

但是里面有极个别的数据有瑕疵,文章末尾有稍微处理过的txt百度网盘下载链接

文本文件中按照一定方式存储了2000个常用单词,文件内容如下所示:

1 the [ðə, ði:] art.这,那 ad.[用于比较级;*前]
2 be [bi:,bi] aux. v.(am,is,are之原型) vi.是;在
3 of  [əv, ə, ɔv] prep.…的;由…制成的;关于;由于
4 and  [ənd, ænd] conj.和;那么;然后;而且
...
1998 soup [su:p] n.汤
1999 whistle [ˈwisəl] vi.吹口哨,鸣笛
2000 scenery  [ˈsi:nəri] n.风景,景色

1.将txt文本文件按照UTF-8格式存储

使用记事本打开txt文件,选择 文件->另存为->选择编码方式UTF-8

Java IO操作-按行读取txt文本文件

把改为UTF-8格式的txt文件放到编译器的目录下来,当然使用绝对路径操作文件也可以。

2.按行读取代码实现

罗里吧嗦半天,其实代码就下面一点点…

    private static String[] words = new String[2000];

    public static void main(String[] args) {
        int m = 0;//words数组下标
        //读取文件至 words 字符串数组中
        try {
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(
                            new FileInputStream("src/Demo/oldtxt.txt")));
            String linestr;//按行读取 将每次读取一行的结果赋值给linestr
            while ((linestr = br.readLine()) != null) {
                System.out.println(linestr);//输出每行的信息
                words[m++] = line1;//赋值给数组后,下标后移
            }
            br.close();//关闭IO
        } catch (Exception e) {
            System.out.println("文件操作失败");
            e.printStackTrace();
        }

3.运行效果

每行输出:

1 the [ðə, ði:] art.这,那 ad.[用于比较级;*前]
2 be [bi:,bi] aux. v.(am,is,are之原型) vi.是;在
3 of  [əv, ə, ɔv] prep.…的;由…制成的;关于;由于
...
1998 soup [su:p] n.汤
1999 whistle [ˈwisəl] vi.吹口哨,鸣笛
2000 scenery  [ˈsi:nəri] n.风景,景色

4.字符串提取

为了区别*** ,单词 ,英标,词性与释义,又对每一行的字符串进行了处理:

//字符串分割
        for (int i = 0; i < words.length; i++) {
            //分割 ***+单词+英标 词性+中文释义
            String[] result1 = words[i].split("]");
            result1[0] += "]";//result1[0]为***+单词+英标  result1[1]为词性+中文释义
            
            if (result1.length == 3) result1[1] = result1[1] + "]" + result1[2];
            //处理后result1[1]词性+中文释义 含[]
            
            //转义符 \\ 分割result1[0]中的 ***+单词  英标
            String[] result2 = result1[0].split("\\[");
            StringBuilder sb = new StringBuilder(result2[1]);//构造一个StringBuilder对象
            sb.insert(0, "[");
            result2[1] = sb.toString();//处理后 result2[0]***+单词, result2[1] 英标
           String[] result3 = result2[0].split(" ");//处理后result3[0]为序号result3[1]为单词

            //打印最终分割结果
            System.out.println("序号: " + result3[0]);//***
            System.out.println("单词: " + result3[1]);//单词
            System.out.println("英标: " + result2[1]);//英标
            System.out.println("词性和中文释义:" + result1[1]);//词性和中文释义
            //插入数据库 省略
        }

效果如下:

序号: 1
单词: the
英标: [ðə, ði:]
词性和中文释义: art.这,那 ad.[用于比较级;*前
序号: 2
单词: be
英标: [bi:,bi]
词性和中文释义: aux. v.(am,is,are之原型) vi.是;在
序号: 3
单词: of
英标: [əv, ə, ɔv]
词性和中文释义: prep.…的;由…制成的;关于;由于
...
序号: 1999
单词: whistle
英标: [ˈwisəl]
词性和中文释义: vi.吹口哨,鸣笛
序号: 2000
单词: scenery
英标: [ˈsi:nəri]
词性和中文释义: n.风景,景色

插入MySQL数据库后使用navicat工具查看:表中数据1000条一页,有2页数据,共计2000个单词数据都插入数据库了。

Java IO操作-按行读取txt文本文件

单词txt百度网盘下载(无提取码)

https://pan.baidu.com/s/1G6mEDsoR13gPFMkto3a2yg