Java

Swing JFileChooser ile Dosya Bilgilerini Almak

Daha önce şurada açıklamaya çalıştığım File sınıfı ile, işletim sistemi üzerindeki herhangi bir dosya ya da klasör ile alakalı pekçok bilgiye erişebiliyoruz.

Bu yazıda, File sınıfının bu özelliklerini kullanarak, Swing bileşenleri ile grafiksel bir uygulama geliştirmeye çalışacağım.

Geliştireceğimiz uygulama ana hatları ile oldukça basit aslında. Swing’in sunmuş olduğu JFileChooser ile, işletim sisteminde istediğimiz bir dosyayı seçip o dosya (file) hakkında pekçok bilgiyi, JList bileşeni yardımı ile programımızda görüntüleyeceğiz.

Uygulamayı geliştirmeye geçmeden önce, bu örnek kod hakkında söylemek istediğim birkaç şey var. Uygulama her ne kadar, JFileChooser ile seçtiğimiz bir dosyayı File türünde bir değişkene atıyorsa da, uygulama da kullanılan JButton (buton/düğmeler) bileşenleri ile, Swing üzerinde olay (event) yönetiminin nasıl çalıştığı hakkında da başlangıç seviyesinde bilgi sahibi olunabilir.

(daha fazla…)

Java Scanner ve Formatter Sınıfları ile Dosya İşlemleri

Java I/O kütüphaneleri birçok farklı veri kaynağı ile işlem yapabilmek için geliştirilmiş bir yapıya sahiptir.

Veri kaynağı, işletim sisteminde bulunan bir dosya (file) olabileceği gibi, ağ üzerinde bulunan uzak bir bilgisayar da olabilir. Java geliştiricileri için bu tür input (girdi) output (çıktı) işlemlerinin detayı esasen çok da önemli değildir. Herhangi bir veri kaynağını, Java’nın sunmuş olduğu I/O sınıfları ile ele alabilirsiniz.

Bu yazıda, Java I/O kütüphanelerini kulanarak işletim sistemi üzerinde bulunan dosyalar ile nasıl veri giriş çıkışı yapılacağını anlatmaya çalışacağım. Bunun için kullanacağımız sınıflar java.util paketi içerisinde bulunan Scanner ve Formatter sınıfları.

(daha fazla…)

Javada Disassembler ve Decompiler İşlemleri

Java ile yazılan uygulamalar bilindiği gibi .java uzantılı kaynak dosyalara sahiptir.

Uygulamayı çalıştırabilmek için ise, öncelikle Java derleyicisi (compiler) ile bu kaynak dosyaları JVM (Java Virtual Machine) nin anlayacağı bytecode lara derlememiz gerekiyor. Bytecode, .java uzantılı kaynak dosyaların JVM üzerinde çalıştırılabilir formu olan ve .class uzantılı Java dosyalarıdır.

Elimizdeki .class uzantılı dosyaları Java platformunun sunduğu araçları kullanarak, kaynak dosyadaki bileşenlere ayrıştırılmış halini elde edebiliyoruz. Bu işleme disassemble adı veriliyor.

Daha da önemli ve ilginç olanı ise, .class uzantılı derlenmiş bytecodeları, ek birtakım araçlar kullanarak tekrar kaynak dosya biçimine çevirebiliyoruz. Bu işleme de decompile adı veriliyor.

Bu yazıda bu iki işlemin Javada nasıl yapıldığını anlatmaya çalışıcam. Öncelikle konuyu örnekler üzerinden ele alacağım için, Test.java adında basit bir Java uygulaması yazalım. Decompiler ve Disassembler işlemlerini bu kaynak dosya üzerinde örneklendirmeye çalışıcaz.

(daha fazla…)

Java ile Twitter Bağlantısı

Java uygulamalarınız içerisinde, Twitter ile etkileşime geçmek için JTwitter adında güzel bir API geliştirilmiş. JTwitter open source (açık kaynak) bir kütüphane ve LGPL license altında yayınlanmış.

