Я изучаю использование ArrayList
s и PrintWriter
s на данный момент, и мой профессор назначил нам что-то, где мы должны разбить файл с использованием нескольких PrintWriter
s, хранящихся в ArrayList
. Поэтому я инициализировать Printwriter
с, а для цикла, который выглядит примерно так:ArrayList of PrintWriters и метод .get()
for (int i=1; i<=n; i++) {
try {
this.writers.add(new PrintWriter(new File(filePattern + i)));
}
catch (java.io.IOException e) {
System.out.println("File " + i + " not found.");
}
}
где writers
является ArrayList<PrintWriter>
и filePattern
является источником. Но в моем методе write
я должен позвонить этим PrintWriter
s, чтобы на самом деле написать что-то. Используя int currentFile
, я поворачиваю файлы, чтобы их разбить, но я не совсем уверен, как использовать PrintWriter
, который находится в ArrayList
, когда я его не назвал. Могу ли я использовать метод «get» следующим образом? :
public void write (String s) throws IOException {
if (this.writers.size() > 0) {
PrintWriter p = this.writers.get(currentFile);
p.println(s);
if (this.currentFile == (this.writers.size()-1)) {
this.currentFile = 0;
}
else {
this.currentFile++;
}
}
else {
System.out.println("No Writers currently exist");
}
}
Или это не сработает? А если нет, есть ли другой путь?
Хм, да, я привык использовать их, но по какой-то причине он не указал его, как в последних заданиях, поэтому мне кажется, что он может захотеть, чтобы мы не использовали их для этого? Я не знаю, но я не хочу рисковать. .get() должен работать? Как и в моем примере, он должен функционировать должным образом? – Azmera
@Azmera, если вы помещаете ссылки на объекты в список и хотите получить доступ к этим ссылкам объектов посредством индексации, вы можете использовать явный метод get member или перегруженный оператор [] (что является точно таким же «синтаксическим сахаром»). Просто взгляните на API: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html – Matthias