Java İle Konsol Üzerinden Basit Not Defteri Nasıl Yapılır?

Java İle Konsol Üzerinden Basit Not Defteri Nasıl Yapılır?
Java İle Konsol Üzerinden Basit Not Defteri Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Projeye başlamadan önce bilgisayarınızda Java Geliştirme Kiti'nin (JDK) yüklü olması gerekir. 2026 yılı itibarıyla en güncel LTS (Uzun Süreli Destek) sürümlerinden biri olan Java 21 veya üzerini kullanmanızı öneririm. Geliştirme ortamı olarak IntelliJ IDEA, Eclipse veya VS Code gibi modern bir IDE (Tümleşik Geliştirme Ortamı) tercih edebilirsiniz.

  • JDK 21 veya daha yeni bir sürüm.
  • Temel Java sözdizimi bilgisi (Değişkenler, Döngüler, Koşullu İfadeler).
  • Dosya sistemi (java.io ve java.nio paketleri) hakkında temel kavramlar.

Adım 1: Kullanıcıdan Veri Alma ve Temel Menü Yapısı

İlk adım olarak, kullanıcının uygulama ile etkileşime girmesini sağlayacak bir menü yapısı kurmalıyız. Java'da konsol girişi için Scanner sınıfı kullanılır. Aşağıdaki kod bloğu, kullanıcının seçim yapabileceği bir döngü yapısını göstermektedir.

import java.util.Scanner;

public class NotDefteri {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean devam = true;

        while (devam) {
            System.out.println("1. Not Ekle\n2. Notları Listele\n3. Çıkış");
            int secim = scanner.nextInt();
            scanner.nextLine(); // Buffer temizleme

            if (secim == 3) {
                devam = false;
            }
        }
        scanner.close();
    }
}

Bu kodda, scanner.nextLine() kullanımı kritiktir. nextInt() metodundan sonra satır sonu karakteri tamponda (buffer) kaldığı için, bir sonraki girişin boş geçilmemesi adına bu temizleme işlemi yapılmalıdır.

Adım 2: Dosyaya Veri Yazma İşlemi

Notların kalıcı olması için verileri bir metin dosyasına kaydetmemiz gerekir. Java'da FileWriter ve BufferedWriter sınıfları bu iş için oldukça verimlidir. Dosyaya yazma işlemi sırasında oluşabilecek hataları yönetmek için try-with-resources bloğunu kullanacağız.

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public void notKaydet(String not) {
    try (BufferedWriter writer = new BufferedWriter(new FileWriter("notlar.txt", true))) {
        writer.write(not);
        writer.newLine();
    } catch (IOException e) {
        System.out.println("Dosya yazma hatası: " + e.getMessage());
    }
}

Burada FileWriter kurucusuna verilen true parametresi, dosyanın üzerine yazmak yerine mevcut içeriğin sonuna ekleme (append) yapmamızı sağlar.

Adım 3: Dosyadan Notları Okuma

Kaydedilen notları ekrana yazdırmak için Files.readAllLines veya BufferedReader kullanabiliriz. Modern Java yaklaşımları, dosya okuma işlemlerinde daha temiz bir sözdizimi sunar.

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public void notlariListele() {
    try {
        List notlar = Files.readAllLines(Paths.get("notlar.txt"));
        for (String not : notlar) {
            System.out.println("- " + not);
        }
    } catch (IOException e) {
        System.out.println("Henüz not bulunamadı veya dosya okunamadı.");
    }
}

Bu yöntem, dosyadaki tüm satırları bir liste olarak döndürür ve döngü ile kolayca ekrana basmamızı sağlar.

Adım 4: Uygulamanın Birleştirilmesi ve Hata Yönetimi

Tüm parçaları bir araya getirerek, kullanıcının not ekleyip görüntüleyebileceği tam bir uygulama haline getirelim. Bu aşamada, kullanıcı girişlerinin doğruluğunu kontrol etmek ve beklenmedik durumları yönetmek önemlidir.

public static void main(String[] args) {
    NotDefteri uygulama = new NotDefteri();
    Scanner scanner = new Scanner(System.in);
    
    // Uygulama mantığı buraya entegre edilir
    System.out.println("Notunuzu girin:");
    String icerik = scanner.nextLine();
    uygulama.notKaydet(icerik);
}
Kritik Güvenlik Uyarısı: Dosya yolları ile çalışırken, kullanıcıdan alınan girdilerin doğrudan dosya yolu olarak kullanılmadığından emin olun. Bu durum "Path Traversal" saldırılarına yol açabilir. Her zaman dosya isimlerini kod içerisinde sabit tutun veya sıkı bir şekilde doğrulayın.

Yöntem Karşılaştırma Tablosu

