Java буферный писатель не будет записывать все данные - PullRequest
1 голос
/ 06 января 2012
public static void save() 
{
    BufferedWriter out = null;
    try 
    {
        out = new BufferedWriter(new OutputStreamWriter(Gdx.files.external(file).write(false)));
        out.write(Double.toString(FinanceSystem.currentPlayerCash));
        out.write("\n");
        out.write(Integer.toString(DateSystem.day));
        out.write("\n");
        out.write(Integer.toString(DateSystem.month));
        out.write("\n");
        out.write(Integer.toString(DateSystem.year));
        out.write("\n");
        for(int i = 0; i <= InventorySystem.drugsOwned.size(); i++)
            out.write(Integer.toString(InventorySystem.drugsOwned.get(i))+"\n");
        for(int i = 0; i <= AttributeSystem.attributeNames.length; i++)
            out.write(Integer.toString(AttributeSystem.attributeValues.get(i)) + "\n");



    } 
    catch (Throwable e) {} 
    finally 
    {
       try
       {
          if (out != null)
               out.close();
       } 
       catch (IOException e) {}
    }

Моя проблема в том, что после цикла for для инвентаризации system.drugsowned больше ничего не записывается в файл. Так что в этом примере AttributeSystem.attributeValues ​​не записывается. Я также попытался поместить другие вещи, которые будут написаны после этого цикла, в том числе не циклические, и они также не написали. Whagwaan

1 Ответ

7 голосов
/ 06 января 2012

Это проблема:

for(int i = 0; i <= InventorySystem.drugsOwned.size(); i++)
    out.write(Integer.toString(InventorySystem.drugsOwned.get(i))+"\n");

<= должно быть <.Поэтому, если в коллекции 5 элементов, вы запрашиваете элемент 5, который является элементом 6th , так как индекс основан на 0.Это вызовет исключение.

Это затем маскируется этим:

catch (Throwable e)
{
}

Вы полностью теряете здесь свои чувства в плане диагностики:

  • Если толькоВы действительно можете обработать исключение, не перехватывать его - или перехватывать, а затем повторно выбрасывать после регистрации (или чего-либо еще)
  • Поймать определенных исключений везде, где вы можете.(Поймать Exception плохо; ловить Throwable хуже.)
  • Тихо ловить без регистрации - ужасная идея.Это означает, что вы не знаете как часто у вас возникают проблемы или какими они были.

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

...