Apakah ada cara untuk menggunakan FileOutputStream sedemikian rupa sehingga jika file (String nama file) tidak ada, maka itu akan membuatnya?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Apakah ada cara untuk menggunakan FileOutputStream sedemikian rupa sehingga jika file (String nama file) tidak ada, maka itu akan membuatnya?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Jawaban:
Ini akan melempar FileNotFoundException
jika file tidak ada dan tidak dapat dibuat ( doc ), tetapi itu akan membuatnya jika bisa. Untuk memastikan Anda mungkin harus terlebih dahulu menguji apakah file tersebut ada sebelum Anda membuat FileOutputStream
(dan membuat dengan createNewFile()
jika tidak):
File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing
FileOutputStream oFile = new FileOutputStream(yourFile, false);
createNewFile()
metode, seperti yang ditunjukkan pada contoh saya.
createNewFile()
adalah total buang waktu di sini. Sistem sudah akan melakukan itu. Anda hanya memaksanya terlihat dua kali.
Sebelum membuat file, diperlukan untuk membuat semua direktori induk.
Menggunakan yourFile.getParentFile().mkdirs()
Anda dapat membuat file kosong apakah itu ada atau tidak ...
new FileOutputStream("score.txt", false).close();
jika Anda ingin meninggalkan file jika ada ...
new FileOutputStream("score.txt", true).close();
Anda hanya akan mendapatkan FileNotFoundException jika Anda mencoba membuat file di direktori yang tidak ada.
FileNotFoundException
dalam kedua kasus.
File f = new File("Test.txt");
if(!f.exists()){
f.createNewFile();
}else{
System.out.println("File already exists");
}
Berikan ini f
kepada FileOutputStream
konstruktor Anda .
FileUtils dari apache commons adalah cara yang cukup baik untuk mencapai ini dalam satu baris.
FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))
Ini akan membuat folder induk jika tidak ada dan membuat file jika tidak ada dan melemparkan pengecualian jika objek file adalah direktori atau tidak dapat ditulis ke. Ini setara dengan :
File file = new File("/home/nikhil/somedir/file.txt");
file.getParentFile().mkdirs(); // Will create parent directories if not exists
file.createNewFile();
FileOutputStream s = new FileOutputStream(file,false);
Semua operasi di atas akan mengeluarkan pengecualian jika pengguna saat ini tidak diizinkan untuk melakukan operasi.
Buat file jika tidak ada. Jika file keluar, hapus kontennya:
/**
* Create file if not exist.
*
* @param path For example: "D:\foo.xml"
*/
public static void createFile(String path) {
try {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
} else {
FileOutputStream writer = new FileOutputStream(path);
writer.write(("").getBytes());
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Hanya Memberikan cara alternatif untuk membuat file hanya jika tidak ada menggunakan Path dan File.
Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
Files.createFile(path);
Files.write(path, ("").getBytes());
Anda berpotensi mendapatkan FileNotFoundException
jika file tersebut tidak ada.
Dokumentasi Java mengatakan:
Apakah file tersedia atau tidak dapat dibuat tergantung pada platform yang mendasarinya http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html
Jika Anda menggunakan Java 7 Anda dapat menggunakan paket java.nio:
Parameter opsi menentukan bagaimana file dibuat atau dibuka ... membuka file untuk ditulis, membuat file jika tidak ada ...
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
new FileOutputStream(f)
akan membuat file dalam banyak kasus, tetapi sayangnya Anda akan mendapatkan FileNotFoundException
jika file ada tetapi merupakan direktori dan bukan file biasa, tidak ada tetapi tidak dapat dibuat, atau tidak dapat dibuka karena alasan lain
Saya kata lain mungkin ada banyak kasus di mana Anda akan mendapatkan FileNotFoundException yang berarti "Tidak dapat membuat file Anda", tetapi Anda tidak akan dapat menemukan alasan mengapa pembuatan file gagal.
Solusi adalah menghapus panggilan apa pun ke API File dan menggunakan API File sebagai gantinya karena memberikan penanganan kesalahan yang jauh lebih baik. Biasanya ganti new FileOutputStream(f)
dengan Files.newOutputStream(p)
.
Dalam kasus di mana Anda perlu menggunakan File API (karena Anda menggunakan antarmuka eksternal menggunakan File misalnya), menggunakan Files.createFile(p)
adalah cara yang baik untuk memastikan file Anda dibuat dengan benar dan jika tidak, Anda akan tahu mengapa itu tidak berfungsi. Beberapa orang berkomentar di atas bahwa ini berlebihan. Memang benar, tetapi Anda mendapatkan penanganan kesalahan yang lebih baik yang mungkin diperlukan dalam beberapa kasus.