2013-07-22 2 views
0

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

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

ОБНОВЛЕНО

File inputFile = new File(propertiesFilePath+"/"+fileName); 
    File tempFile = new File(propertiesFilePath+"/tempfile.properties"); 
    BufferedWriter writer=null; 
    BufferedReader reader =null; 
    System.out.println("Input file "+inputFile.exists()+" "+tempFile.exists()); 
    try{ 
    reader = new BufferedReader(new FileReader(inputFile)); 
    writer = new BufferedWriter(new FileWriter(tempFile)); 
    String currentLine=null;  
    while((currentLine = reader.readLine()) != null) { 
     if(currentLine.contains(KEY_STORE)) break; 
     System.out.println("Lines "+currentLine); 
     writer.write(currentLine); 
    } 

    }catch(Exception e){ 
     System.out.println("Exception in deleting config"); 
    }finally{ 
     writer.close(); 
     reader.close(); 

    } 


    System.err.println("Inpute file delete "+inputFile.delete()); 

    return tempFile.renameTo(inputFile); 

выход:

Input file true true 
Lines # ---------------------------------------------- 

Inpute file delete false  Renamed false 

Lines # --------------------------------------------------- 

Lines # 

Lines # ---------------------------------------------------- 

Lines # 

Lines # -------------------------------------------------------- 

Lines # --------------------------------------------------------- 

Lines # ------------------- 

Lines # 

Lines # --------------------------------------------------------------------------------- 
----------------------- 

Lines #------------------------------------------------------------------ 

Lines # ---------------------- 

Lines ----------------------- 

Lines 

я replced текст, (------), но как можно напечатать SYSOUT, который находится за пределами представление перед завершением цикла.

Есть ли лучший способ достичь того, что я хочу.

+0

Какое исключение вы получаете в блоке catch? –

ответ

1

Проблема может заключаться в том, что файл открыт в BufferedReader.

File inputFile = new File(propertiesFilePath+"/"+fileName);

BufferedReader reader = new BufferedReader(new FileReader(inputFile));

return tempFile.renameTo(inputFile);

Вы никогда близко reader.

Попробуйте добавить reader.close() перед тем, как переименовать/удалить файл.

+0

Я изменил код согласно вашему предложению, но не буду работать. не могли бы вы рассказать мне, почему Sysout написана вне цикла печати между ними? – pyus13

+0

это сработало после помещения окончательно { try { if (writer! = Null) writer.close(); если (читатель! = Null) reader.close(); } catch (IOException e) { System.err.println («Исключение при закрытии» + e.getMessage()); } } в коде. – pyus13

0

код выглядит хорошо, единственное, что я заметил tempFile.renameTo (файл_ввода) происходит дважды, в этих двух строках:

System.err.println("Inpute file delete "+inputFile.delete()+"  Renamed "+tempFile.renameTo(inputFile)); 
return tempFile.renameTo(inputFile); 

Единственная причина, я могу думать о том, что процесс не может иметь разрешение на выполните эти операции, поэтому переименовать и удалить не удастся.

Пожалуйста, проверьте разрешение, надеясь, что это поможет.

Cheers !!

+0

Я удалил один проверенный обновленный код. Как я могу проверить разрешение? – pyus13

+0

Где этот код работает windows/linux/Unix? Если он запущен в Unix/Linux, перейдите к родительскому каталогу, в котором выполняется операция переименования/удаления, запустите «ls-ltr», он предоставит вам разрешения, если это тестовая среда, дающая полное разрешение, поможет подтвердить проблему , –

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