JTwitter sayesinde, birkaç satır kod ile Java uygulamalarınız içerisinden Twitter hesabınıza ulaşabiliyor, “status” iletilerini alıp gönderebiliyor, arkadaş ağınızı yönetebiliyor, arkadaşlarınıza mesaj gönderebiliyorsunuz. Tabi sadece bu işlevleri gerçekleştirmek için tasarlanan bir kütüphane değil JTwitter. Twitter’ın sunduğu API ler aracılığı ile her türlü işlemi basitçe gerçekleştirmek mümkün. Bu da twitter.com üzerinde yapabildiğiniz hemen hemen herşeyi JTwitter ile de yapmak anlamına geliyor.

Aşağıdaki kod bloğu ile Twitter hesabına bağlanan, Twitter durumunuzu (status) güncelleyen ve “follower” listenizi çekip ekrana bastıran bir Java uygulaması geliştirebilirsiniz.

(daha fazla…)

HttpServletRequest ve HttpServletResponse Sınıfları

Servletler, HTTP veya başka protokoller üzerinden gelen isteklere dinamik içerik üreten Java sınıflarıdır. Servlet teknolojisi sayesinde, HTTP protokolü kullanan web uygulamalarını Java ile oluşturmak mümkündür.

Bu yazıda, Servlet Containerlarının servlet nesneleri ile haberleşmesini sağlayan HttpServletRequest ve HttpServletResponse nesnelerinden ve bunların sağladığı methodlardan bahsedicem.Eğer bu nesneler veya servletler hakkında temel bilginiz yok ise, önce bu yazıyı okumanızı öneririm.

Öncelikle HttpServletRequest ve HttpServletResponse nesnelerine biraz daha yakından bakmak gerekiyor.

(daha fazla…)

Javada Stringler

String, bazı kitaplar “katar” olarak da Türkçe’ye çeviriyor, bir dizi karakterin birleşimidir.

Herhangi bir programlama dilinde stringler, kullanıcıdan veri almadan tutun yazılımın çıktı (output) olarak verdiği veriye kadar pekçok işlemde sıkça kullanılır. Bu yüzden stringler, yazılım geliştiricilerin iyi bilmesi ve dilin sağladığı özelliklerinin iyi kavranmış olması gerekir.

String kavramı programlamada oldukça önemli ve sık kullanılan bir yapı olduğu için Java, geliştiricilerin string ve bunlar üzerindeki işlemleri hızlı ve basit bir şekilde yapabilmesi için çok gelişmiş string kütüphaneleri sunar. C/C++ (özellikle C) gibi dillerde varolan string (C de string yapısı yoktur) yapılarından çok daha farklı ve gelişmiş bir string mekanizması sunan Java, stringleri birer nesne olarak ele alır. Bu sayede, nesne yönelimli programlamanın getirdiği pekçok nimeti, böylesi sık kullanılan bir yapıya kazandırmış olur.

(daha fazla…)

Java Object Serialization

Java tamamen nesne yönelimli bir programlama dili olduğu için, Java üzerinde uygulama geliştirirken nesneleri sıkça kullanıyoruz. Java platformunda bilindiği gibi, int, double, byte gibi primitive tipler dışındaki herşey nesnedir.

Ancak Java’da kullanılan nesneler, Java platformunda (JVM) hayat bulurlar. Platform dışında nesnelerin, hiçbir anlamı yoktur. Nesne yönelimli programlama paradigmasını destekleyen Java’da, tasarlanan nesnelerin tekrar kullanılabilmesi (reuse) önemli bir konu olduğuna göre, bu nesneleri Java platformu dışında da hayata geçirmek gerçekten önemlidir. Bahsedilen bu problem, Java Serialization API sayesinde çok kolay bir şekilde aşılabiliyor.

