2015-04-22 61 views
-1

我试图根据用户输入删除一行。 MYFILE.TXT样子:当从文件中删除数据时,临时文件将不会重命名为原始文件

Matt 
Brian 
John 

然而,当我进入“布莱恩”(删除这条线),它是在临时文件(myTempFile.txt)删除,但不能更名回原来的文件(MYFILE )。为什么是这样?谢谢

import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.FileReader; 
    import java.io.FileWriter; 
    import java.io.IOException; 
    import java.util.Scanner; 

    public class testcode { 

     public static void main(String[] args) throws IOException { 
      File inputFile = new File("myFile.txt"); 
      File tempFile = new File("myTempFile.txt"); 
      Scanner myScan = new Scanner(System.in); 

      BufferedReader reader = new BufferedReader(new FileReader(inputFile)); 
      BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); 

      System.out.print("Please enter student first name: "); 
      String lineToRemove = myScan.nextLine(); 
      String currentLine; 

      while((currentLine = reader.readLine()) != null) 
      { 
       String trimmedLine = currentLine.trim(); 
       if(!trimmedLine.contains(lineToRemove)) { 
        writer.write(trimmedLine); 
        writer.newLine(); 
       } 
       tempFile.renameTo(inputFile); 
      } 
      writer.close(); 
      reader.close(); 
      myScan.close(); 

     } 
    } 
+0

任何人都可以帮忙吗? – Adam

回答

2

您的原始文件已打开,这就是为什么它不起作用。

我建议经过一段时间后再做renameTo(...),然后把它放在reader.close();之前。在原始文件的每个readLine()处重命名它是没有意义的。执行处理,然后重命名临时文件。

像:

while((currentLine = reader.readLine()) != null) 
    { 
     String trimmedLine = currentLine.trim(); 
     if(!trimmedLine.contains(lineToRemove)) { 
      writer.write(trimmedLine); 
      writer.newLine(); 
     } 

    }    
    reader.close(); 
    writer.close(); 
    inputFile.delete(); //Added to my original post. 
    tempFile.renameTo(inputFile); 

看到的例子:http://www.tutorialspoint.com/java/io/file_renameto.htm

经过一番研究,我看到了这一点:http://www.coderanch.com/t/595269/java-io/java/doesn-File-renameTo-work。如果该文件确实存在,则重命名将不起作用。尝试在重命名之前删除inputFile。

+0

不幸的是,我在发布之前尝试过。还是一样的问题 – Adam

+0

试试也writer.flush();或者可能是inputFile.close();或FileReader fileReader = new FileReader(inputFile);然后fileReader.close();这是因为这些文件没有被发布,这就是为什么。 – JFPicard

+0

这些建议都无效。当尝试读取文件位时,我收到一条消息:方法readLine()对于类型FileReader – Adam