Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Дописать файл

CraftCoder

Старожил
Пользователь
Баллы
108
Имя в Minecraft
CraftCoderr
Я делаю так:
Код:
try {
                   if(!file.exists()){
                       file.createNewFile();
                   }
                   PrintWriter out = new PrintWriter(new FileWriter(new String(file.getAbsolutePath()),true));
             
                   try {
                       for (String str : cmdLog){
                          out.println(str + "\n");
                       }
                       cmdLog.clear();
                   } finally {
                       out.close();
                   }
               } catch(IOException e) {                   
               }
но это не помогает и файл переписывается, а не дописывается.
 
В букките же есть библиотеки гугла, а именно класс Files с методом append(). Это явно сделает твой код проще.
 
Зачем, если
1. И так println
2. Символ переноса строки вставляется не так.
В том то и дело, что println, а оно вместо перехода на следующую строку пишет "." и далее следующая строка.
Ну так че делать? Может кто код предоставит просто?
 
Могу завтра попомогать, как доберусь с утра до ide.
P.S. А зачем new String(file.getAbsolutePath()), когда можно просто file?
P.P.S. И зачем это? if(!file.exists()) file.createNewFile();
Файл если не существует, создастся сам, а проверку вообще корректнее делать file.isFile(), т.к. exists() может вернуть true на директорию. Попробуй убрать эти строки.

Не люблю я эти Writer-ы, с FileOutputStream мне проще =) хотя у них всех конструкторы одинаковые, вполне одно оборачивает другое.
 
Могу завтра попомогать, как доберусь с утра до ide.
P.S. А зачем new String(file.getAbsolutePath()), когда можно просто file?
P.P.S. И зачем это? if(!file.exists()) file.createNewFile();
Файл если не существует, создастся сам, а проверку вообще корректнее делать file.isFile(), т.к. exists() может вернуть true на директорию. Попробуй убрать эти строки.

Не люблю я эти Writer-ы, с FileOutputStream мне проще =) хотя у них всех конструкторы одинаковые, вполне одно оборачивает другое.
Ок, пошел учить jav'y, а то я ее не знаю.
 
Попробуй такой код:
Java:
File file = ...;
List<String> cmdLog = ...;
// ...
try(OutputStreamWriter osw = new OutputStreamWriter(
    new FileOutputStream(file, true), Charset.forName("UTF-8")))
{
    for(String str : cmdLog)
        osw.write(str + System.lineSeparator());
    cmdLog.clear();
} catch(IOException e) {
}
(используется try-with-resources, для Java 7+).
 
Попробуй такой код:
Java:
File file = ...;
List<String> cmdLog = ...;
// ...
try(OutputStreamWriter osw = new OutputStreamWriter(
    new FileOutputStream(file, true), Charset.forName("UTF-8")))
{
    for(String str : cmdLog)
        osw.write(str + System.lineSeparator());
    cmdLog.clear();
} catch(IOException e) {
}
(используется try-with-resources, для Java 7+).
Спасибо, уже сделал так:
Код:
FileWriter out = new FileWriter(file,true);
             
                   try {
                       for (String str : cmdLog){
                          out.write(str + "\n");
                       }
                       cmdLog.clear();
                   } finally {
                       out.close();
                   }
Все работает.
 
Зато у тебя не гарантируется utf-8, а зависит от исполняющей системы :)
 

Поделиться этой страницей

Назад
Верх