Yöntem Avantajı Dezavantajı
FileWriter Basit ve hızlı Büyük dosyalarda performans düşebilir
Files.readAllLines Okunabilir ve temiz kod Çok büyük dosyaları belleğe yükleyebilir

Sıkça Sorulan Sorular

Notlarımı neden bir veritabanına değil de dosyaya kaydediyoruz?

Bu proje, Java'nın temel dosya I/O (Giriş/Çıkış) işlemlerini öğrenmeniz için tasarlandı. Daha karmaşık projelerde SQL veritabanları (SQLite, PostgreSQL) tercih edilmelidir.

Dosya bulunamadığında uygulama çöküyor, nasıl engellerim?

try-catch bloklarını kullanarak IOException hatasını yakalamalı ve kullanıcıya anlamlı bir hata mesajı dönmelisiniz.

Scanner sınıfı neden bazen hata veriyor?

Scanner sınıfı, giriş akışını (stream) kapatırsa tekrar açılmaz. Uygulamanın başında bir kez tanımlayıp tüm sınıflarda kullanmak en iyi pratiktir.

Uygulamayı nasıl daha profesyonel hale getirebilirim?

Notlara tarih damgası ekleyebilir veya notları silme/güncelleme özelliklerini geliştirebilirsiniz.

Bu projeyi bir .exe dosyasına dönüştürebilir miyim?

Evet, jpackage aracını kullanarak Java uygulamanızı işletim sistemine özel bir çalıştırılabilir dosyaya dönüştürebilirsiniz.

Uygulama İçin İleri Seviye Optimizasyon ve Performans İpuçları

Basit bir not defteri uygulaması, veri boyutu arttıkça bellek yönetimi ve dosya erişim hızı açısından bazı zorluklarla karşılaşabilir. Uygulamanızın daha performanslı çalışması için aşağıdaki stratejileri göz önünde bulundurabilirsiniz:

  • Buffered I/O Kullanımı: Dosya okuma ve yazma işlemlerinde FileWriter yerine BufferedWriter ve BufferedReader sınıflarını kullanmak, disk erişim sayısını azaltarak performansı önemli ölçüde artırır.
  • StringBuilder ile Bellek Yönetimi: Notları ekrana basarken veya birleştirirken sürekli String nesnesi oluşturmak yerine StringBuilder kullanmak, Garbage Collector üzerindeki yükü hafifletir.
  • Dosya Boyutu Kontrolü: Uygulamanızın çok büyük dosyalarla çalışması gerekiyorsa, dosyayı tamamen belleğe yüklemek yerine satır satır okuyan yöntemleri tercih edin.

Performans Artırıcı Kod Örneği

Aşağıdaki örnekte, BufferedReader kullanarak dosya okuma işleminin nasıl daha verimli hale getirilebileceğini görebilirsiniz:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class NotOkuyucu {
    public void notlariListele(String dosyaAdi) {
        try (BufferedReader br = new BufferedReader(new FileReader(dosyaAdi))) {
            String satir;
            while ((satir = br.readLine()) != null) {
                System.out.println(satir);
            }
        } catch (IOException e) {
            System.err.println("Dosya okunurken bir hata oluştu: " + e.getMessage());
        }
    }
}

Uygulama Hata Ayıklama ve Loglama Stratejileri

Geliştirme aşamasında hataları tespit etmek, uygulamanın kararlılığı için kritiktir. Sadece System.out.println kullanmak yerine, profesyonel bir hata ayıklama yaklaşımı benimsemelisiniz.

  • Try-With-Resources Kullanımı: Dosya akışlarını manuel kapatmak yerine, Java'nın try-with-resources yapısını kullanarak kaynak sızıntılarını (resource leaks) engelleyin.
  • Özel Exception Sınıfları: Kullanıcı hatalarını daha iyi yönetmek için kendi NotDefteriException sınıfınızı oluşturarak hataları kategorize edebilirsiniz.
  • Loglama Kütüphaneleri: Profesyonel projelerde java.util.logging veya SLF4J gibi kütüphaneleri kullanarak hataları bir log dosyasına yazmak, uygulamanın çalışma zamanındaki davranışlarını izlemenizi kolaylaştırır.

Kullanıcı Hatalarını Yönetme

Kullanıcı yanlış bir dosya yolu girdiğinde veya geçersiz bir karakter girdiğinde uygulamanın çökmesini önlemek için şu yapıyı kullanabilirsiniz:

public void notKaydet(String not, String dosyaAdi) throws IllegalArgumentException {
    if (not == null || not.trim().isEmpty()) {
        throw new IllegalArgumentException("Not içeriği boş olamaz!");
    }
    // Dosya yazma işlemleri buraya...
}

