2016-05-04 16 views
-1

このコードはちょっと残っています。Javaでファイルから混合したデータを読み取る

BD1    // user ID 
Bob Dillon  // user full name 
[email protected] // user Email 
10.0    // amount of cash 
100    // No.of Points 

私は同じ文字列で、ユーザーの姓と名を読み取ることができません:私は、次のデータを含むファイルfile name.txtを持っています。ここに私のコードです:

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

ファイル内の別のデータレイアウトの使用を検討してください。必要なすべてのデータを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

あなたのコードのためのKitkeありがとう、はいこれを行う方法の一つですが、私はそのままのファイル形式を維持する必要があります。私の学校のプロジェクトの要件の一つです –

関連する問題