Java阅读格式化文本文件并将其分开

时间:2014-08-14 19:08:42

标签: java file-io text-files fileinputstream

我正在尝试理解类的文件I / O,我理解基础知识,但是我无法理解如何管理输入文件中的输出,输入文件的格式如下:

  

BusinessContact:名字=尼古拉斯; lastName的= Tsantalis   SocialNetworkAccount:socialNetworkType = SKYPE;帐户ID = tsantalis

基本上我的联系人(BusinessContact扩展自来自)对象具有firstName,lastName和middleName的属性, 它还有对象属性,如SocialNetworkAccount等......

我不需要解释我的对象是如何格式化的,那些已经完成的所有我想要了解的是我的file.txt如何输入到我的程序中以将我的联系人设置为BusinessContact以及设置相应的名字和姓氏,

由于

编辑:我特意告诉我使用拆分方法,但我也被告知(1)创建一个通用的方法来解析属性,返回一个映射,其中键对应于attributeNames,值为attributeValues(以这种方式可以重用相同的代码)

2 个答案:

答案 0 :(得分:2)

您可以将Scanner类与不同的分隔符一起使用,如下所示:

Scanner in = new Scanner(/**source*/);

in.useDelimiter(":");

String firstName, lastName;

String firstWord = in.next();

Scanner nameScanner = new Scanner(in.nextLine());

nameScanner.useDelimiter(";");

firstName = getName(new Scanner(nameScanner.next()));

lastName = getName(new Scanner(nameScanner.next()));


private String getName(Scanner nameScanner){
    nameScanner.useDelimiter("=");

    String nameTitle = nameScanner.next();

    return nameScanner.next();
}

通过这种方式,您可以按如下方式阅读以下部分的文本:

BusinessContact firstName=Nikolaos;lastName=Tsantalis
firstName=Nikolaos lastName=Tsantalis
firstName = Nikolaos; lastName = Tsantalis

我希望这是有道理的。

注意:此代码仅读取第一行。如果你想阅读第二个我猜它不难修改它。如果你也想要第二行,或者如果你有任何问题,请告诉我,我会更新答案。

编辑:我刚注意到每一行的格式都是一样的,所以基本上你可以为每一行使用相同的代码。也许是在一个循环中:

Scanner input = new Scanner(/**source*/);

while(input.hasNextLine()){
    Scanner in = new Scanner(input.nextLine());
    ...
    ....
    //The above code
}

String.split()方法:

Scanner in = new Scanner(System.in);

String[] first = in.nextLine().split(":");
String[] second = first[1].split(";");
String[] thirdA = second[0].split("=");
String[] thirdB = second[1].split("=");

for(int i = 0; i < thirdA.length; i++){
    System.out.println(thirdA[i]);
    System.out.println(thirdB[i]);
}

对于第一行,上面的代码将打印出来:

firstName
lastName
Nikolaos
Tsantalis

希望这有帮助。

答案 1 :(得分:0)

您可以使用正则表达式,但您可能会对String.split感觉更舒服:在“:”上拆分并获取标签,将第二部分拆分为“;”获取属性,然后将每个属性拆分为“=”以获取密钥和值。