FileOutputStream öğesini bir dosya (Dize dosya adı) yoksa, o zaman oluşturacak şekilde kullanmanın bir yolu var mı?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
FileOutputStream öğesini bir dosya (Dize dosya adı) yoksa, o zaman oluşturacak şekilde kullanmanın bir yolu var mı?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Yanıtlar:
FileNotFoundException
Dosya yoksa ve oluşturulamıyorsa ( doc ) bir atar , ancak varsa oluşturur. Muhtemelen, önce dosyayı oluşturmadan önce var olduğunu test etmelisiniz FileOutputStream
(ve createNewFile()
eğer oluşturmuyorsa ile oluşturmalısınız ):
File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing
FileOutputStream oFile = new FileOutputStream(yourFile, false);
createNewFile()
benim örneğimde gösterildiği gibi yöntem ile .
createNewFile()
burada toplam zaman kaybıdır. Sistem bunu zaten yapacak. Sadece iki kez bakmaya zorluyorsun.
Bir dosya oluşturmadan önce, üst öğenin tüm dizinlerini oluşturmanız gerekir.
kullanım yourFile.getParentFile().mkdirs()
İster var olsun ister olmasın boş bir dosya oluşturabilirsiniz ...
new FileOutputStream("score.txt", false).close();
eğer varsa dosyayı terk etmek istiyorsanız ...
new FileOutputStream("score.txt", true).close();
FileNotFoundException yalnızca dosyayı varolmayan bir dizinde oluşturmaya çalışırsanız alırsınız.
FileNotFoundException
iki durumda da atar .
File f = new File("Test.txt");
if(!f.exists()){
f.createNewFile();
}else{
System.out.println("File already exists");
}
Bu geçirin f
sizin için FileOutputStream
yapıcı.
Apache ortaklarından FileUtils , bunu tek bir satırda başarmanın oldukça iyi bir yoludur.
FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))
Bu, yoksa üst klasörler oluşturur ve yoksa bir dosya oluşturur ve dosya nesnesi bir dizinse veya yazılamıyorsa bir istisna atar. Bu şuna eşittir :
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);
Geçerli kullanıcının işlemi yapmasına izin verilmezse yukarıdaki işlemlerin tümü bir istisna atar.
Varsa dosya oluştur. Dosya çıkarsa, içeriğini temizleyin:
/**
* 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();
}
}
Sadece Yol ve Dosyalar kullanılarak yoksa dosya oluşturmak için alternatif bir yol vermek.
Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
Files.createFile(path);
Files.write(path, ("").getBytes());
Potansiyel olarak bir FileNotFoundException
Dosya yoksa .
Java dokümantasyonu diyor ki:
Bir dosyanın bulunup bulunmayacağı veya oluşturulup oluşturulamayacağı, alttaki platforma bağlıdır http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html
Java 7 kullanıyorsanız java.nio paketini kullanabilirsiniz:
Options parametresi dosyanın nasıl oluşturulacağını veya açıldığını belirtir ... dosyayı yazmak için açar, yoksa dosyayı oluşturur ...
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
new FileOutputStream(f)
çoğu durumda bir dosya oluşturur, ancak ne yazık ki bir FileNotFoundException alırsınız
dosya mevcut ancak normal bir dosya yerine bir dizinse, mevcut değil ancak oluşturulamıyorsa veya başka bir nedenle açılamıyorsa
Diğer bir deyişle, "Dosyanızı oluşturamadı" anlamına gelen FileNotFoundException alabileceğiniz birçok durum olabilir, ancak dosya oluşturma işleminin başarısız olmasının nedenini bulamazsınız.
Bir çözüm, Dosya API'sine yapılan tüm çağrıları kaldırmak ve bunun yerine Dosyalar API'sini kullanmaktır, çünkü bunun yerine çok daha iyi hata işleme sağlar. Genellikle herhangi birini new FileOutputStream(f)
ile değiştirin Files.newOutputStream(p)
.
Dosya API'sını kullanmanız gereken durumlarda (örneğin, Dosya'yı kullanarak harici bir arayüz kullandığınız için), kullanmak Files.createFile(p)
, dosyanızın düzgün bir şekilde oluşturulduğundan emin olmanın iyi bir yoludur ve eğer değilse neden işe yaramadığını bileceksiniz. Bazı insanlar, bunun gereksiz olduğunu yorumladı. Bu doğrudur, ancak bazı durumlarda gerekli olabilecek daha iyi hata yönetimi elde edersiniz.