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

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

在这里插入图片描述

把改为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个单词数据都插入数据库了。

在这里插入图片描述

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

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

发布了67 篇原创文章 · 获赞 32 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42391904/article/details/102611847