2011-11-11 49 views
11

Tôi biết rằng câu hỏi này là bản sao hoành hành của câu hỏi this. Tuy nhiên, bây giờ tôi đã đọc toàn bộ trang đó hai lần và một số phần 3 lần và đối với cuộc sống của tôi, tôi không thấy cách/nơi nó được trả lời!Xóa tập tin Java 6

Vì vậy, về vấn đề của tôi.

Tôi đang ở nơi làm việc và bị kẹt khi sử dụng Java 6 SE và không thể nâng cấp lên 7. Tôi đang viết chương trình tạo tệp, viết, xử lý và sau đó cần xóa tệp đó. Tôi gặp vấn đề chính xác giống như người đã hỏi câu hỏi tôi tham khảo ở trên: Java sẽ không xóa tệp và tôi không thể hiểu tại sao.

Mã:

File f = null; 
FileWriter fw = null; 
try 
{ 
    f = new File("myFile.txt"); 
    fw = new FileWriter(f); 
    fw.write("This is a sentence that should appear in the file."); 
    fw.flush(); 
    if(f.delete()) 
     System.out.println("File was successfully deleted."); 
    else 
     System.err.println("File was not deleted."); 
} 
catch(Exception exc) 
{ 
    System.err.println(exc.getMessage()); 
} 
catch(Error er { 
    System.err.println(er.getMessage()); 
} 
catch(Throwable t) 
{ 
    System.err.println(t.getMessage()); 
} 
finally 
{ 
    fw.close(); 
} 

Nó không phải là ném bất kỳ throwables, lỗi hoặc ngoại lệ (I bao gồm những để loại trừ bất kỳ trường hợp và tất cả các cạnh). Câu lệnh in thứ hai ("File was not deleted.") đang được in trên bảng điều khiển. Tôi đang chạy này trên Windows 7 và đang viết thư mục vào một thư mục mà tôi có quyền đầy đủ (rwx).

Người dùng đặt câu hỏi mà tôi tham chiếu đã trả lời câu hỏi của riêng mình, nhưng làm như vậy (theo ý kiến ​​khiêm tốn của tôi) theo cách không thẳng thắn. Trong mọi trường hợp, tôi gặp khó khăn trong việc hiểu nó. Anh/cô ấy dường như ám chỉ đến việc sử dụng một số BufferedReader trái ngược với một số FileInputStream tạo sự khác biệt cho anh ta/cô ấy, nhưng tôi không thấy cách áp dụng.

Java 7 dường như đã khắc phục sự cố này khi giới thiệu lớp học java.nio.file.Files, nhưng một lần nữa, tôi không thể sử dụng Java 7 vì các lý do nằm ngoài phạm vi kiểm soát của mình.

Câu trả lời khác cho câu hỏi được tham chiếu đó ám chỉ rằng đây là "lỗi" trong Java và cung cấp tất cả các loại vi phạm, chẳng hạn như gọi rõ ràng System.gc(), v.v. Tôi đã thử tất cả những điều này và chúng không hoạt động.

Có thể ai đó có thể thêm phối cảnh mới và chạy một số suy nghĩ cho tôi.

+0

Tôi không cho rằng đây là bản sao. Khi bạn đã thử các giải pháp được đề xuất từ ​​câu hỏi khác và họ không giúp đỡ, có khả năng nguyên nhân là khác nhau. – finnw

+2

Đóng nó trước. Và ... "bị mắc kẹt khi sử dụng Java 6?" Tôi không biết một công ty nào đang chạy trên JDK7. Tôi biết nhiều người trên 1,4 và 1,5. Tự coi mình là may mắn. –

+0

xin lưu ý những gì bạn nói là ngược lại: bằng cách sử dụng FileInputStream thay vì BufferedReader là những gì làm việc cho người dùng trong bài viết khác. Đối với lý do tại sao nó được áp dụng, một số bình luận ở đó cho thấy một lỗi của nó trong Java. –

Trả lời

17

Bạn đang cố gắng xóa() một tệp vẫn được tham chiếu bởi một FileWriter đang hoạt động, đang mở.

Hãy thử điều này:

f = new File("myFile.txt"); 
fw = new FileWriter(f); 
fw.write("This is a sentence that should appear in the file."); 
fw.flush(); 
fw.close(); // actually free any underlying file handles. 
if(f.delete()) 
    System.out.println("File was successfully deleted."); 
else 
    System.err.println("File was not deleted."); 
8

Bạn chỉ có thể xóa các tập tin nếu không có xử lý tập tin trái mở ra. Vì bạn mở tệp hanlder bằng cách sử dụng FileWriter, bạn sẽ cần phải đóng nó trước khi bạn có thể xóa nó. Nói cách khác, f.delete phải được thực hiện sau fw.close

Hãy thử mã bên dưới. Tôi đã thực hiện các thay đổi để ngăn tất cả các lỗi có thể xảy ra mà bạn có thể tìm thấy, ví dụ: nếu fw là null.

File f = null; 
FileWriter fw = null; 
try { 
    f = new File("myFile.txt"); 
    fw = new FileWriter(f); 
    fw.write("This is a sentence that should appear in the file."); 
    fw.flush(); // flush is not needed if this is all your code does. you data 
       // is automatically flushed when you close fw 
} catch (Exception exc) { 
    System.err.println(exc.getMessage()); 
} finally {// finally block is always executed. 
    // fw may be null if an exception is raised in the construction 
    if (fw != null) { 
     fw.close(); 
    } 
    // checking if f is null is unneccessary. it is never be null. 
    if (f.delete()) { 
     System.out.println("File was successfully deleted."); 
    } else { 
     System.err.println("File was not deleted."); 
    } 
} 
Các vấn đề liên quan