Eğitim Portalı/Java/Properties Sınıfı
Java01-java/74-properties

Properties Sınıfı

Properties, anahtar-değer çiftlerinden oluşan bir yapılandırma deposudur ve hem anahtarlar hem değerler String'tir. Java uygulamalarında ayarları (veritabanı adresi, port, özellik bayrakları) ve uluslararasılaştırma (…

Properties Sınıfı

Properties, anahtar-değer çiftlerinden oluşan bir yapılandırma deposudur ve hem anahtarlar hem değerler String'tir. Java uygulamalarında ayarları (veritabanı adresi, port, özellik bayrakları) ve uluslararasılaştırma (i18n) metinlerini tutmanın klasik yoludur. .properties metin formatını okuyup yazar; Hashtable'dan türer ama özellikle yapılandırma için tasarlanmıştır.

Temel kullanım

Properties config = new Properties();
config.setProperty("server.port", "8080");
config.getProperty("server.port");          // "8080"
config.getProperty("timeout", "30");        // yoksa varsayılan "30"

getProperty'nin varsayılan değerli sürümü çok kullanışlıdır: anahtar yoksa null yerine verdiğin değeri döndürür. Örnek 1 (./Ornek1.java) ayarlama, okuma ve varsayılanı gösterir.

Dosyaya yazma/okuma: store / load

Properties, .properties metin formatını okuyup yazabilir:

config.store(writer, "yorum");   // anahtar=değer satırları + tarih/yorum
props.load(reader);              // .properties metnini geri oku

.properties formatı basittir:

# yorum satırı
db.url=jdbc:postgresql://localhost/app
db.user=admin
server.port=8080

XML formatı için storeToXML/loadFromXML da vardır. Örnek 1 store/load döngüsünü gösterir (dosya yerine StringWriter/StringReader ile, ama davranış aynıdır).

Sistem özellikleri (System Properties)

JVM, çalışma ortamı hakkında hazır özellikler sunar; bunlara System.getProperty ile erişilir:

System.getProperty("java.version");   // JVM sürümü
System.getProperty("os.name");        // işletim sistemi
System.getProperty("user.dir");       // çalışma dizini
System.getProperty("ayar", "varsayılan");
System.setProperty("uygulama.modu", "uretim");  // çalışma anında ayarla

Komut satırından da verilebilir: java -Duygulama.modu=test Uygulama. Örnek 2 (./Ornek2.java) sistem özelliklerini ve ortam değişkenlerini (System.getenv("PATH")) gösterir.

Property vs env var: System property JVM'e özeldir ve değiştirilebilir; ortam değişkeni (getenv) işletim sisteminden gelir ve salt okunurdur.

Properties'ten modern yapılandırmaya

