Barış

WFN Üye
Konular
552
Mesajlar
552
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Kastamonu
Web Sitesi
Var
Alanı
Google ADS
1/1
Konu sahibi
Java’da bir dosya oluşturmanın en güvenli ve modern yolu, java.nio.file.Files sınıfındaki createFile() metodunu kullanmaktır. Dosyanın oluşturulacağı yolu Path ile belirtirsiniz; işlem başarılı olursa dosya diskte oluşur, dosya zaten varsa FileAlreadyExistsException alınır. Dosyayı oluşturduktan sonra aynı Path üzerinden içine veri yazabilir, okuyabilir veya dosyanın gerçekten oluştuğunu kontrol edebilirsiniz.

Boş bir dosya oluşturma​


Aşağıdaki örnek, çalıştırıldığı konumdaki ornek.txt adlı boş dosyayı oluşturur:

Java:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class DosyaOlustur {
    public static void main(String[] args) {
        Path dosyaYolu = Path.of("ornek.txt");

        try {
            Path olusturulanDosya = Files.createFile(dosyaYolu);
            System.out.println("Dosya oluşturuldu: " + olusturulanDosya.toAbsolutePath());
        } catch (IOException e) {
            System.err.println("Dosya oluşturulamadı: " + e.getMessage());
        }
    }
}

Bu kodda Path.of("ornek.txt") göreli bir yol oluşturur. Göreli yol, dosyanın Java programının geçerli çalışma dizininde aranacağı anlamına gelir. Program başarıyla çalıştığında ekrana dosyanın mutlak yolu yazdırılır; böylece dosyanın hangi klasörde oluşturulduğunu görebilirsiniz.

Önemli: Files.createFile() yalnızca dosyanın kendisini oluşturur. Dosyanın bulunacağı üst klasörler yoksa klasörleri otomatik olarak oluşturmaz.

Belirli bir klasörde dosya oluşturma​


Dosyanın belirli bir klasörde oluşmasını istiyorsanız yolu açıkça belirtin:

Java:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class DosyaOlustur {
    public static void main(String[] args) {
        Path dosyaYolu = Path.of("veriler", "rapor.txt");

        try {
            Files.createDirectories(dosyaYolu.getParent());
            Files.createFile(dosyaYolu);

            System.out.println("Dosya oluşturuldu: " + dosyaYolu.toAbsolutePath());
        } catch (IOException e) {
            System.err.println("İşlem başarısız: " + e.getMessage());
        }
    }
}

Path.of("veriler", "rapor.txt") işletim sistemine uygun biçimde veriler/rapor.txt yolunu oluşturur. Files.createDirectories() eksik olan veriler klasörünü oluşturur; klasör zaten varsa hata vermeden devam eder. Ardından Files.createFile() boş rapor.txt dosyasını oluşturur.

getParent() burada dosyanın üst klasörünü, yani veriler klasörünü verir. Yalnızca dosya adı kullanıldığında, örneğin Path.of("rapor.txt") yazıldığında üst klasör bulunmayabileceği için createDirectories() çağrısını koşula bağlamak gerekir. Ancak dosya yolu bir klasör içeriyorsa yukarıdaki kullanım uygundur.

Dosyayı oluştururken içine metin yazma​


Dosyanın boş kalmasını istemiyorsanız önce dosyayı oluşturup sonra Files.writeString() ile metni yazabilirsiniz:

Java:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class MetinDosyasiOlustur {
    public static void main(String[] args) {
        Path dosyaYolu = Path.of("notlar.txt");
        String icerik = "Java ile oluşturulan ilk dosya.";

        try {
            Files.writeString(dosyaYolu, icerik);
            System.out.println("Dosya yazıldı: " + dosyaYolu.toAbsolutePath());
        } catch (IOException e) {
            System.err.println("Dosyaya yazılamadı: " + e.getMessage());
        }
    }
}

Bu örnekte ayrıca createFile() çağrılmamıştır. Files.writeString(), dosya yoksa dosyayı oluşturur ve metni yazar. Dosya zaten varsa varsayılan davranış mevcut içeriğin üzerine yazmaktır. Bu nedenle mevcut dosyanın korunması gerekiyorsa yazma seçeneğini açıkça belirlemelisiniz.

Dosya mutlaka önceden oluşturulsun ve varsa üzerine yazılmasın istiyorsanız iki işlemi ayrı yapabilirsiniz:

Java:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class YeniDosyaOlustur {
    public static void main(String[] args) {
        Path dosyaYolu = Path.of("sadece-yeni.txt");

        try {
            Files.createFile(dosyaYolu);
            Files.writeString(dosyaYolu, "Bu dosya daha önce mevcut değildi.");
            System.out.println("Yeni dosya oluşturuldu ve yazıldı.");
        } catch (java.nio.file.FileAlreadyExistsException e) {
            System.err.println("Dosya zaten var; mevcut içerik değiştirilmedi.");
        } catch (IOException e) {
            System.err.println("Dosya işlemi başarısız: " + e.getMessage());
        }
    }
}

