2016-09-04 3 views
0

Я пытаюсь переписать содержимое файла, создав временный файл, манипулируя текстом, а затем удалив оригинал, чтобы заменить его на temp. Вот метод:Как заменить файл на Java

private void deleteLine(String lineToRemove){ 
    File inputFile = new File("./src/class1.txt"); 
    File tempFile = new File("./src/tempFile.txt"); 

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

    BufferedWriter writer; 
    writer = new BufferedWriter(new FileWriter(tempFile)); 

    String currentLine; 

    while((currentLine = reader.readLine()) != null) { 
     if(!currentLine.trim().equals(lineToRemove)){ 
      writer.write(currentLine +  System.getProperty("line.separator")); 
     } 
    } 
    writer.close(); 
    reader.close(); 

    System.out.println("Input to temp1: " + tempFile.renameTo(inputFile)); 
} 

При тестировании этого метода, я обнаружил, что все работает, как предполагалось в течение последних двух строк, которые возвращают ложным исключение. Мой файл class1.txt существует, когда метод запускается, но tempFile.txt этого не делает.

+3

Почему вы используете два файл? Вы можете просто заменить строку (lineToRemove) пустой строкой ("") – pilkington

+0

У вас есть достаточно прав на файл ./src/class1.txt? В основном, система не может переопределить файл из-за отсутствия разрешения на запись. –

+0

Да, у меня достаточно разрешений. Как я уже сказал, я могу записать в файл, но функции delete и replace возвращают false. – Romulus3799

ответ

0

Ваш tempFile.txt есть, но вы его не видите :), попробуйте обновить свой проект (я полагаю, вы используете затмение).

Right click на папку проекта>Refresh

вы увидите файл.

также вам нужен inputFile.delete(); вызова

writer.close(); 
reader.close(); 

inputFile.delete(); 

System.out.println("Input to temp1: " + tempFile.renameTo(inputFile)); 
0

рабочего раствор с использованием try-with-resources, Streams и NIO.2, который имеет некоторые benefits:

Path inputPath = Paths.get("foo.txt"); 
Path outputPath = Paths.get("foo.txt.tmp"); 
try (Stream<String> lineStream = Files.lines(inputPath); 
    BufferedWriter writer = Files.newBufferedWriter(outputPath)) { 
    lineStream 
     .filter(line -> !"pattern".equals(line.trim())) 
     .forEach(line -> { 
      try { 
       writer.append(line); 
       writer.newLine(); 
      } catch (IOException e) { 
       throw new UncheckedIOException(e); 
      } 
     }); 
} 
Files.delete(inputPath); 
Files.move(outputPath, inputPath); 

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

  • Нет связанных вопросов^_^