2013-08-11 4 views
0

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

Это мой первый раз, когда я пытаюсь читать и писать в/из файла, поэтому я не уверен, правильно ли я делаю это, поэтому я прошу помощи.

Я хочу, чтобы это сделать:

Когда игра начинается, инициализации называется. Если сохранение файла не существует, оно создается, если это так, вызывается загрузка.

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

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

Вот мой код, как я уже сказал, я понятия не имею, правильно ли я делаю это, поэтому помощь приветствуется.

private File saves = new File("saves.txt"); 

private void init(){ 
    PrintWriter pw = null; 

    if(!saves.exists()){ 
     try { 
      pw = new PrintWriter(new File("saves.txt")); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    }else{ 
     try { 
      load(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public void save(){ 
    PrintWriter pw = null; 

    try { 
     pw = new PrintWriter(new FileOutputStream(new File("saves.txt"), true)); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    pw.println(player.coinBank); 
    pw.println(player.ammo); 

    pw.close(); 
} 

public void load() throws IOException{ 
    BufferedReader br = new BufferedReader(new FileReader(saves)); 
    String line; 
    while ((line = br.readLine()) != null) { 

    } 
} 

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

+0

Для этого я могу использовать базу данных на основе файлов. Как derby: http://db.apache.org/derby/papers/DerbyTut/embedded_intro.html это будет вариант? – d0x

+0

Возможно, я заглядываю в него. Благодарю. –

ответ

1

Кажется, что ваш файл представляет собой структуру key = value, я предлагаю вам использовать объект Properties в java. Вот хороший example.

Ваш файл будет выглядеть следующим образом:

player.coinBank=123 
player.ammo=456 

Чтобы сохранить:

Properties prop = new Properties(); 
prop.setProperty("player.coinBank", player.getCoinBank()); 
prop.setProperty("player.ammo", player.getAmmo()); 
//save properties to project root folder 
prop.store(new FileOutputStream("player.properties"), null); 

Тогда вы загрузите его так:

Properties prop = new Properties(); 
prop.load(new FileInputStream("player.properties")); 

//get the property value and print it out 
System.out.println(prop.getProperty("player.coinBank")); 
System.out.println(prop.getProperty("player.ammo")); 
+0

Я попробую это. Спасибо за помощь! –

1

Чтение и запись в значительной степени симметричны.

Вы пишете player.coinBank в качестве первой строки файла, а player.ammo - как вторую строку. Так, при чтении, вы должны прочитать первую строку и присвоить его player.coinBank, а затем прочитать вторую строку и присвоить его player.ammo:

public void load() throws IOException{ 
    try (BufferedReader br = new BufferedReader(new FileReader(saves))) { 
     player.coinBank = br.readLine(); 
     player.ammo = br.readLine(); 
    } 
} 

Обратите внимание на использование try-with-resources statement здесь, который убеждается читатель закрыт , что бы ни происходило в методе. Вы также должны использовать эту конструкцию при записи в файл.

+0

Спасибо за помощь. –

Смежные вопросы