Burada FileAlreadyExistsException özellikle yakalanmıştır. Bu sonuç, dosyanın oluşturulamadığı anlamına gelir; ancak genel bir sistem hatası olduğu anlamına gelmez. Dosyanın zaten var olduğunu gösterir ve mevcut içerik korunur. Programın amacı mevcut dosyayı güncellemekse bu durumda writeString() veya ekleme seçeneğiyle farklı bir yol izlemelisiniz.

Dosyanın durumuna göre doğru yöntemi seçme​


Dosya oluşturma yöntemi, mevcut dosyanın korunup korunmayacağına göre değişir:
İhtiyaçUygun işlemDosya zaten varsa
Yalnızca yeni ve boş dosya oluşturmakFiles.createFile()FileAlreadyExistsException oluşur
Dosya yoksa oluşturup metin yazmakFiles.writeString()Varsayılan olarak mevcut içerik değiştirilir
Mevcut metnin sonuna ekleme yapmakStandardOpenOption.CREATE ve APPENDİçerik korunur, yeni metin sona eklenir
Dosya oluşturmadan önce klasörleri hazırlamakFiles.createDirectories()Mevcut klasörler korunur
Bu ayrım önemlidir; çünkü “dosya yoksa oluştur” ile “mutlaka yeni dosya oluştur” aynı davranış değildir. Günlük, kayıt veya rapor dosyasına yeni satır eklemek istiyorsanız mevcut içeriğin üzerine yazmamalısınız:

Java:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;

public class DosyayaEkle {
    public static void main(String[] args) {
        Path dosyaYolu = Path.of("uygulama.log");

        try {
            Files.writeString(
                dosyaYolu,
                "Yeni kayıt\n",
                StandardOpenOption.CREATE,
                StandardOpenOption.APPEND
            );

            System.out.println("Kayıt dosyaya eklendi.");
        } catch (IOException e) {
            System.err.println("Kayıt eklenemedi: " + e.getMessage());
        }
    }
}

CREATE dosya yoksa dosyayı oluşturur, APPEND ise yeni metni mevcut içeriğin sonuna ekler. Bu kodu her çalıştırdığınızda önceki kayıtlar silinmez. Buna karşılık dosyanın her çalıştırmada baştan yazılması isteniyorsa APPEND kullanılmamalıdır.

Dosyanın gerçekten oluştuğunu kontrol etme​


İşlemden sonra Files.exists() ile yol üzerinde bir dosya veya klasör bulunup bulunmadığını kontrol edebilirsiniz. Dosyanın özellikle normal bir dosya olduğunu doğrulamak için Files.isRegularFile() daha anlamlıdır:

Java:
Path dosyaYolu = Path.of("ornek.txt");

if (Files.exists(dosyaYolu) && Files.isRegularFile(dosyaYolu)) {
    System.out.println("Dosya mevcut: " + dosyaYolu.toAbsolutePath());
} else {
    System.out.println("Bu yolda normal bir dosya bulunamadı.");
}

Bu kontrolün başarılı olması, uygulamanın dosyayı oluşturma yolunda bir dosya bulunduğunu gösterir; dosyanın içeriğinin doğru olduğunu veya uygulamanın daha sonra bu dosyaya erişebileceğini tek başına kanıtlamaz. İçeriği de doğrulamak istiyorsanız dosyayı Files.readString() ile okuyup beklediğiniz metinle karşılaştırmanız gerekir.

Hata alırsanız neyi kontrol etmelisiniz?​


Dosya zaten var: FileAlreadyExistsException alırsanız oluşturma yolu üzerinde aynı adla bir dosya bulunuyordur. Mevcut dosyayı koruyacaksanız hatayı yakalayıp başka bir ad kullanın; üzerine yazmak veya sonuna eklemek istiyorsanız writeString() seçeneklerini amaca göre değiştirin.

Üst klasör bulunamadı: Dosya yolunda klasörler belirtilmiş ancak bu klasörler yoksa önce Files.createDirectories(dosyaYolu.getParent()) çağrısını yapın. Klasör yoluna yazma yetkiniz yoksa klasör oluşturma yine başarısız olur.

Erişim reddedildi: Bu durum genellikle hedef klasöre yazma izni olmadığını, yolun salt okunur olduğunu veya başka bir programın dosyayı kilitlediğini gösterir. Önce hata mesajındaki yolu toAbsolutePath() ile netleştirin ve uygulamanın gerçekten beklediğiniz klasöre yazmaya çalıştığını doğrulayın. Sorun izinle ilgiliyse dosyayı yazma yetkinizin bulunduğu bir klasöre taşıyın; sunucu uygulamasında ise işlemi çalıştıran kullanıcı hesabının hedef klasöre yazma iznini düzenleyin.

Yol yanlışsa: Göreli yol kullandığınızda dosya, kaynak kodun bulunduğu klasörde değil, Java programının çalışma dizininde oluşabilir. Mutlak yolu yazdırarak gerçek konumu görün ve gerekiyorsa Path.of("C:", "uygulama", "veriler", "ornek.txt") gibi açık bir yol veya yapılandırmadan gelen bir hedef kullanın. Windows yollarında ters bölü işaretlerini Java dizelerinde kaçış karakteri olarak kullanmanız gerektiğini unutmayın; Path.of() ile yol parçalarını ayrı vermek bu hatayı azaltır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic