хранение имен и другой информации - PullRequest
1 голос
/ 12 сентября 2009

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

Что касается опубликованных ответов, я не думаю, что это должно быть чем-то сложным, потому что я не узнал ничего из этого для задания. Все, что я хочу, - это чтобы моя программа распечатывала удостоверение личности заключенного, имя, дату начала и окончания, преступление всего за один запуск программы после того, как мне предложат ввести информацию.

INPUT / OUTPUT

Новый Заключенный Введите имя: Введите преступление: Введите имя: Введите преступление:

Информация о заключенном (имя) совершил (преступление) (имя) совершил (преступление)

Ответы [ 5 ]

2 голосов
/ 12 сентября 2009

Вы не особо четко указали в своем вопросе, хотите ли вы просто сохранить данные заключенного в памяти во время работы программы или хотите сохранить их на диске, чтобы вы могли закрыть свою программу и загрузите их снова при следующем запуске.

Если это первое, вы можете просто хранить заключенных в массиве или списке. Например, если ваш класс заключенных выглядит примерно так:

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");
}
2 голосов
/ 12 сентября 2009

Краткий ответ - «база данных».

Ваш вопрос указывает на то, что следующее может быть ошеломляющим, но может стоить некоторых усилий, чтобы прочитать о "Macto" сквозном образце, о котором пишет Айенде Рахейн.

1 голос
/ 12 сентября 2009

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

Для этого есть несколько решений:

  • Java-объект Сериализация
  • Распространенная система с такой библиотекой, как Prevalayer
  • XML-сериализация с библиотекой, подобной XStream
  • База данных (реляционная или нет)

Сериализация - это встроенный механизм сохранения Java, но она очень хрупкая. Распространенность основана на сериализации, но у меня нет опыта с этим, и я не уверен, что это решает слабость сериализации. XML-сериализация интересна и довольно быстра, особенно с такой библиотекой, как XSteam. Наконец, база данных является наиболее «стандартным» решением, но представляет некоторую сложность. В зависимости от ваших потребностей, используйте прямой JDBC или JPA для доступа к данным.

Мой совет: если вам не нужна база данных, перейдите к сериализации XML и используйте XStream. Обратитесь к Двухминутному учебнику на веб-сайте XStream, чтобы начать. Если вам вообще не нужна настойчивость (помимо жизни ВМ), просто храните заключенных в списке.

0 голосов
/ 12 сентября 2009

Если вы хотите использовать базу данных, вам нужно начать с Hibernate . Это библиотека Java, которая может предоставить объект Java для отображения таблицы реляционной базы данных.

Если вы хотите сохранить файловую систему, используя процедуру сериализации объектов, я бы порекомендовал XStream для сериализации текста XML или JSON.

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

Возможно, вам просто нужно создать класс Prisoner, в котором есть то, что вам нужно иметь в Prisoner, например, имя, идентификатор и т. Д. И т. Д.

public class Prisoner
{
   private String name;
   private int identifier;

   public Prisoner(String aName, int anId)
   {
      name = aName;
      identifier = anId;
   }   

   public String toString()
   {
      return "Prisoner[ name = " + name + ", id = " + identifier + " ]";
   }
}

Затем вы можете сохранить их в Map<String, Prisoner>, чтобы упростить их поиск.

Map<String, Prisoner> prisonMap = new HashMap<String, Prisoner>();

Чтобы ввести их из командной строки, вам, вероятно, потребуется использовать System.in Sun предлагает хороший учебник для него .

Если вы просто хотите распечатать их обратно в командной строке, вы будете перебирать набор ключей карты и получать каждое значение или просто перебирать значения и просто использовать System.out.println () распечатать их.

for(Prisoner p : prisonMap.values())
{
   System.out.println(p);
}

Или используйте XStream для распечатки XML в файл или поток System.out.

0 голосов
/ 12 сентября 2009

Где вы хотите хранить информацию? Если вы хотите хранить информацию в программе (памяти), вы можете использовать статические переменные-члены, например:

// Prisoner.java
class Prisoner {
 public String Name;
 public int Age;
}

// Prisoners.java
class Prisoners {
 public static Prisoner[] GetAll() {
  Prisoner[] _data;
  // Load from database to _data;
  return _data;
 }
}

// test.java
class test() {
 public static void out() {
  System.out.println(main.allPrisoner.getLength());
 }
}

// main.java

public class main{
 public static Prisoner[] allPrisoner; 

 public static main(String args[]){
  public allPrisoner = Prisoners.GetAll();
  // From now all prisoners will be stored in program memory until you close it
 }
}

Итак, если вы занимаетесь веб-разработкой, вы можете использовать WebCache

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