Bu yöntemler, uygulamanızı basit bir konsol aracından, hata toleransı yüksek ve genişletilebilir bir yazılım parçasına dönüştürmenize yardımcı olacaktır.

Sonuç

Java ile konsol üzerinden not defteri yapmak, dosya yönetimi ve kullanıcı etkileşimi konusunda temel bir yetkinlik kazanmanızı sağlar. Bu projede öğrendiğiniz Scanner, FileWriter ve Files sınıfları, Java dünyasındaki birçok uygulamanın temelini oluşturur. Bir sonraki adım olarak, notlarınızı bir veritabanında tutmayı öğrenmek için JDBC (Java Database Connectivity) konusuna göz atmanızı öneririm.

Sorumluluk Reddi: Bu makale eğitim amaçlıdır. Yazılan kodlar üretim ortamında kullanılmadan önce güvenlik testlerinden geçirilmeli ve gerekli hata yönetimi mekanizmalarıyla güçlendirilmelidir.
Bu yazıya tepkinizi paylaşın:
Mert Çelik

Kendin yap (DIY) projeleri ve ev içi bakım rehberleri üzerine içerik geliştiriyorum. Detaylı ve anlaşılır anlatım diliyle karmaşık işleri keyifli hale getiriyorum.

Yorumlar (17)

17
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Caner Yılmaz
Caner Yılmaz 31 Temmuz 2026

Eline sağlık Mert hocam, tam yeni başlayanlar için harika bir proje olmuş. Java'da dosya okuma yazma kısmında hep zorlanıyordum, sayende mantığını çözdüm.

Mert Çelik
Mert Çelik 01 Ağustos 2026

Çok teşekkürler Caner, temel dosya işlemlerini kavrayınca gerisi çorap söküğü gibi gelir. Başarılar!

Zeynep S.
Zeynep S. 01 Ağustos 2026

Ya ben kodları denedim ama hata alıyorum. Scanner sınıfında mı bi yanlışlık var acaba, anlamadım gitti.

Selim Aksoy
Selim Aksoy 02 Ağustos 2026

Import kısmını kontrol ettin mi? Bazen java.util.Scanner eklemeyi unutunca öyle hata verebiliyor.

Burak Can
Burak Can 01 Ağustos 2026

Kodlar çalışıyo ama notları silme özelliği de ekleseydin efsane olurdu. Belki ikinci derste onu da yaparsın?

Mert Çelik
Mert Çelik 03 Ağustos 2026

Haklısın Burak, silme ve düzenleme özellikleri için ikinci bir yazı planlıyorum. Takipte kal!

Elif Kılıç
Elif Kılıç 03 Ağustos 2026

Çok güzel anlatmışsın, üniversite ödevim için ilaç gibi geldi valla.

Hakan Demir
Hakan Demir 04 Ağustos 2026

Peki bu notları bir veritabanına bağlamak istesek çok mu karmaşık olur? JDBC ile nasıl yapabiliriz bi fikrin var mı?

Mert Çelik
Mert Çelik 05 Ağustos 2026

JDBC ile bağlamak aslında oldukça keyifli bir süreç. İlerleyen zamanlarda SQLite kullanan bir rehber de hazırlarım.

Melis Tan
Melis Tan 04 Ağustos 2026

Yazı güzel olmuş ama biraz daha detaylı açıklayabilirdin. Özellikle dosya yolunu belirlerken hata yapabiliyorum.

Oğuzhan V.
Oğuzhan V. 05 Ağustos 2026

Dosya yolunu çift ters bölü (\) ile yazmayı dene, windows kullanıyorsan bazen kaçış karakteri yüzünden hata veriyo.

Fatih Erdem
Fatih Erdem 04 Ağustos 2026

Kodlar neden konsol ekranında türkçe karakter hatası veriyo acaba? UTF-8 ayarlarıyla mı ilgili?

Mert Çelik
Mert Çelik 06 Ağustos 2026

Evet Fatih, IDE'nin encoding ayarını UTF-8 yaparak veya konsol çıktıları için uygun fontu seçerek çözebilirsin.

Deniz Kara
Deniz Kara 05 Ağustos 2026

Mert abi harikasın! Sayende ilk defa kendi başıma konsol uygulaması yazdım.

Selin Y.
Selin Y. 05 Ağustos 2026

Basit ve anlaşılır bir anlatım olmuş. Teşekkürler.

Murat G.
Murat G. 05 Ağustos 2026

Çok basit kalmış bence, biraz daha ileri seviye bişeyler bekliyoruz artık :)

Ayşe M.
Ayşe M. 07 Ağustos 2026

Herkes uzman değil Murat, başlangıç seviyesi için gayet açıklayıcı olmuş bence.

Yorum Yaz