Запись Java в каталог только создает файл - PullRequest
0 голосов
/ 29 марта 2012

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

public static void write(item a) {
    //Variable declaration. outp is private instance String array
    outp[0] = "<" + a.getID() + ">\n";
    outp[1] = "<name>" + a.getName() + "</name>";
    outp[2] = "<description>" + a.getDesc() + "</description>\n";
    outp[3] = "<type>" + a.getType() + "</type>\n";
    outp[4] = a.getOtherCode() + "\n";
    outp[5] = "</" + a.getID() + ">\n";
    try{
    //Create/Append data to items.xml located in variable folder.
    FileWriter writeItem = new FileWriter(modTest.modName + File.separator +"items.xml", true); 
    BufferedWriter out = new BufferedWriter(writeItem);

    //Loop through array and write everything
    for(int i = 0; i < outp.length; i++) {
        System.out.println("outp[" + i + "] = " + outp[i]);
        System.out.println("Writing line " + i + " of item "+  a.getID());
        out.write(outp[i]); 
    }

    }catch (Exception e) { System.err.println("Erro: " + e.getMessage()); 
    }
}

// File.seperator и, правда) Я получил от других вопросов здесь.Я думал, что это может быть проблемой, но после того, как они закомментированы и просто записали items.xml прямо в папку моих проектов, он все еще пуст.Я попытался добавить вывод для целей отладки, и я получил именно то, что ожидал.Все переменные выходы соответствуют тому, что должны.

Файл создан в правильной папке, но в него ничего не записывается.

Есть идеи, что я сделал не так?

1 Ответ

1 голос
/ 29 марта 2012

Вам необходимо закрыть дескриптор файла, чтобы содержимое было сброшено на диск.

Добавить:

out.close();

, чтобы ваш метод стал:

public static void write(item a) {
  //Variable declaration. outp is private instance String array
  outp[0] = "<" + a.getID() + ">\n";
  outp[1] = "<name>" + a.getName() + "</name>";
  outp[2] = "<description>" + a.getDesc() + "</description>\n";
  outp[3] = "<type>" + a.getType() + "</type>\n";
  outp[4] = a.getOtherCode() + "\n";
  outp[5] = "</" + a.getID() + ">\n";

  try {
    //Create/Append data to items.xml located in variable folder.

    FileWriter writeItem = new FileWriter(modTest.modName + File.separator +"items.xml", true); 
    BufferedWriter out = new BufferedWriter(writeItem);

    //Loop through array and write everything 

    for(int i = 0; i < outp.length; i++) {
      System.out.println("outp[" + i + "] = " + outp[i]);
      System.out.println("Writing line " + i + " of item "+  a.getID());
      out.write(outp[i]); 
    }

    out.close();
  }
  catch (Exception e) { System.err.println("Erro: " + e.getMessage()); }
}

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

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

...