java.io Paketi Bölüm 1 1.1 Java'da Giri³/Çk³ ³lemleri (I/O) Ksa Tarihçe



Benzer belgeler
JAVA DA GİRİŞ/ÇIKIŞ İŞLEMLERİ. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 9 1

// hataları işaret eden referans

InputStream Sınıfı. Class InputStream. java.io. java.lang.object java.io.inputstream. Kılgıladığı Arayüzleri: Closeable, AutoCloseable

BufferedReader. Kılgıladığı Arayüzler: Closeable, AutoCloseable, Readable. Altsınıfları: LineNumberReader. Bildirimi: public class BufferedReader

İÇİNDEKİLER VII İÇİNDEKİLER

ByteArrayOutputStream

protected Reader() Karekter akımı okumak için Reader nesnesi yaratır. Yaratılan nesne kendi kendisiyle eşzamanlı olur.

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

JAVA DA İSTİSNALAR VE DOSYA İŞLEMLERİ. Yrd. Doç.Dr. İlhan AYDIN

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 11

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

Java da İşleçler, Ders #3 (4 Kasım 2009)

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

BİL132 Bilgisayar Programlama II

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

çindekiler 3 Python Programlarn Yürütme Kaynak Program... 24

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Scanner Sınıfı. Class Scanner. java.util. java.lang.object java.util.scanner. Kılgıladığı Arayüzler: Closeable, AutoCloseable, Iterator<String>

BİL-141 Bilgisayar Programlama I (Java)

BİL-141 Bilgisayar Programlama I (Java)

BM-209 Nesne Yönelimli Programlama

PROGRAMLAMA TEMELLER. C Program Yap s

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

Programlama Dillerinde Kullanılan Veri Tipleri

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Progress Barlı, FTP Dosya Upload Appleti


BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

B A. A = B [(A B) (B A)] (2)

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Nesneye Yönelik Programlama-JAVA, Ders sorumlusu Yrd.Doç.Dr.Hilmi KU ÇU

Java: printf() Metodu İle Çıktıyı Biçemleme

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

Yeni G/Ç (new I/O) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 10 1

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Burada, Input ve Output stream ler ile ilgili sınıfların hiyerarşisi gösterilmektedir.

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

JAVADA DİZİ İŞLEMLERİ

İstisnalar (Exceptions) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 8 1

Struts2 ile Merhaba Dünya uygulamas

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

Dizi ( Array ) ve Dizgi ( String )


Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

A = i IA i = i I A = A = i IA i = {x α((α I) (x A α ))} (7.7) A = (α,β I) (α β) A α A β = (7.8) A A

