Java IO操作-按行读取txt文本文件
程序员文章站
2022-05-26 12:10:00
...
Java IO操作-按行读取txt文本文件
0.前言
同学安卓课设想做一个仿百词斩的低配版记单词APP,但是没有找到开放的单词数据接口,于是有了本文:
当然本文只是使用Java的I/O操作读取网上一个单词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