我有一个包含以下内容的文件:
employee firstname lastname dob address ...
department departmentname numberofemployees departmenthead ...
.
.
.
这里每行的第一个单词是表的名称,后跟一定数量的字段。我想要的是读取每一行的第一个单词,如果说第一个单词是employee
,则读取该单词后面的字段直到行尾,并根据这些单词形成sql select
语句领域。我使用下面的代码来读取行,并查看第一个单词是否是特定匹配但我无法继续获取所需的字段并形成select
语句。我想为任意表名
StringBuilder sql = new StringBuilder();
sql.append("select ");
File file = new File("abc.txt");
Scanner scanner = new Scanner(file);
StringTokenizer st = null;
while(scanner.hasNextLine())
String lines = scanner.nextLine();
if(lines.startsWith("employees"))
//get the following fields till line ends
//functionality here which I am unable to get
注意:我希望以最佳方式实现上述目标,而不是仅使用Scanner
。如果有更好的方法可以做到这一点,那就给我提供。
答案 0 :(得分:0)
我将首先给出一个如何在不使用扫描仪的情况下有效读取文件的答案。 您可以使用BufferedReader.readLine()函数逐行读取文件。在此之后,您可以对字符串进行标记,因为每个单词都由空格分隔。您可以使用生成的字符串数组来构造您的sql。
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
// process the line.
String[] splited = line.split("\\s+");
//use splited to construct your sql.
}
br.close();
你的第二个问题是如何构造一个sql语句。现在每个单词现在都在一个字符串数组中,您可以使用stringBuilder.append()轻松构造一个sql字符串;
StringBuilder b = new StringBuilder("select ");
String tablename = splited[0];
for(int count=1 ; count < splited.length; line++)
{
//construct the remaining sql
//firstname,lastname,... from
}
//append the table name here after the loop.
答案 1 :(得分:0)
您已经使用语句
阅读了整行String lines = scanner.nextLine();
你可以简单地在空格上分割这一行来获得每个单词:
String[] tokens = lines.split("\\s+");
然后您可以使用简单的
访问令牌tokens[0]
tokens[1]
...
现在它显然取决于线条的结构。有修复结构吗?它是动态的吗?如果结构已修复,您只需使用您知道的索引访问数组元素即可。如果它是一个动态结构,你必须遍历数组,并可能做更多的检查。
其他:您应该将变量行重命名为 line ,因为它不包含多行。