一、Java读取文本文件
将郑码表放入一个zmb.txt文件中,并复制到相应的Java包文件夹下,利用Java中的I/O流读取zmb.txt文件,实现郑码表查询功能。
郑码表(zmb.txt):
读取zmb.txt的Java程序:
package zmb;
import java.io.BufferedReader; //导入IO流BufferedReader类
import java.io.FileReader; //导入IO流FileReader类,
import java.io.IOException; //导入IO流IOException类,抛出或捕获异常信息
import java.util.Scanner;
public class Txt {
public static void main(String[] args)throws IOException {
Scanner scan = new Scanner(System.in);
while(true) {
String str = scan.nextLine(); //定义字符型变量str并赋值
FileReader read = new FileReader("zmb.txt"); //顺序读取文件“dic.txt”
BufferedReader buffer = new BufferedReader(read); //将读取到的文本存入缓存,提高读的效率
String word = null; //定义一个空字符
boolean flag = false; //定义布尔型变量flag
while((word = buffer.readLine()) != null) { //读一行文本并赋值给word
String english = word.substring(word.indexOf("<")+1, word.indexOf(">")); //截取字母
String chinese = word.substring(word.lastIndexOf("<")+1,word.lastIndexOf(">")); //截取汉字
if(str.equals(english)) { //将输入字符与截取汉字作比较
System.out.println(chinese);
flag = true; //能查找到对应便将flag置1
}
}
if(str.equals("ByeBye")) { //输入ByeBye退出程序
System.exit(0);
}
if(!flag) { //查找不到对应的词
System.out.println("查不到该词");
}
}
}
}
运行结果:
二、Java读取SQLite数据库郑码表
使用SQLite Expert Professional在person.db中创建一个zmdb表,表内存放郑码数据,将person.db数据库复制到相应的Java包文件夹下,利用Java中JDBC的类和接口读取zmbd表,进行郑码查询。
person.db数据库中zmdb表:
读取zmdb.sqlite的Java程序:
package zmb;
import java.sql.*; //导入java.sql包
import java.io.BufferedReader; //导入IO流BufferedReader类
import java.io.FileReader; //导入IO流FileReader类,
import java.io.IOException; //导入IO流IOException类,抛出或捕获异常信息
import java.util.Scanner;
public class Sqlite {
static Connection con; //声明Connection对象
static Statement sql; //声明Statement对象
static ResultSet res; //声明ResultSet对象
public Connection getConnection(){ //建立返回值为Connection的方法
try { //加载数据库驱动
Class.forName("org.sqlite.JDBC");
System.out.println("数据库驱动加载成功");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
try { //通过访问数据库的URL获取数据库连接对象
con=DriverManager.getConnection("jdbc:sqlite:person.db");
System.out.println("数据库连接成功");
System.out.print('\n');
}catch(SQLException e) {
e.printStackTrace();
}
return con; //按方法要求放回一个Connection对象
}
public static void main(String[] args)throws IOException {
Scanner scan = new Scanner(System.in);
Sqlite c = new Sqlite(); //创建本类对象
con =c.getConnection(); //与数据库建立连接
while(true) {
try {
sql = con.createStatement(); //实例化Statement对象
res = sql.executeQuery("select * from zmdb");
String str = scan.nextLine(); //定义字符型变量str并赋值
boolean flag = false; //定义布尔型变量flag
while(res.next()) { //读一行文本并赋值给word
String en = res.getString("english"); //获取english字段值
String ch = res.getString("chinese"); //获取chinese字段值
String english = en.substring(en.indexOf("<")+1,en.indexOf(">")); //截取字母
String chinese = ch.substring(ch.lastIndexOf("<")+1,ch.lastIndexOf(">")); //截取汉字
if(str.equals(english)) { //将输入字符与截取字母作比较
System.out.println(chinese);
flag = true; //能查找到对应便将flag置1
}
}
if(str.equals("ByeBye")) { //输入ByeBye退出程序
System.exit(0);
}
if(!flag) { //查找不到对应的词
System.out.println("查不到该词");
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
运行结果:
三、区别
从以上测试结果可以看出,在使用相同数据的条件下,利用两种方法进行郑码查询的结果是完全相同的。
但是文本文件和数据库相比较而言,数据库优点更多,功能更强大。数据库的优势主要有以下五点:
- 实现数据共享。数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
- 减少数据的冗余度。同文件系统相比,数据库实现了数据共享,从而避免了各自建立应用文件,减少了大量的重复数据,减少了冗余度,维护了数据的一致性。
- 数据的独立性。数据的包括数据库中数据库的逻辑结构和应用程序相互独立,也包括数据物理结构的变化不影响数据的逻辑结构
- 数据实现集中控制。文件管理方式中,数据处于一种分散的状态,不同的用户或同意用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
- 数据的一致性和可维护性,已确保数据的安全性和可靠性。