使用Java从文件中读取混合类型的数据

时间:2016-05-04 21:54:59

标签: java file input

我对这段代码感到有些困惑。我的文件file name.txt包含以下数据:

BD1               // user ID
Bob Dillon        // user full name
user@email.com    // user Email
10.0              // amount of cash
100               // No.of Points

我无法在同一个字符串中读取用户的名字和姓氏。这是我的代码:

Scanner input_File = new Scanner(new File("customer.txt"));

int num_Customers = 0;
while(input_File.hasNext() && num_Customers < maxLoyalty_CardsQty)
{
    //read ID
    customerID[num_Customers] = input_File.next();
    input_File.nextLine();
    //Here is my problems begins
    while(input_File.hasNextLine())
    {
        String line = input_File.nextLine();
        Scanner line_Scan = new Scanner(line);
        line_Scan.useDelimiter(" ");
        fName[num_Customers] = input_File.next();
        lName[num_Customers] = input_File.next();
        line_Scan.close();
    }
    //read Email
    email[num_Customers] = input_File.next();
    //read Cash
    spendToDate[num_Customers] = input_File.nextDouble();
    //read Points
    points[num_Customers] = input_File.nextInt();
    num_Customers++;
}
input_File.close();

1 个答案:

答案 0 :(得分:1)

考虑在文件中使用不同的数据布局。如果您在一行中拥有所有必需的数据,则更容易,例如逗号分隔,特别是如果你有关于多个用户的信息(我想这就是这种情况)

FS1, FirstName, LastName, foo@bar.baz, 10.0, 100

然后你可以选择这样的东西

Scanner scanner = new Scanner(new File("customer.txt"));
while (scanner.hasNext()) {
    String[] splitted = scanner.nextLine().split(", ");
             // then you've data in a nice array arranged like below
             // splitted[0] = user Id
             // splitted[1] = first name
             // etc. 
             fName[numCustomers] = splitted[1];
             // ...
             spendToDate[numCustomers] = splitted[3];
}

或者您可以使用Java 8将其简化为:

new Scanner(new File("customer.txt"))
    .forEachRemaining(line -> {
             String[] splitted = line.split(", ");
             // etc. 
    });

或者:

Files.lines(Paths.get("customer.txt"))
         .forEach(line -> {
             String[] splitted = line.split(", ");
             // splitted[0] = user Id
             // splitted[1] = user name and surname
             // etc. 
         });

另外,一个友好的建议,让自己熟悉Java naming conventions,让你的代码更清晰,更容易阅读。