2016-05-04 3 views
-1

Я немного застрял в этом коде. У меня есть файл, который содержит file name.txt следующие данные:Прочитать смешанные типы данных из файла с Java

BD1    // user ID 
Bob Dillon  // user full name 
[email protected] // 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(); 
+0

Вы используете 3 разных способа записи имени переменной. Один с пространством является самым неправильным. – f1sh

+0

Считаете ли вы использование определенного формата файла, такого как Json? Вы можете легко разобрать это на объект с чем-то вроде Gson. – cyroxis

ответ

1

Рассмотрите возможность использования различного формата данных в файле. Это проще, если у вас есть все необходимые данные в одной строке, например. разделенные запятой, особенно если у вас есть информация о нескольких пользователей (и я думаю, что это так)

FS1, FirstName, LastName, [email protected], 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, это сделает ваш код намного чище и понятным для чтения.

+0

Спасибо Китке за ваш код, да, это один из способов сделать это, но мне нужно сохранить формат файла, как есть. Это один из моих требований к школьным проектам –

Смежные вопросы