Прочитайте файл один раз и используйте данные несколько раз - PullRequest
0 голосов
/ 27 января 2011

Я написал класс Java, который читает файл и сохраняет каждую строку в массиве.Я хочу получить доступ к этому массиву много раз.Каждый раз, когда класс вызывается для доступа к массиву, он снова читает файл.Я хочу, чтобы файл читался один раз, а затем обращался к массиву несколько раз.Как я могу это сделать?

Ответы [ 4 ]

4 голосов
/ 27 января 2011

Храните его в поле класса.Т.е.:

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 голос
/ 27 января 2011

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

Тогда вам нужно будет создать класс только один раз, а остальной код использовать тот же экземпляр.Обратите внимание, что это не требует использования шаблона синглтона, что само по себе усложнит тестирование.Это просто означает распространение экземпляра на весь код, который в этом нуждается.

0 голосов
/ 27 января 2011

Если это веб-приложение, может быть, вы захотите сохранить его в ServletContext или в пользовательском HttpSession, в зависимости от того, насколько изменяется файл

0 голосов
/ 27 января 2011

Может быть, вам нужно сделать синглтон?Тогда вы прочитаете файл только один раз - когда создадите действительно новый экземпляр класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...