为什么我的文件删除不管我为什么这么做?

时间:2016-03-19 16:41:18

标签: java java.util.scanner bufferedreader delete-file streamwriter

public void removeLine(String s) throws IOException, FileNotFoundException{

    File tempFile = new File("temp.txt");
    FileInputStream reader = new FileInputStream(sharkFile);
    Scanner scanner = new Scanner(reader);  
    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile, true));

    String currentLine;
    while(scanner.hasNextLine()){
        currentLine = scanner.nextLine();
        String trimmedLine = currentLine.trim();
        System.out.println(trimmedLine);
        trimmedLine.equals(sharkName);
        if(trimmedLine.equals(sharkName)) continue;
        writer.write(currentLine + System.getProperty("line.separator"));
    }

    scanner.close();
    scanner = null;
    reader.close();
    writer.flush();
    writer.close();
    writer = null;
    System.gc();
    if(!sharkFile.delete()){
        System.out.println("Could not delete file d");
        return;
    }
    if(!tempFile.renameTo(sharkFile)){
        System.out.println("Could not rename file");
        return;
    }
}

我在stackoverflow上经历了很多线程并实现了这些更改,但我的文件不会删除。感谢帮助。

2 个答案:

答案 0 :(得分:1)

File API在解释为什么出现问题时非常薄弱,例如File.delete()只返回boolean,而值false无法解释原因。

改为使用新的Path API。

另外,请(请!)使用try-with-resources。

Scanner速度很慢,因此最好使用BufferedReader,并使用换行符回写一行,请使用PrintWriter

Path sharkPath = sharkFile.toPath();
Path tempPath = Paths.get("temp.txt");
Charset cs = Charset.defaultCharset();
try (BufferedReader reader = Files.newBufferedReader(sharkPath, cs);
     PrintWriter writer = new PrintWriter(Files.newBufferedWriter(tempPath, cs, StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)))) {
    for (String currentLine; (currentLine = reader.readLine()) != null; ) {
        String trimmedLine = currentLine.trim();
        System.out.println(trimmedLine);
        if (! trimmedLine.equals(sharkName))
            writer.println(currentLine);
    }
}
Files.delete(sharkPath); // throws descriptive exception if cannot delete
Files.move(tempPath, sharkPath); // throws exception if cannot move

答案 1 :(得分:0)

使用以下代码,在删除前重命名文件,删除后出现您正在访问的文件名:

try {   //rename file first                 
    tempFile.renameTo(sharkFile);

    } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "Unable to rename.");                           
                  } 

try {                       
    sharkFile.delete();                             
    } 
catch(Exception e) {
                    JOptionPane.showMessageDialog(null, "Unable to delete.");                       
                  }