我写了一个java类,它读取一个文件并将每一行存储在一个arraylist中。我想多次访问这个arraylist。每次调用类来访问arraylist时,它都会再次读取该文件。我想要一次读取文件,然后多次访问arraylist。我怎么能这样做?
答案 0 :(得分:4)
将其存储在课程的某个字段中。即:
public class Foo {
private List<String> list;
public List<String> readData() {
if (list != null) {
return list;
}
// do the reading.
}
}
请注意,如果在多线程环境中使用它,则必须采取额外措施。例如,将synchronized
放在方法上。
正如彼得指出的那样,如果您可以阅读多个文件,那么您可以使用Map<String, List<String>>
另一个注意事项是,您应该只使用此类的一个实例。如果您创建多个实例,则无法获得所需的效果。
答案 1 :(得分:1)
听起来你应该在类的构造上阅读文件,而不是在访问它时。这并不一定意味着 in 构造函数,请注意 - 您可能希望有一个静态工厂方法将文件读入ArrayList
,然后将该列表传递给实际构造函数。这将使类更容易测试(并在其他测试中使用)。
然后,您只需要创建一次类,并使其余代码使用相同的实例。请注意,此不需要使用单例模式,这本身会使测试更加困难。它只是意味着将实例传播到需要它的所有代码。
答案 2 :(得分:0)
也许你需要制作一个单身人士?然后,您将只读取一次文件 - 当您创建一个真正新的类实例时。
答案 3 :(得分:0)
如果它是一个Web应用程序,也许你会考虑将它存储在ServletContext或用户HttpSession中,具体取决于文件的更改量