JAVA. public class Welcome { // class isimleri her zaman büyük harfle başlar. public static void main(string[] args){ System.out.print("Welcome"); } }

Karşılaştırma İşlemleri ve Koşullu İfadeler

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Soket, bir sunucu programı ve bir veya birden çok istemci programı arasında çift yönlü iletişim kuran bir yazılım uç noktasıdır.

VB de Veri Türleri 1

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 8. Yrd.Doç.Dr.Hacer Karacan

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

D İ Z İ L E R A R R A Y S

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

1 - Button Kontrolu Nasıl Yapılır?

PAKET TRANSFER SİSTEMİ

EMT2226 Nesne Yönelimli Programlamaya Giriş

Güz Yarıyılı Balıkesir Üniversitesi Bilgisayar Mühendisliği Bölümü

Güz Yarıyılı Balıkesir Üniversitesi Bilgisayar Mühendisliği Bölümü

Ders - 7 while döngüsü

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

Görsel Programlama 1

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Belirli bir iş bir çok kez tekrarlanacaksa, programda bu iş bir kez yazılır ve döngü deyimleriyle istenildiği kadar tekrar tekrar çalıştırılabilir.


Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır.

Temel Veri Türü İşlemleri

PAKET TRANSFER SİSTEMİ

Algoritma ve Programlamaya Giriş II JAVA İLE PROGRAMLAMA. Muhammet BAYKARA

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

Yukardaki örneğe dayanarak, aşağıdakiler tanımlar Object Oriented açısından doğrudur:

Java Programlama Dili

ÜNİTE NESNE TABANLI PROGRAMLAMA I İÇİNDEKİLER. Okt. Mustafa AKBUĞA HEDEFLER DOSYA VE KLASÖR İŞLEMLERİ

Klavyeden Basit Giriş/Çıkış İşlemleri

Java diğer programlama dilleri gibi başlı başına bir ürün değildir.

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

PAKET TRANSFER SİSTEMİ

Eln 1001 Bilgisayar Programlama I

Java Class Yapısında Finalize Metotunun Kullanımı

YZM 2105 Nesneye Yönelik Programlama

Transkript:

çindekiler 1 java.io Paketi 1 1.1 Java'da Giri³/Çk³ ³lemleri (I/O) Ksa Tarihçe................................... 1 1.2 System Snf.................................. 3 1.3 java.io Paketi.................................. 4 1.4 Giri³/Çk³ Akmlar.............................. 5 1.5 Byte akmlar (byte streams)................................. 5 1.6 InputStream Snf............................... 6 1.7 OutputStream Snf.............................. 7 1.8 OutputStream Snfnn Tanm........................ 8 1.9 OutputStream Snfnn Metotlar....................... 8 1.10 Al³trmalar................................... 17 1.11 Al³trmalar................................... 20 i

ii ÇINDEKILER ii

Bölüm 1 java.io Paketi 1.1 Java'da Giri³/Çk³ ³lemleri (I/O) Ksa Tarihçe Java'da giri³/çk³ (I/O input/output) i³lemleri, java dilinin geli³im sürecine paralellik gösterir. Geli³im sürecini daha iyi kavrayabilmek için, Java'nn sürümlerinin ortaya çk³ tarihlerine göz atmak yetecektir: Oak (1991) Java 1.0 (1995) JDK (Java Development Kit) 1.0 (23 Ocak 1996) J2SE 1.2 (8 Aralk 1998) J2SE 1.3 (8 Mays 2000) J2SE 1.4 (6 ubat 2002) J2SE 5.0 (30 Eylül 2004) Java SE 6 (11 Aralk 2006) Java SE 7 (28 Temmuz 2008) 1

2 1. java.io paketi J2SE 1.2 ile J2SE 5.0 sürümleri arasndaki sürümlere Java 2 ortak ad verilir. Ama bu sürümler arasnda önemli yetenek farklar oldu unu belirtmeliyiz. Veri akmlar (data streams) eylemi JDK 1.0 sürümüyle geldi. Gereksemeler do dukça Java Beans, JFC, RMI, jdbc gibi API'ler veri akmlarn gölgeleyen uygulamalar geli³tirdiler. Ama, giri³/çk³ akmlar JDK API'nin omurgas olmay sürdürdü. JDK 1.1 sürümüne kadar veri akmlar yalnzca byte akmlarndan ibaret kald. Ba³ka bir deyi³le veriler 8-bitlik diziler halinde akyordu. Gelen veri için InputStream snf, giden veri için OutputStream snf yeterli oluyordu. 16-bitlik Unicode karekterleri için akm, JDK 1.1 sürümünde ele alnd ve java.io.reader ile java.io.writer snar yazld. J2SE 1.4.2 sürümü, giri³/çk³ i³lemlerinde büyük de i³iklik getiren java.nio paketini ortaya koydu. Aslnda bu paket java.io (new io) paketi üzerine kuruludur ve onun yeteneklerini artrr. Java 7 sürümüyle gelen NIO.2 paketi sözkonusu yetenekleri daha da artrd. imdiye dek giri³/çk³ (I/O) i³lemleriyle ilgili örnek programlar yazmadk. Yalnzca, ekran çktlar için System.out.print(), System.out.println() ve System.out.printf() metotlarn içeren basit deyimlerle yetindik. Bunun apaçk bir nedeni vardr. Java programlarnn ço u konsol ile basit text giri- ³/çk³ yapmann ötesindedir. Java'da, ço unlukla, giri³/çk³ i³lemleri için görsel esteti e sahip applet'ler ve ba³ka grak arayüzler kullanr. Bunlar, Java'nn Abstract Windowing Toolkit (awt) ve onun üzerine kurulan javax.swing paketine dayanr. Elbette, konsoldan text tabanl giri³/çk³ i³lemleri, di er dillerde oldu u gibi, Java ö retimi için de önem ta³r. Ama, konsoldan text tabanl giri³/çk³ i³lemleri Java'da snar, nesneleri ve metotlar bilmeyi gerektiriyor. O nedenle, giri³/çk³ i³lemleri bilinçli olarak geriye braklm³tr. Böyle yaplm³ olmasnn, java dilini ö renmeyi geciktirdi i söylenemez. Aksine, bu a³amada, ö renci giri³/çk³ eylemlerini daha iyi kavrayacaktr. Konsoldan giri³ yaplamamas konusundaki ele³tirilere yant olarak, J2SE 5.0 sürümü java.util.scanner snfn ortaya koydu. Bu snf, konsoldan kolay veri giri³ini yapan metotlara sahiptir. Bu snf kullanlarak, java'ya yeni ba³layanlar ilk derslerde konsoldan veri giri³i yapabilirler. Ancak, arka planda olup biteni kavrayabilmesi için, ö rencinin snf ve nesne kavramlarn biliyor olmas gerekir. Aksi halde, Scanner snfnn kullanlmas mekanik bir i³lem olur. 2

1.2. System Snf 3 Baz kaynaklar Java'da giri³/çk³ i³lemlerini gere inden çok karma- ³k bulur. Hattâ, giri³/çk³ i³lemlerini kolayla³tran arayüzlerin yazld da görülür. Oysa, ba³langçta ö renciye karma³k görünen Java'nn giri³/çk³ i³lemleri, ona a³ina olanlara esneklik ve kolaylk sa lar. Java Dili'nde ise giri³/çk³ i³lemleri fortran, cobol, basic, pascal, C gibi prosedural dillerden oldukça farkldr. Bunun apaçk bir nedeni vardr. Prosedural diller, hangi donanm üzerinde ve hangi i³letim sistemi altnda çal³acaksa, ona uyan giri- ³/çk³ yordamlarn tanmlayabilirler. Ancak, birisinde tanml olan yordam ba³kasnda çal³maz. Oysa, Java platformdan ba mszdr. Donanm ve i³letim sistemine ba l olmakszn, a üzerindeki her bilgisayardan veri alabilir ve her bilgisayara veri gönderebilir. Bunu yapabilmesi için, giri³/çk³ yöntemlerinin amaca uygun çe³itlilik göstermesi do aldr. imdiye kadar kullanageldi imiz System snf ile yaplan basit çk³ i³lemlerini anmsaynz. Bunun dayanaklarn giri³, çk³ ve hata i³lemleriyle birlikte geni³ kapsaml olarak ele alaca z. 1.2 System Snf java.lang.object java.lang.system public final class System extends Object Standart giri³/çk³ i³lemlerini yapan snftr. nal nitelemli oldu u için bir nesnesi yaratlamaz. Sistem ile ilgili i³leri yapan 30 dan çok metodu vardr. Örne in, bu metotlar çevre de i³kenlerine eri³im sa lar, dosyalar ve kütüphaneleri yükler, array kopyalayabilir, zaman bildirir, JVM'i sonlandrr, çöp toplaycy çal³trr, v.b. System snfnn giri³, çk³ ve hata yakalama eylemlerinde kullanlan üç önemli de i³keni (eld) vardr: giri³ (in), çk³ (out) ve hata (err) de i³kenleridir. Bunlarn tamnlar ³öyledir: static PrintStream err static InputStream in static PrintStream out Çk³ yoluna "standard" hatalar yollar "standard" giri³ yoludur "standard" çk³ yoludur Tablo 1.1: System Snfnn Nitelemleri 3

4 1. java.io paketi 1.3 java.io Paketi Java'da veri akmn sa layan ilk pakete java.io denilir. Bu pakette yer alan snar, platformdan ba msz olarak, bir ortamdan ba³ka bir ortama veri akmn sa layacak yeteneklere sahiptirler. Java 7 API 'de bunlar 1 http : // download. o r a c l e. com/ javase /7/ docs / api / java / i o /package summary. html web adresinden görülebilir. java.io paketi giri³/çk³ birimleri, dosya sistemleri, a, bellek-alan gibi farkl ortamlarn birinden ötekine veri akmn sa layan ve serile³tirme i³lemlerini yapan arayüzler, snar, metotlar ve hata yakalayclardan olu- ³an büyük bir pakettir. Bu pakette 16 arayüz, 50 snf ve 16 hata yakalayc (exceptions) vardr. Bu pakette yer alan snar ve onlarn içerdi i metotlar kullanlarak her kaynaktan her hedefe veri akmlar yaplabilir. Bu akmlar makina düzeyine yakn oldu u için yetenekleri çoktur, ama hzlar göreli olarak yava³tr. Daha hzl giri³/çk³ i³lemleri için, J2SE 1.4 sürümüyle gelen java.nio (new io) paketi kullanlabilir. Bu bölümde java.io'yu, sonraki bölümde ise java.nio paketini ele alaca z. Java'da byte ve character akmlarn yapan snar ve metotlar, en tepede tanml dört tane soyut snftan elde edilir: 1. InputStream 2. OutputStream 3. Reader 4. Writer Uyar 1. Bu dört soyut snftan elde edilen veri akm (stream) says 60'dan çoktur. Bu kadar çok sayda veri yolunun olmas baz programclara göre ö renme sürecini uzatr ve zorla³trr. Baz programclara göre ise, farkl giri³/çk³ türleri için farkl akmlarn (stream) olmas, programn her donanmda her i³letim sistemi altnda hatasz çal³masn sa lar ve dolaysyla programclar için bir avantaj saylr. Character akmlar için kullanlan teknikler, büyük ölçüde byte akmlar için kullanlan tekniklere benzer. Byte akmn yapan snf adlar ile character akmn yapan snf adlar, ço unlukla son taklaryla birbirlerinden ayrlrlar. Böyle olu³u, ö renmeyi kolayla³tracaktr. 4

1.4. Giri³/Çk³ Akmlar 5 1.4 Giri³/Çk³ Akmlar (Input/Output Streams) Java'da veri giri³/çk³ i³lemlerini, bir yerden ba³ka bir yere (byte dizileri halinde) akan veriler olarak dü³ünebiliriz. Böyle olunca, basit veri giri- ³/çk³ (I/O) i³lemlerini a³an çok kapsaml bir olgu kar³mza çkar. Veriler, bir kanaldan akan su gibi bir yerden ba³ka bir yere aktlr. Bu ak³, basitçe, ayn makinada bir bellek alanndan ba³ka bir bellek alanna olabilece i gibi uzaktaki iki makinann birinden ötekine de olabilir. Verinin kalk³ ya da var³ yerleri bir bellek alan, bir dosya, a üzerinde bir bilgisayarn kayt ortam gibi veri tutabilen bir yerdir. Tabii, bunlara klâvye, ekran, ses birimleri ve benzerleri gibi çevre birimlerini de eklemek gerekir. Verinin geldi i ve gitti i ziksel ortamlar birbirlerinden tamamen farkl olsalar bile, Java'da giri³/çk³ akmlar birbirine benzer. Dolaysyla, Java'nn I/O snar her türlü veriye ve donanma uygulanabilecek esnekli e ve kolay kullanlma özeli ine sahiptirler. Her ³eyden önce, Java'da veri akmlarnn iki ana gruba ayrld n söylemeliyiz: 1. Byte akmlar (byte streams) 2. Character akmlar (character streams) Byte akmlar binary verilerin giri³/çk³n yaparlar. Karekter tipinden olmayan resim, grak, ses ve benzer verileri ta³yan bütün veri akmlar byte akmlar'dr. Karekter akmlar, adndan da anla³laca üzere, char tipinden verilerin giri³/çk³n yapar. Unicode kulland için, farkl ülkelerin alfabelerine uyum sa lar. Bazan, programc için, karekter akmlar byte akmlarndan daha kolay uygulanr. Ama, bütün akmlarn esasta byte akmlar oldu unu, karakter akmnn onun üzerine kuruldu unu bilmeliyiz. Önceden belirtildi i üzere, (Java 1.0) sürümünde karekter akm yoktu. Bütün giri³/çk³ i³lemleri byte akmlar olarak düzenlenmi³ti. JDK 1.1, bu eksikli i görmü³ ve karakter akmlarn sisteme katm³tr. 1.5 Byte akmlar (byte streams) Java'da byte giri³/çk³ i³lemleri java.io paketi içindeki InputStream ve OutputStream snar ve bunlarn altsnar tarafndan yaplr. Byte akm ya- 5

6 1. java.io paketi InputStream BufferedInputStream ByteArrayInputStream DataInputStream FilterInputStream PrintStream PushbackInputStream RandomAccessFile FileInputStream PipedInputStream SequenceInputStream OutputStream BufferedOutputStream ByteArrayOutputStream DataOutputStream FileOutputStream FilterOutputStream PipedOutputStream Tablo 1.2: Byte Akmlar pan altsnardan bazlar Tablo 1.2'de listelenmi³tir. Java 7 'nin API'sinde bunlarn hiyerar³ik yaps a³a da gösterilmi³tir. java. lang. Object java. i o. InputStream 4 java. lang. Object java. i o. OutputStream Giri³/çk³ snarndan birisini kullanmak için java.io paketinin d- ³alm (import) gereklidir. InputStream ve OutputStream snarnn önemli metotlar vardr. Bu metotlar öteki akm snar ça rabilir. Bunlar arasnda çok kullanlan iki tanesi read() ve write() metotlardr. Bunlar verileri byte olarak okur ve yazarlar. Her iki metot soyuttur (abstract). Dolaysyla, ça ran snara ait nesnelerde override edilirler. Önce InputStream snfn ele alaca z. 1.6 InputStream Snf InputStream Snfnn Klglad Arayüzler Closeable, AutoCloseable InputStream Snfnn Altsnar Tablo 1.3, InputStream snfnn altsnarn göstermektedir. Bu altsnar, soyut InputStream snfnn soyut metotlarn kendi amaçlar için tanmlarlar (polimorzm). Örne in, FileInputStream altsnfnn read() metodu giri³ yolundan bir seferde bir byte okur. Ama read(byte[] b) metodu bir seferde bir byte dizisi okur. 6

1.7. OutputStream Snf 7 AudioInputStream ByteArrayInputStream FileInputStream FilterInputStream InputStream ObjectInputStream PipedInputStream SequenceInputStream StringBuerInputStream Tablo 1.3: InputStream Snfnn Altsnar InputStream Snfnn Metotlar int available() void close() void mark(int readlimit) boolean marksupported() abstract int read() int read(byte[] b) int read(byte[] b, int o, int n) void reset() long skip(long n) Okunabilecek byte saysn bildirir. Giri³ yolunu kapatr ve yolu, ba l oldu u kaynaktan ayrr. Giri³ yolunda hangi konumda olundu unu bildirir. Giri³ yolunun i³aretleri ve reset metodunu destekleyip desteklemedi ini test eder. Veri yolunda sonraki byte' okur. Giri³ yolundan okudu u byte'lar buerda b arrayine koyar. Giri³ yolundan n tane byte okur ve b arrayine koyar. mark metodunu önceki ça rdaki konumuna gönderir. Giri³ yolunda n tane byte atlar (okumaz). Tablo 1.4: InputStream Snfnn Metotlar InputStream Snfnn Bildirimi java. lang. Object extended by java. i o. InputStream Tablo 1.4'den görüldü ü gibi, InputStream snfnn soyut abstract int read ( ) metodu kaynaktan bir byte okur; okudu u byte o anda metodun verdi i de erdir. E er kaynakta okunacak byte kalmam³sa -1 de erini verir. Gene listeden görüldü ü gibi, InputStream snfnn soyut olmayan read() metotlar da vardr. Bunlar birden çok byte' bir seferde okuyan (ya da istenirse okumadan atlayan) metotlardr. Farkl i³levleri olan read() metotlar farkl parametreleriyle birbirlerinden ayrt edilirler (override). 1.7 OutputStream Snf 7

8 1. java.io paketi java. lang. Object java. i o. OutputStream OutputStream Snfnn Klglad Arayüzler Closeable, Flushable, AutoCloseable OutputStream Snfnn Altsnar Tablo 1.5 OutputStream snfnn altsnarn göstermektedir. ByteArrayOutputStream FileOutputStream FilterOutputStream ObjectOutputStream OutputStream PipedOutput Stream Tablo 1.5: InputStream Snfnn Altsnar OutputStream snf, InputStream snfnn kar³l dr. Bütün çk³ akm snarnn üstsnfdr. Çk³ birimine akm yazmak için gerekli yeteneklere sahip de i³kenleri, metotlar ve altsnar içerir. 1.8 OutputStream Snfnn Tanm Program 1.8.1. 4 { public abstract class java. i o. OutputStream extends java. lang. Object // öntanml ( d e f a u l t ) kurucu public OutputStream ( ) ; FilterOutputStream Snfnn Altsnar Tablo 1.6 FilterOutputStream snfnn altsnarn gösteriyor. 1.9 OutputStream Snfnn Metotlar void close() Açk çk³ akmn kapatr ve onun kulland sistem kaynaklarn serbest brakr. 8

1.9. OutputStream Snfnn Metotlar 9 BueredOutputStream CipherOutputStream DeaterOutputStream InaterOutputStream CheckedOutputStream DataOutputStream DigestOutputStream PrintStream Tablo 1.6: FilterOutputSream Snfnn Altsnar void ush() Çk³ yolunda ya da buer'da olan bütün verileri hedefe gönderir. void write(byte[ b)] b.length uzunluktaki byte array'i hedefe gönderir. void write(byte[ b, int m, int n)] m-inci byte'den ba³layarak n tane byte' hedefe gönderir. abstract void write(int b) b byte'n hedefe gönderir. OutputStream snfn kullanma teknikleri ile InputStream snfn kullanma teknikleri birbirlerine benzer. Byte Kopyala Program?? Melih Cevdet Anday'n Defne Orman adl ³iirinin bir ktasn kopyalyor. iirin ilk ktasn "defne.txt" adyla, ByteKopyala.class bytecode dosyasnn oldu u dizine koyunuz. Sonra komut satrndan java ByteKopyala deyimini yaznz. "defne.txt" dosyasnn "outdefne.txt" adyla kopyaland- n göreceksiniz. defne.txt: / DEFNE ORMANI 4 Köle s a h i p l e r i ekmek kaygusu çekmedikleri i ç i n f e l s e f e y a p y o r l a r d, çünkü Ekmeklerini k ö l e l e r veriyordu onlara ; K öleler ekmek kaygusu çekmedikleri i ç i n F e l s e f e yapmyorlard, çünkü ekmeklerini 9 köle s a h i p l e r i veriyordu onlara... Melih Cevdet Anday / 9

10 1. java.io paketi 4 Program 1.9.1. import java. i o. FileInputStream ; import java. i o. FileOutputStream ; import java. i o. IOException ; public class ByteKopyala { public static void main ( String [ ] args ) throws IOException { FileInputStream i n = null ; FileOutputStream out = null ; 9 try { in = new FileInputStream (" defne. txt " ) ; out = new FileOutputStream ("outdefne. txt " ) ; int c ; 14 while ( ( c = in. read ( ) )!= 1) { out. write ( c ) ; finally { 19 if ( in!= null ) { in. c l o s e ( ) ; if ( out!= null ) { out. c l o s e ( ) ; 24 / outdefne. txt 3 / Karekter Kopyala Program 1.9.2 bir text dosyasn kopyalyor. Bunu yaparken byte akmlar yerine, dosyay karekter karekter kopyalyor. Program 1.9.2. import java. i o. FileReader ; 2 import java. i o. FileWriter ; import java. i o. IOException ; public class KarekterKopyala { public static void main ( String [ ] args ) throws IOException { 10

1.9. OutputStream Snfnn Metotlar 11 7 FileReader g i r i ³ = null ; FileWriter ç k ³ = null ; try { g i r i ³ = new FileReader ( "mca. txt " ) ; 12 ç k ³ = new FileWriter ( "gitanday. txt ") ; int c ; while ( ( c = g i r i ³. read ( ) )!= 1) { ç k ³. write ( c ) ; 17 finally { if ( g i r i ³!= null ) { g i r i ³. c l o s e ( ) ; 22 if ( ç k ³!= null ) { ç k ³. c l o s e ( ) ; 27 Satr Kopyala Program 1.9.3 bir text dosyasn kopyalyor. Bunu yaparken byte byte ya da karekter karekter kopyalamak yerine, bir seferde bir satr kopyalyor. Program 1.9.3. import java. i o. FileReader ; import java. i o. FileWriter ; 3 import java. i o. BufferedReader ; import java. i o. PrintWriter ; import java. i o. IOException ; public class SatrKopyala { 8 public static void main ( String [ ] args ) throws IOException { BufferedReader giri³akm = null ; PrintWriter çk³akm = null ; try { 13 giri³akm = new BufferedReader ( new FileReader ( "mca. txt " ) ) ; çk³akm = new PrintWriter ( new FileWriter ( "outmca. txt " ) ) ; 18 String l ; 11

12 1. java.io paketi while ( ( l = giri³akm. readline ( ) )!= null ) { çk³akm. p r i n t l n ( l ) ; finally { 23 if ( g iri³akm!= null ) { giri³akm. c l o s e ( ) ; if ( çk³akm!= null ) { çk³akm. c l o s e ( ) ; 28 Klavyeden Integer Oku Program 1.9.4 klavyeden girilen satr okuyor. Onu Integer tipe dönü³türüyor. Sonra saynn pozitif mi, negatif mi oldu unu söylüyor. E er klavyeden girilen atr Integer tipine dönü³emiyorsa, derleyici, NumberFormatException hatas atar. Program 1.9.4. import java. i o. ; class NumberTest { 4 public static void main ( String [ ] args ) throws IOException { BufferedReader s t d i n = new BufferedReader ( new InputStreamReader ( System. i n ) ) ; String s t r ; 9 int num; 14 System. out. p r i n t l n (" Bir tam s a y g i r i n i z : ") ; s t r = s t d i n. readline ( ) ; num = I n t e g e r. parseint ( s t r ) ; // str, i l g i l i s n f a gömülüyor if ( num < 0 ) // beklenen dallanma { System. out. p r i n t l n ( num + " s a y s n e g a t i f t i r ") ; 19 else // beklenmeyen dallanma { System. out. p r i n t l n ( num + " s a y s p o z i t i f t i r ") ; 12

1.9. OutputStream Snfnn Metotlar 13 24 System. out. p r i n t l n ("Son" ) ; / Bir tam s a y g i r i n i z : 123 123 s a y s p o z i t i f t i r 5 / Dosyadan Double Say Oku Program 1.9.5. package nio ; import java. i o. FileReader ; import java. i o. BufferedReader ; 5 import java. i o. IOException ; import java. u t i l. Scanner ; import java. u t i l. Locale ; public class K e s i r l i { 10 public static void main ( String [ ] args ) throws IOException { Scanner s = null ; double sum = 0 ; try { s = new Scanner ( 15 new BufferedReader ( new FileReader ( " pi. txt " ) ) ) ; s. uselocale ( Locale.US) ; while ( s. hasnext ( ) ) { 20 if ( s. hasnextdouble ( ) ) { sum += s. nextdouble ( ) ; else { s. next ( ) ; 25 finally { s. c l o s e ( ) ; 30 System. out. p r i n t l n (sum) ; 13

14 1. java.io paketi / 3. 14159 3 / 2 Program 1.9.6. package de. v o g e l l a. java. i o ; import java. i o. BufferedReader ; import java. i o. BufferedWriter ; import java. i o. FileNotFoundException ; import java. i o. FileReader ; 7 import java. i o. FileWriter ; import java. i o. IOException ; public class MyFile { 12 public String readtextfile ( String filename ) { String returnvalue = "" ; FileReader f i l e ; String l i n e = "" ; try { 17 f i l e = new FileReader ( filename ) ; BufferedReader reader = new BufferedReader ( f i l e ) ; while ( ( l i n e = reader. readline ( ) )!= null ) { returnvalue += l i n e + "\n" ; 22 catch ( FileNotFoundException e ) { throw new RuntimeException (" F i l e not found ") ; catch ( IOException e ) { throw new RuntimeException ("IO Error occured ") ; 27 return returnvalue ; public void writetextfile ( String filename, String s ) { 32 FileWriter output ; try { output = new FileWriter ( filename ) ; BufferedWriter w r i t e r = new BufferedWriter ( output ) ; w r i t e r. write ( s ) ; 37 catch ( IOException e ) { e. printstacktrace ( ) ; 42 14

1.9. OutputStream Snfnn Metotlar 15 / 3 / Program 1.9.7. package j a v a i o ; 2 / BinOITest. java program binary dosya yazar ve onu okur / import java. i o. ; 7 class Demo { public static void main ( String [ ] args ) throws IOException { DataOutputStream out = new DataOutputStream ( new FileOutputStream ( "bindosya") ) ; 12 double x = 1. 0 ; int count = 10; out. w r i t e I n t ( count ) ; for ( int i = 0 ; i < count ; i++) { out. writedouble ( x ) ; 17 x = x / 9. 0 ; out. c l o s e ( ) ; DataInputStream i n = new DataInputStream ( new FileInputStream (" bindosya") ) ; 22 count = in. readint ( ) ; for ( int i = 0 ; i < count ; i++) { System. out. p r i n t l n ( in. readdouble ( ) ) ; 27 / 1.0 3 0. 1111111111111111 0. 012345679012345678 0. 0013717421124828531 1. 5241579027587256E 4 1. 6935087808430286E 5 8 1. 8816764231589206E 6 2. 0907515812876894E 7 2. 323057312541877E 8 2. 5811747917131966E 9 / Program 1.9.8. 15

16 1. java.io paketi package j a v a i o ; / 3 DataInputStreamDemo. java b i r g i r i ³ akm y a r a t r v e r i okur / import java. i o. ; 8 class DataInputStreamDemo { public static void main ( String [ ] args ) { 13 try { // Create a f i l e input stream FileInputStream f i s = new FileInputStream ("oku. txt " ) ; 18 // Create a data input stream DataInputStream d i s = new DataInputStream ( f i s ) ; // Read and d i s p l a y data 23 System. out. p r i n t l n ( d i s. readboolean ( ) ) ; System. out. p r i n t l n ( d i s. readbyte ( ) ) ; System. out. p r i n t l n ( d i s. readchar ( ) ) ; System. out. p r i n t l n ( d i s. readdouble ( ) ) ; System. out. p r i n t l n ( d i s. readfloat ( ) ) ; 28 System. out. p r i n t l n ( d i s. readint ( ) ) ; System. out. p r i n t l n ( d i s. readlong ( ) ) ; System. out. p r i n t l n ( d i s. readshort ( ) ) ; // Close f i l e input stream 33 f i s. c l o s e ( ) ; catch ( Exception e ) { System. out. p r i n t l n (" Exception : " + e ) ; 38 1 / true 114? 1. 0218 6 1. 0429 892739 332827 13108 / 16

1.10. Al³trmalar 17 5 Program 1.9.9. package j a v a i o ; // : i o / StoringAndRecoveringData. java import java. i o. ; public class StoringAndRecoveringData { public static void main ( String [ ] args ) throws IOException { DataOutputStream out = new DataOutputStream ( new BufferedOutputStream ( new FileOutputStream ("Data. txt " ) ) ) ; 10 out. writedouble (3.14159) ; out. writeutf ( "That was pi " ) ; out. writedouble (1.41413) ; out. writeutf ( " Square root of 2") ; out. c l o s e ( ) ; 15 DataInputStream i n = new DataInputStream ( new BufferedInputStream ( new FileInputStream ("Data. txt " ) ) ) ; System. out. p r i n t l n ( in. readdouble ( ) ) ; // Only readutf ( ) w i l l recover the // Java UTF String properly : 1 / / 1.10 Al³trmalar Program 1.10.1, a dizini içindeki "vatan.txt" dosyasn, b dizini içindeki "out- Vatan.txt" adl dosyaya yazyor (kopyalyor). Programn kaynak ve hedef dizinleri bulabilmesi için, DosyaKopyala.class adl bytecode'un bulundu u dizin içinde a alt dizini ile b alt dizinini yaratnz. a dizini içine "vatan.txt" dosyasn koyunuz. vatan.txt: VATAN Ç N Neler yapmadk ³u vatan için! Kimimiz öldük; Kimimiz nutuk söyledik. ---Orhan Veli Kank--- 17

18 1. java.io paketi Program 1.10.1. 1 package javanio ; import java. i o. FileInputStream ; import java. i o. FileOutputStream ; import java. nio. ByteBuffer ; 6 import java. nio. channels. FileChannel ; public class DosyaKopyala { static public void main ( String args [ ] ) throws Exception { 11 FileInputStream gelendosya = new FileInputStream (". / a/ vatan. txt " ) ; FileOutputStream gidendosya = new FileOutputStream (". / b/ outvatan. out ") ; 16 FileChannel gelenkanal = gelendosya. getchannel ( ) ; FileChannel gidenkanal = gidendosya. getchannel ( ) ; ByteBuffer bb = ByteBuffer. a l l o c a t e (1024) ; while ( true ) { int ch = gelenkanal. read (bb) ; 21 if ( ch == 1) { break ; bb. f l i p ( ) ; gidenkanal. write (bb) ; 26 bb. c l e a r ( ) ; 1 / /. / b/outvatan. txt dosyas Açklamalar: Kaynak dosyann okunaca dizin ile hedef dosyann yazlaca dizinlerin varolmas gerekir. Aksi halde, derleyici hata atar. Kaynak dosyann okunaca a dizini yoksa, derleyici java. i o. FileNotFoundException :. \ a\ vatan. txt ( Sistem b e l i r t i l e n yolu bulamyor ) hata iletisini; heden yazlaca b dizini yoksa, 18

1.10. Al³trmalar 19 java. i o. FileNotFoundException :. \ b\ outeinstein. txt ( Sistem b e l i r t i l e n yolu bulamyor ) hata iletisini atar. 11. ve 12. satrlardaki FileInputStream gelendosya = new FileInputStream (". / a/ vatan. txt " ) ; FileOutputStream gidendosya = new FileOutputStream (". / b/ outvatan. out ") ; deyimler, srasyla, giri³ akm (input stream) ile çk³ akm (output stream) nesnelerini yaratrlar. 14.ve 15 satrlardaki FileChannel gelenkanal = gelendosya. getchannel ( ) ; FileChannel gidenkanal = gidendosya. getchannel ( ) ; deyimleri, srasyla giri³ ve çk³ kanallarn (nesnelerini) yaratrlar. 17.satrkaki ByteBuffer bb = ByteBuffer. a l l o c a t e (1024) ; deyimi, kaynaktan gelip hedefe giden verinin geçici süreyle içinde duraca bb adl veri kabna (buer) ana bellekte yer açar. Açlan buer 1024 byte uzunluktadr. Kaynaktan srayla gelen veriler (byte) buraya bir array halinde yerle³eceklerdir. 19.satrdaki while döngüsü, kaynak dosyann ba³ndan ba³lar, sonuna kadar her seferinde bir byte (8 bit) veriyi alr ve bb ye koyar. Aslnda bu i³i yapan deyim 20.satrdaki int ch = gelenkanal. read (bb) ; deyimidir. Bu deyim, kaynaktan gelen 1 byte' bb içine koyar. While döngüsü, bu eylemi, okunacak veri (byte) kalmayana kadar tekrarlar. Giri³ kanalndan 1 geldi inde, döngü, kaynak dosyann sonuna gelindi ini, dolaysyla dosyada okunacak ba³ka veri kalmad anlar. Bu olay olunca, break deyimi while döngüsünü durdurur. 24.satrdaki bb. f l i p ( ) ; deyimi, bb nin giri³ kapsn kapatr, çk³ kapsn açar. 19

20 1. java.io paketi 25.satrdaki gidenkanal. write (bb) ; deyimi, bb içindeki bütün veriyi çk³ kanalna gönderir; o kanal veriyi hedef dosyaya yazar. bb. c l e a r ( ) ; deyimi, buerdaki bütün verinin gidi³ kanalna gitmesini; böylece buer'n tamamen bo³altlmasn sa lar. Bu eylem, buerda veri kalma olasl n ortadan kaldrr; çünkü kalanlar varsa onlarn hepsini çk³ kanalna gönderir. 1.11 Al³trmalar 20

Kaynakça 21

Dizin öntanml, 8 API, 2 AudioInputStream, 6, 8 AutoCloseable, 6, 8 available(), 7 byte, 4 byte akmlar, 5 byte streams, 5 ByteArrayInputStream, 6, 8 character streams, 5 close(), 7, 8 Closeable, 6, 8 err, 3 FileInputStream, 6, 8 FilterInputStream, 6, 8 ush(), 8 ObjectInputStream, 6, 8 out, 3 OutputStream Snf, 7 PipedInputStream, 6, 8 reset(), 7 RMI, 2 SequenceInputStream, 6, 8 skip(), 7 soyut snf, 4 StringBuerInputStream, 6, 8 Unicode, 4 write(), 8 write(byte[] b), 8 write(byte[] b, int m, int n), 8 write(int b), 8 giri³/çk³, 1 I/O, 1 in, 3 Input Output Stream, 5 input/output, 1 InputStream, 6, 8 java.io, 1, 7 java.io Paketi, 4 JavaBeans, 2 JFC, 2 karekter akmlar, 5 kurucu, 8 mark(), 7 22