2011-01-27 70 views
0

我寫了一個java類,它讀取一個文件並將每行存儲在一個數組列表中。我想大量訪問這個數組列表。每次調用該類訪問數組列表時,都會再次讀取該文件。我希望文件被讀取一次,然後多次訪問數組列表。我怎樣才能做到這一點?閱讀文件一次,並多次使用數據

回答

4

將其存儲在類的字段中。 I.e .:

public class Foo { 
    private List<String> list; 

    public List<String> readData() { 
     if (list != null) { 
      return list; 
     } 
     // do the reading. 
    } 
} 

請注意,如果這是用在多線程環境中,你必須採取額外的措施。例如在方法上輸入​​。

正如彼得指出,如果你可以讀多個文件,那麼你可以使用一個Map<String, List<String>>

另一個需要注意的是,你應該只使用一個這個類的實例。如果您創建多個實例,則不會達到所需的效果。

+1

你可能想要把列表轉換成一個Map <字符串,列表 >以防文件名改變或者至少檢查文件名是否與最後一次加載相同。 – 2011-01-27 07:13:34

0

也許你需要做一個單身?然後你只會閱讀一次該文件 - 當你創建一個真正的新類實例。

1

這聽起來像你應該閱讀文件在建設的類,而不是在訪問它時。這並不一定意味着的構造函數中,請注意 - 您可能希望有一個靜態工廠方法,將文件讀取到ArrayList中,然後將該列表傳遞給實際的構造函數。這將使該類更容易測試(並在其他測試中使用)。

然後你只需要創建一次類,並讓你的代碼的其餘部分使用同一個實例。請注意,這個不是需要使用單例模式,這本身會使測試更難。它只是意味着將實例傳播給所有需要它的代碼。

0

如果一個Web應用程序,也許你會認爲這是在ServletContext或在用戶的HttpSession取決於存儲多少沒有文件更改