0
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 и внедрил эти изменения, но мой файл просто не удалит. Цените помощь.Почему мой файл не удаляется независимо от того, почему я это делаю?

+5

Вы проверили права пользователя? Какую ошибку вы получаете? – johan855

+0

Вы поймаете исключение IO где-нибудь, если оно есть? –

+0

Используйте 'Files.delete()'; по крайней мере, вы получите осмысленное исключение при неудаче. Кроме того, почему 'System.gc()'? – fge

ответ

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.");      
        }      
+0

как это поможет? Как использовать RandomAccessFile лучше, чем BufferedReader? –

1

File API, как известно, слаб на объяснении, почему-то не получится, например, File.delete() просто возвращает boolean, а значение false не может объяснить, почему.

Используйте вместо этого новый API Path.

Также, пожалуйста (ПОЖАЛУЙСТА!) Используйте 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 
Смежные вопросы