Вы не особо четко указали в своем вопросе, хотите ли вы просто сохранить данные заключенного в памяти во время работы программы или хотите сохранить их на диске, чтобы вы могли закрыть свою программу и загрузите их снова при следующем запуске.
Если это первое, вы можете просто хранить заключенных в массиве или списке. Например, если ваш класс заключенных выглядит примерно так:
public class Prisoner {
private String name;
private String crime;
public Prisoner(String name, String crime) {
this.name = name;
this.crime = crime;
}
public String getName() {
return name;
}
public String getCrime() {
return crime;
}
}
Затем вы можете хранить заключенных в списке ...
List<Prisoner> prisoners = new LinkedList<Prisoner>();
prisoners.add(new Prisoner("Bob", "Murder"));
prisoners.add(new Prisoner("John", "Fraud"));
... а затем переберите список и распечатайте детали ...
for(Prisoner p : prisoners) {
System.out.println(p.getName() + " committed " + p.getCrime());
}
Если вы ищете способ сохранить подробности заключенного между запусками программы, есть ряд возможных подходов, большинство из которых уже упоминалось. В большинстве случаев база данных является наилучшим решением для хранения записей, а JDBC является самым простым способом подключения к базе данных и взаимодействия с ней.
Однако для простоты я бы предложил сохранить детали в файле CSV (значение, разделенное запятыми). CSV-файл - это просто текстовый файл, в котором каждая запись хранится в новой строке с запятой, разделяющей каждое поле. Например:
Bob, Murder
John, Fraud
Существует множество библиотек для чтения CSV (см. здесь ), однако его довольно легко читать + записывать в файл CSV без внешних библиотек. Ниже приведен пример:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
public class PrisonerStore {
/**
* The file the prisoners are stored in
*/
private File store;
public PrisonerStore(File store) {
this.store = store;
}
/**
* Saves the specified prisoner to the file
* @param prisoner
*/
public void savePrisoner(Prisoner prisoner) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(store, true));
writer.write(prisoner.getName() + "," + prisoner.getCrime());
writer.newLine();
writer.close();
}
/**
* Reads all prisoners from the file and returns a list of prisoners
* @return
*/
public List<Prisoner> loadPrisoners() throws IOException{
List<Prisoner> prisoners = new LinkedList<Prisoner>();
BufferedReader br = new BufferedReader(new FileReader(store));
//Read each line of the file and create a Prisoner object from it
String line = null;
while((line = br.readLine()) != null) {
String[] parts = line.split(",");
Prisoner p = new Prisoner(parts[0], parts[1]);
prisoners.add(p);
}
br.close();
return prisoners;
}
}
В своем коде вы можете сделать что-то вроде следующего:
PrisonerStore store = new PrisonerStore(new File("C:\\myFile.csv"));
Prisoner p1 = new Prisoner("Bob", "Murder");
Prisoner p2 = new Prisoner("John", "Fraud");
try {
store.savePrisoner(p1);
store.savePrisoner(p2);
List<Prisoner> list = store.loadPrisoners();
for(Prisoner p : list) {
System.out.println(p.getName() + " committed " + p.getCrime());
}
} catch (IOException e) {
System.out.println("Error storing prisoners");
}