Saya ingin membuat dan menghapus direktori menggunakan Java, tetapi tidak berhasil.
File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
index.mkdir();
} else {
index.delete();
if (!index.exists()) {
index.mkdir();
}
}
java
file-io
delete-directory
Tuan G.
sumber
sumber
Jawaban:
Java tidak dapat menghapus folder dengan data di dalamnya. Anda harus menghapus semua file sebelum menghapus folder.
Gunakan sesuatu seperti:
Maka Anda seharusnya dapat menghapus folder tersebut dengan menggunakan
index.delete()
Untested!sumber
FileUtils.deleteDirectory
seperti yang dikatakan @Francesco Menzani.if (!index.delete()) {...}
. Kemudian, jika indeks adalah tautan simbolis, itu dihapus terlepas dari apakah indeks itu memiliki isinya.entries
nol.Hanya satu baris.
Dokumentasi di sini
sumber
Ini berfungsi, dan meskipun tampaknya tidak efisien untuk melewati pengujian direktori, sebenarnya tidak: pengujian langsung dilakukan di
listFiles()
.Perbarui, untuk menghindari tautan simbolis berikut:
sumber
Saya lebih suka solusi ini di java 8:
Dari situs ini: http://www.baeldung.com/java-delete-directory
sumber
Files.walk()
, yang secara eksplisit ditunjukkan dalam dokumen API. Saya tahu bahwa jika Anda tidak menutup aliran yang dikembalikan olehFiles.list()
misalnya, Anda dapat kehabisan pegangan dan program akan macet. Lihat misalnya stackoverflow.com/q/36990053/421049 dan stackoverflow.com/q/26997240/421049 .Di JDK 7 Anda dapat menggunakan
Files.walkFileTree()
danFiles.deleteIfExists()
menghapus pohon file. (Contoh: http://fahdshariff.blogspot.ru/2011/08/java-7-deleting-directory-by-walking.html )Di JDK 6 salah satu cara yang mungkin adalah menggunakan FileUtils.deleteQuietly dari Apache Commons yang akan menghapus file, direktori, atau direktori dengan file dan sub-direktori.
sumber
Menggunakan Apache Commons-IO, ini mengikuti satu baris:
Ini (sedikit) lebih berkinerja daripada
FileUtils.deleteDirectory
.sumber
Seperti yang disebutkan, Java tidak dapat menghapus folder yang berisi file, jadi hapus file terlebih dahulu lalu foldernya.
Berikut contoh sederhana untuk melakukan ini:
Atau:
sumber
Versi rekursif dasar saya, bekerja dengan versi JDK yang lebih lama:
sumber
listFiles()
mengembalikan null, daripada memanggilisDirectory()
.Ini adalah solusi terbaik untuk
Java 7+
:sumber
Jambu biji 21+ untuk menyelamatkan. Gunakan hanya jika tidak ada symlink yang mengarah keluar dari direktori yang akan dihapus.
(Pertanyaan ini diindeks dengan baik oleh Google, jadi orang lain yang menggunakan Jambu mungkin akan senang menemukan jawaban ini, meskipun jawaban itu mubazir dengan jawaban lain di tempat lain.)
sumber
Saya paling suka solusi ini. Itu tidak menggunakan perpustakaan pihak ke-3, melainkan menggunakan NIO2 dari Java 7.
sumber
Satu pilihan lagi adalah menggunakan
org.springframework.util.FileSystemUtils
metode relevan Spring yang secara rekursif akan menghapus semua konten direktori.Itu akan berhasil!
sumber
Di dalam
Anda menelepon
setelah
Ini berarti Anda membuat file lagi setelah menghapus File.delete () mengembalikan nilai boolean. Jadi jika Anda ingin memeriksa maka lakukan
System.out.println(index.delete());
jika Anda mendapatkantrue
maka ini berarti file tersebut dihapusdari komentar yang diberikan di bawah ini, jawaban yang diperbarui seperti ini
sumber
Jika Anda memiliki subfolder, Anda akan menemukan masalah dengan jawaban Cemron. jadi Anda harus membuat metode yang berfungsi seperti ini:
sumber
Anda dapat menggunakan FileUtils.deleteDirectory . JAVA tidak dapat menghapus folder yang tidak kosong dengan File.delete () .
sumber
directry tidak bisa begitu saja menghapus jika memiliki file sehingga Anda mungkin perlu menghapus file di dalamnya terlebih dahulu dan kemudian direktori
sumber
Anda dapat melakukan panggilan rekursif jika ada sub direktori
sumber
kita bisa menggunakan
spring-core
ketergantungan;sumber
Sebagian besar jawaban (bahkan terbaru) yang merujuk pada kelas JDK bergantung
File.delete()
tetapi itu adalah API yang cacat karena operasi mungkin gagal secara diam-diam.The
java.io.File.delete()
negara metode dokumentasi:Sebagai gantinya, Anda harus memilih
Files.delete(Path p)
yang melemparIOException
dengan pesan kesalahan.Kode sebenarnya dapat ditulis seperti:
sumber
Anda dapat mencoba sebagai berikut
Jika ada sub folder di dalam folder Anda, Anda mungkin perlu menghapusnya secara rekursif.
sumber
sumber
Bekerja seperti Mantra. Untuk folder dan file. Salam :)
sumber
Hapus dari bagian lain
sumber
Beberapa dari jawaban ini sepertinya terlalu panjang:
Bekerja untuk sub direktori juga.
sumber
Anda dapat menggunakan fungsi ini
sumber