Java FileOutputStream Varsa Dosya Oluştur


187

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:


302

FileNotFoundExceptionDosya 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); 

2
dosya yoksa, boş bir .txt dosyasını nasıl oluşturabilirim?
Stefan Dunn

3
@StefanDunn createNewFile()benim örneğimde gösterildiği gibi yöntem ile .
talnicolas

55
Durum gereksiz. Göre JavaDoc'u , createNewFile()kendisi atomik dosyanın varlığını kontrol eder.
aztek

8
@aztek muhtemelen kod okunabilirliğini artırmak için koşulu bırakabiliriz
Andrii Chernenko

2
createNewFile()burada toplam zaman kaybıdır. Sistem bunu zaten yapacak. Sadece iki kez bakmaya zorluyorsun.
Lorne Marquis

61

Bir dosya oluşturmadan önce, üst öğenin tüm dizinlerini oluşturmanız gerekir.

kullanım yourFile.getParentFile().mkdirs()


23

İ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.


3
Her FileNotFoundExceptioniki durumda da atar .
mixel

21
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

Bu geçirin fsizin için FileOutputStreamyapıcı.


2
Burada bir yarış durumu var ... Bunu yapmak daha iyi: File f = new File ("Test.txt"); if (! f.createNewFile ()) {System.out.println ("Dosya zaten var"); }
insanlık

19

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.


4

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();
    }
}

2

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());

0

Potansiyel olarak bir FileNotFoundExceptionDosya 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


0

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

Javadoc çıkışlı

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.