Konuya bir de şu yönden bakarsak, herhangi bir nesne içerisindeki fieldları bir dosyaya yazdırdığımızda, bu verilerin sadece değerlerini (values) dosya içerisinde depolarız. Halbuki bu verilerin sınıf tanımlaması içerisindeki tipleri de en az değerleri kadar önemlidir. Herhangi bir nesnenin fieldındaki değer 3 ise, bu değerin string mi int mi olduğunun dosya üzerinde bir anlamı yoktur.

Java Serialization API sayesinde bir nesnenin birebir kopyasını, Java platformu dışında da depolayabiliriz. Bu mekanizma ile daha sonra,  nesneyi depolanan yerden çekip, aynı durum (state) ve özellikleri ile kullanmaya devam edebiliriz. Tüm bu sisteme, Object Serialization (Nesne Serileştirme) adı verilir.

(daha fazla…)

Java I/O File Sınıfı

Java, işletim sistemindeki dosya (file) ve klasörler (directories) hakkında her türlü bilgiyi alabileceğimiz çok kullanışlı bir sınıf tanımlar.

java.io paketi içerisinde bulunan File sınıfı sayesinde sistem üzerindeki dosya ve klasörler ile ilgili her türlü bilgiyi çekebiliyoruz. Ancak File sınıfı hakkında bilinmesi gereken en önemli nokta, File sınıfı herhangi bir dosyayı açmak ya da kapatmak gibi işlemler için tasarlanmamıştır. Dosya sistemi üzerinde bir dosya veya klasör ile ilişkilendirilerek, o nesne hakkında her türlü bilgiyi döndürür.

File sınıfı ile dosya ve klasörler için gereken işlemleri yapabilmemiz için, öncelikle Path (konum-yol) hakkında birkaç şey söylemek gerekiyor.

(daha fazla…)

Java Swing Temelleri

Swing, Java Foundation Classes içerisinde bulunan ve Java uygulamalarına grafiksel arayüz (GUI) kazandırmak için Sun tarafından geliştirilmiş devasa büyüklükte bir kütüphanedir. Swing kullanılarak geliştirdiğimiz Java uygulamalarına, her türlü ihtiyaç için tasarlanmış bileşenleri doğrudan kullanarak grafiksel arayüz (GUI) kazandırabiliyoruz.

Java’nın grafiksel arayüz ihtiyaçlarını karşılayan ilk bileşen seti AWT (Abstract Window Toolkit), bazı yetersizliklerinden dolayı kullanımı terkedilmiş ve Swing geliştirilmiştir.Aslında Swing, baştan tasarlanan bir kütüphane de değildir, tamamen AWT bileşen seti üzerinde geliştirilerek, AWT nin pekçok bileşenini ve kütüphanelerini de kullanır. Mesela GUI programlarının en büyük özelliği olan olaylar, tamamen AWT nin olay yönetme mekanizmasını kullanır.

(daha fazla…)

Java I/O Temelleri

Bilgisayar programları basitçe şu şekilde çalışır. Programa bir input (girdi) verirsiniz, program o inputu, içeriğinde tanımlanan algoritmalar doğrultusunda işler ve size bir output (çıktı) verir. Yazılımlardaki asıl amaç budur.

Java platformu, bu temel üzerinde çok gelişmiş bir Input/Output (I/O) sistemi geliştirmiştir. Java ile geliştirdiğiniz yazılımlar, Java platformunun sunduğu devasa büyüklükte ve gelişmişlikte tasarlanan I/O kütüphaneleri ile her türlü girdi-çıktı işlemleri çok basit bir şekilde halledilebiliyor.

Temel I/O ile alakalı tüm sınıflar Java platformunda,  java.io paketinde toplanmıştır. Bu paket içerisinde, temel input-output kaynaklarındaki her türlü işlemleri halleden birçok sınıf tanımlanmıştır ve Java geliştiricilerinin kullanımına sunulmuştur.

Java platformunun geliştirilmesi ile java.io paketinin yerini java.nio paketi almaktadır. NIO2 adı verilen bu yeni I/O mekanizması JDK 7  ile paralel olarak geliştirilmektedir.

(daha fazla…)