2017-08-08 39 views
0

我不確定如何在我設計的高爾夫程序中存儲關於個人用戶的數據(每個用戶需要在之前的漏洞等進行跟蹤並記錄)在Java中如何存儲有關個人用戶的數據,而無需爲每個用戶分別創建csv文件?

我想知道是否有一種不需要爲每個用戶創建單獨文件就可以存儲這些數據的方法?

任何幫助非常感謝!

感謝

+0

當然,單個CSV文件可以在這裏做到這一點。 – khriskooper

+0

有沒有進一步的見解? @khriskooper –

+0

只需將數據寫入單個文件?在數據中添加用戶名,以便區分它的數據。 – Kayaman

回答

1

您可以將該存儲爲JSON代替,EG:

{ 
"Arnold Palmer" : { 
    "handicap" : "2", 
    "history" : { 
     "1" : { 
      "courseName" : "St Andrews", 
      "holeNumber" : "1", 
      "score" : "2" 
     }, 
     "2" : { 
      "courseName" : "St Andrews", 
      "holeNumber" : "2", 
      "score" : "3" 
     } 
     ... etc 
    } 
}, 
"Tiger Woods" : { 
    "handicap" : "4", 
    "history" : { 
     "1" : { 
      "courseName" : "Pebble Beach", 
      "holeNumber" : "1", 
      "score" : "4" 
     }, 
     "2" : { 
      "courseName" : "Pebble Beach", 
      "holeNumber" : "2", 
      "score" : "6" 
     } 
     ... etc 
    } 
} 

然後,就分析它當程序啓動並提取您需要該用戶的信息(也有庫,你可以用於此)。我建議JSON是一種更適合您的需求的數據格式,因爲您需要存儲動態的圖形數據。 CSV文件非常適合更簡單的數據集。

我仍然認爲最好每個用戶保留一個單獨的文件,因爲它將節省您不得不通過一個巨大的文件來查找您需要的數據。取決於你將擁有多少用戶。

此外,如果您需要在用戶之間保留數據,請爲此提供共享文件(例如高分)。

-1

在Java中,存儲鍵值對的最簡單方法是properties文件,例如,摹:

  • 寫:

    Properties prop = new Properties(); 
    prop.setProperty("user1.prevHole", "foo"); 
    prop.store(new FileOutputStream("golf.properties"), null);

  • 閱讀:

    Properties prop = new Properties(); 
    prop.load(new FileInputStream("golf.properties")); 
    String prevHole = prop.getProperty("user1.prevHole");

Java Properties file examples

+0

討論一直關於CSV,而不是鍵值對。 – Kayaman

+0

@Kayaman我不明白CSV的要求(請參閱我上面的問題評論):_ [......]每個用戶需要有他們以前的漏洞等[...]我想知道是否有一種方法來存儲此數據,而不需要爲每個用戶創建一個單獨的文件?_ – howlger

+0

@howlger CSV不是必需的,但是,我認爲屬性似乎是我最簡單的方法來做到這一點,但是,有沒有什麼辦法可以讓我可以在程序外編輯這些內容嗎? –

0

如果您不需要的文件導出到另一個程序/ system,你可以停止關心它的格式並開始考慮創建一個類層次結構y代表你的模型,最終將依靠Java對象序列化

對象寫入一個文件:從文件

MyObject obj1=...; 
    MyObject obj2=...; 

    try (ObjectOutputStream output=new ObjectOutputStream(new FileOutputStream(file))) 
    { 
     output.writeObject(obj1); 
     output.writeObject(obj2); 
    } 

閱讀對象:

try (ObjectInputStream input=new ObjectInputStream(new FileInputStream(file))) 
    { 
     MyObject obj=(MyObject)input.readObject(); 
    } 

你只需要確保您的類(上例中的MyObject)實現java.io.Serializable以及定義中涉及的每個類(成員變量及其後續定義)。

只要您選擇Collection的可序列化實現(例如java.util.ArrayList),就可以對對象進行序列化/解析集合

相關問題