Java File IO Write - PullRequest
       20

Java File IO Write

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

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

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

File stalkerFolder = new File("plugins/logs");
File logFile = new File("plugins/logs/log.txt");
FileWriter fw;
FileReader fr;
BufferedWriter writer;
BufferedReader reader;
boolean error = false;
try{
    if(!folder.exists()){
        folder.mkdir();
    }
    logFile.createNewFile();
}catch(Exception e){}
try{
    fw = new FileWriter("plugins/logs/log.txt");
    fr = new FileReader("plugins/logs/log.txt");
    writer = new BufferedWriter(fw);
    reader = new BufferedReader(fr);
} catch(Exception e){
    System.err.println("ERROR: CANNOT READ OR WRITE TO LOG FILE");
    System.err.println("Plugin terminated.");
    error = true;
}

System.out.println("writing to log");
//Record to log
        try{
            writer.write("test log message");
        }catch(Exception e){
            System.err.println("could not write to log");
            e.printStackTrace();
        }

Я не распечатываю никаких ошибок, и я ДЕЙСТВУЮ "запись" в журнал"успешно.

Ответы [ 5 ]

6 голосов
/ 24 марта 2012

Вам нужно закрыть писателя.Измените последние несколько строк на это.

//Record to log
try{
    writer.write("test log message");
    writer.close();
}catch(Exception e){
    System.err.println("could not write to log");
    e.printStackTrace();
}

Все, что я сделал, это добавил writer.close().

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

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

try{
        writer.write("test log message");
        writer.flush(); // <--- optional
    }catch(Exception e){
        System.err.println("could not write to log");
        e.printStackTrace();
    }

// after you recorded everything, close your writer
finally {
try {
    writer.close();
} catch(IOException ioex) { }
}
1 голос
/ 24 марта 2012

Если это весь ваш источник, вы никогда не очищаете и не закрываете буферизированный писатель.

0 голосов
/ 24 марта 2012

Попробуйте добавить символ \ n в конец строки.

writer.write("test log message\n");
0 голосов
/ 24 марта 2012

Вам нужно позвонить writer.flush() после записи в буферный поток.Не забудьте закрыть писатель, когда вы закончите!Попробуйте:

...
System.out.println("writing to log");
//Record to log
        try{
            writer.write("test log message");
            writer.flush();
            writer.close(); 
        }catch(Exception e){
            System.err.println("could not write to log");
            e.printStackTrace();
        }

Редактировать: Согласно ответу sblundy, в этом случае достаточно вызова close() для очистки и закрытия потока.В общем случае вы захотите использовать flush() для правильной записи в основной файл записи и close() для закрытия потока.

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