2012-06-28 4 views
0

Я пытался выполнить удаление строк из файла, не начиная с определенной строки. Идея состояла в том, чтобы скопировать нужные строки в временный файл, удалить исходный файл и переименовать файл temp в исходный файл.Невозможно переименовать файл

Мой вопрос: я не могу переименовать файл!

tempFile.renameTo(new File(file)) 

или

tempFile.renameTo(inputFile) 

не работают.

Может ли кто-нибудь сказать мне, что происходит не так? Вот код:

/** 
* The intention is to have a method which would delete (or create 
* a new file) by deleting lines starting with a particular string. * 
*/ 
package com.dr.sort; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 

public class RemoveLinesFromFile { 

    public void removeLinesStartsWith(String file, String startsWith, Boolean keepOrigFile) { 
     String line = null; 
     BufferedReader rd = null; 
     PrintWriter wt = null; 
     File tempFile = null; 

     try { 
      // Open input file 
      File inputFile = new File(file); 

      if (!inputFile.isFile()) { 
       System.out.println("ERROR: " + file + " is not a valid file."); 
       return; 
      } 

      // Create temporary file 

      tempFile = new File(file + "_OUTPUT"); 

      //Read input file and Write to tempFile 

      rd = new BufferedReader(new FileReader(inputFile)); 
      wt = new PrintWriter(new FileWriter(tempFile)); 
      while ((line = rd.readLine()) != null) { 
       if (line.substring(0, startsWith.length()).equals(startsWith)) { 
        wt.println(line); 
        wt.flush(); 
       } 

      } 
      rd.close(); 

      if (!keepOrigFile) { 

       inputFile.delete(); 

       if (tempFile.renameTo(new File(file))) { 
        System.out.println("OK"); 
       } else { 
        System.out.println("NOT OK"); 
       } 
      } 

     } 

     catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 

     finally { 
      if (tempFile != null && tempFile.isFile()) { 
       wt.close(); 
      } 
     } 

    } 
} 
+0

Вы не сказали нам, какую ошибку вы получаете, или что именно ваш вопрос. –

+0

Извините. Мой вопрос: я не могу переименовать файл. tempFile.renameTo (новый файл (файл)) или tempFile.renameTo (inputFile) не работает. – dRv

ответ

5

Я думаю, что вам нужно, чтобы закрыть ваш PrintWriter перед переименовывать.

+0

Спасибо. Я пропустил это. – dRv

0
if (line.substring(0, startsWith.length()).equals(startsWith)) 

должно быть наоборот, потому что мы не хотим, чтобы указанные линии были включены. так:

if (!line.substring(0, startsWith.length()).equals(startsWith)) 
Смежные вопросы