Properties hâlâ geçerlidir ama modern uygulamalarda genelde üst seviye araçlar kullanılır:

  • Spring Boot: application.properties veya application.yml ile yapılandırma; @Value ve @ConfigurationProperties ile tipli, doğrulanmış ayarlar (bu portalın backend'i de böyle yapılandırılır). Spring, perde arkasında bu Properties mekanizmasının üzerine kuruludur.
  • Ortam değişkenleri / .env: Konteyner (Docker/K8s) dünyasında ayarlar genelde env var ile enjekte edilir (12-factor app).

Özet

Properties'in String anahtar-değer yapılandırma deposu olduğunu; setProperty/getProperty (varsayılanlı) ve store/load ile .properties okuma-yazmayı (Örnek 1); sistem özelliklerini ve ortam değişkenlerini (Örnek 2) öğrendik; Spring Boot yapılandırmasıyla ilişkisine değindik. Sırada, matematiksel işlemler: Math sınıfı.

Kod Örnekleri(2)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: Properties — anahtar-değer yapılandırması; yükleme ve kaydetme.
2// Çalıştırma: java Ornek1.java
3import java.io.StringReader;
4import java.io.StringWriter;
5import java.util.Properties;
6
7public class Ornek1 {
8
9    public static void main(String[] args) throws Exception {
10        Properties config = new Properties();
11
12        // Değer ayarlama (her anahtar ve değer String'tir)
13        config.setProperty("db.url", "jdbc:postgresql://localhost/app");
14        config.setProperty("db.user", "admin");
15        config.setProperty("server.port", "8080");
16
17        // Okuma — getProperty + varsayılan değer
18        System.out.println("db.url: " + config.getProperty("db.url"));
19        System.out.println("server.port: " + config.getProperty("server.port"));
20        System.out.println("timeout (yok, varsayılan): " + config.getProperty("timeout", "30"));
21
22        // KAYDET (store): .properties metin formatında yaz (gerçekte dosyaya/akışa)
23        StringWriter sw = new StringWriter();
24        config.store(sw, "Uygulama Yapılandırması");
25        String metin = sw.toString();
26        System.out.println("\n--- store() çıktısı (.properties formatı) ---");
27        // İlk satır tarih yorumu olur; onu atlayıp gösterelim
28        metin.lines().filter(l -> !l.startsWith("#")).forEach(l -> System.out.println(l));
29
30        // YÜKLE (load): .properties metnini geri oku
31        Properties yuklenen = new Properties();
32        yuklenen.load(new StringReader("db.url=jdbc:mysql://db/app\ndb.user=root\ncache.enabled=true"));
33        System.out.println("\nYüklenen db.url: " + yuklenen.getProperty("db.url"));
34        System.out.println("cache.enabled: " + yuklenen.getProperty("cache.enabled"));
35
36        System.out.println("""
37
38                --- Properties ---
39                Anahtar-değer (her ikisi de String) yapılandırma deposudur; Hashtable'dan türer.
40                setProperty/getProperty (getProperty varsayılan değer alabilir).
41                store(writer): .properties metin formatında yaz; load(reader): geri oku.
42                .properties formatı: 'anahtar=değer', '#' yorum. XML için storeToXML/loadFromXML de var.
43                Kullanım: uygulama ayarları, i18n metinleri. (Spring Boot bunun üzerine application.properties/yml sunar.)""");
44    }
45}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: Sistem özellikleri (System Properties) ve ortam değişkenleri.
2// Çalıştırma: java Ornek2.java
3public class Ornek2 {
4
5    public static void main(String[] args) {
6        // System.getProperty: JVM/işletim sistemi hakkında hazır özellikler.
7        System.out.println("Java sürümü   : " + System.getProperty("java.version"));
8        System.out.println("Java sağlayıcı : " + System.getProperty("java.vendor"));
9        System.out.println("İşletim sistemi: " + System.getProperty("os.name"));
10        System.out.println("Kullanıcı dizini: " + System.getProperty("user.dir"));
11        System.out.println("Dosya ayracı   : '" + System.getProperty("file.separator") + "'");
12        System.out.println("Satır ayracı   : " + System.lineSeparator().replace("\n", "\\n"));
13
14        // Varsayılan değerle güvenli okuma:
15        System.out.println("Özel ayar (yok): " + System.getProperty("benim.ayarim", "varsayılan"));
16
17        // Kendi sistem özelliğini ayarlama (JVM ömrü boyunca):
18        System.setProperty("uygulama.modu", "uretim");
19        System.out.println("Ayarlanan: " + System.getProperty("uygulama.modu"));
20
21        // Ortam değişkenleri (environment variables) — işletim sisteminden:
22        String path = System.getenv("PATH");
23        System.out.println("\nPATH var mı? " + (path != null && !path.isEmpty()));
24        System.out.println("HOME: " + System.getenv().getOrDefault("HOME", "(tanımsız)"));
25
26        System.out.println("""
27
28                --- Sistem özellikleri ve ortam değişkenleri ---
29                System.getProperty(ad[, varsayilan]): JVM özellikleri (java.version, os.name, user.dir...).
30                  -Dadi=deger ile komut satırından da verilir: java -Duygulama.modu=test ...
31                System.setProperty: çalışma anında ayarlama (yalnızca bu JVM için).
32                System.getenv(ad): işletim sistemi ortam değişkenleri (PATH, HOME...) — salt okunur.
33                Fark: system property JVM'e özel ve değiştirilebilir; env var OS'ten gelir, salt okunur.""");
34    }
35}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.