Java’da Dosya ve Okuma Yazma

15. Java Dosyalama İşlemleri

15.1 Dosya Okuma ve Yazma
Stream, bir veri dizisi olarak tanımlanabilir. InputStream, bir kaynak dosyadan veri okumak için ve OutputStream bir hedef dosyaya veri yazmak için kullanılır.
Burada, Input ve Output stream’ler ile ilgili siniflarin hiyerarþisi gösterilmektedir:

Ana Sayfa

Bu bölümde, iki önemli stream olan FileInputStream ve FileOutputStream ele alınacaktir.

15.2 FileInputStream

Bu stream, dosyalardan veri okumak için kullanilir. Nesneler, new anahtar sözcügü kullanilarak olusturulur ve birçok türde constructor mevcuttur.
Asagidaki constructor, dosya okuma amaciyla bir input stream nesnesi olusturmak için türü string olan bir dosya ismi alir.

Ana Sayfa

Aşağıdaki constructor, dosya okuma amacıyla bir input stream nesnesi oluşturmak için bir dosya nesnesi alır. İlk olarak, File() metodunu kullanarak aşağıdaki gibi bir dosya nesnesi oluştururuz:

Ana Sayfa

Bir kere, InputStream nesnesi elinizde mevcutsa, stream okumak için kullanabileceğiniz veya stream üzerinden farklı  işlemler yapabileceğiniz listede gösterilen yardımcı metotları kullanabilirsiniz.

Ana Sayfa

15.3 FileOutputStream

FileOutputStream, bir dosya oluşturup içine veri yazmak için kullanılır. Stream, output için açılmadan önce, bir dosya yaratacaktır.(eğer önceden oluşturulmadıysa) Burada, FileOutputStream nesnesi oluşturmak için kullanılan iki constructor gösterilmektedir.
Aşağıdaki constructor, dosyaya yazma amacıyla bir input stream nesnesi oluşturmak için türü string olan bir dosya ismi alır.
Ana Sayfa

Asagidaki constructor, dosyaya yazma amaciyla bir input stream nesnesi olusturmak için bir dosya nesnesi alir. Ilk olarak, File() metodunu kullanarak asagidaki gibi bir dosya nesnesi olustururuz:

Ana Sayfa

Bir kere , OutputStream nesnesi elinizde mevcutsa, stream’e yazmak için kullanalabileceginiz veya stream üzerinden farkli islemler yapabileceginiz listede gösterilen yardimci metotlari kullanabilirsiniz.

Ana Sayfa

Örnek:
Asagida, InputStream ve OutputStream örnekleri gösterilmektedir:

Ana Sayfa

Yukaridaki kod, test.txt dosyasini olusturup, verilen karakterleri içine yazacaktir. Aynisi, stdout ekraninda gösterilecektir.

 

15.4 Dosya Navigasyonu ve I/O

Dosya Navigasyonu ve I/O temellerini öğrenmek için inceleyeceğimiz birkaç sınıf vardır.

  • FileReader Sınıfı
  • FileWriter Sınıfı
  • File Sınıfı

File Reader

Bu sınıf, InputStream sınıfından miras alır. FileReader, karakter streamlerini okuma için kullanılır. Aşağıdaki syntax , okumak için File nesnesi verilen yeni bir FileReader nesnesi oluşturur.

FileReader(File file)

 

File Writer

Bu sınıf, OutputStream sınıfından miras alır. Bu sınıf, karakter streamlerini yazma için kullanılır. Aşağıdaki syntax, File nesnesi verilen bir FileWriter nesnesi oluşturur.

FileWriter(File file)

Örnek:

Aşağıda bu sınıflarla ilgili örnek gösterilmektedir:

import java.io.*;

public class FileRead{
public static void main(String args[])throws IOException{
File file = new File(“Hello1.txt”);
// creates the file
file.createNewFile();
// creates a FileWriter Object
FileWriter writer = new FileWriter(file);
// Writes the content to the file
writer.write(“This\n is\n an\n example\n”);
writer.flush();
writer.close();
//Creates a FileReader Object
FileReader fr = new FileReader(file);
//Creates a LineNumberReader Object
LineNumberReader lnreader = new LineNumberReader(fr);
String line = “”;
while ((line = lnreader.readLine()) != null) {
System.out.println(lnreader.getLineNumber() + “: ” + line);
}
fr.close();
}
}

Bu aşağıdaki sonucu üretecektir:

1: This
2: is
3: an
4: example

15.4 Java Dizinleri

Dizinleri Oluşturma

Burada, dizin oluşturmak için kullanılan iki adet File yardımcı metotları gösterilmektedir:

  • mkdir() metot dizin oluşturur, başarılı(succes) durumda true değer, başarısız(failure) durumda iste false değer döndürür. Failure, File nesnesinde belirlenen yolun zaten var olması veya bütün yolun var olmamasından dolayı dizinin oluşturalamamasını belirtir.
  • mkdirs() metodu, hem dizini oluşturur hem de dizinin bütün üst öğelerini oluşturur.

Aşağıdaki örnek, “c:/java/example/folder” dizinini oluşturur:

import java.io.File;

public class CreateDir {
public static void main(String args[]) {
String dirname = "c:/java/example/folder";
File d = new File(dirname);
// Create directory now.
if(d.mkdirs())
{ System.out.print(“created”); }
else
{
System.out.print(“error! Not created”); }
}
}

Not: Java, UNIX ve Windows’taki yol ayırıcılarının kurallara göre olmasına otomatik olarak dikkat eder. Eğer , Java’nın Windows versiyonunda ileri slash(/) kullanırsanız, yol yinede doğru şekilde çözümlenecektir.

Dizinleri okuma

Dizin, diğer dosyaların ve dizinlerin listesini içeren bir File nesnesidir. Bir File nesnesi yarattığınızda ve bu bir dizinse, isDirectory() metodu true değer döndürecektir.

Nesnenin içindeki diğer dosyalar ve dizinlerin listesini çıkartmak için list() metodunu çağırabilirsiniz. Burada gösterilen program, dizin içeriğini almak için list() metodunun ne şekilde kullanacağınızı örneklemektedir.

import java.io.File;
public class DirList {
public static void main(String args[]) {
String dirname = "c:/mysql";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println( "Directory of " + dirname);
String s[] = f1.list();
for (int i=0; i < s.length; i++) {
File f = new File(dirname + "/" + s[i]);
if (f.isDirectory()) {
System.out.println(s[i] + " is a directory");
} else {
System.out.println(s[i] + " is a file");
}
}
} else {
System.out.println(dirname + " is not a directory");
}
}
}

Bu aşağıdaki sonucu üretecektir:

Directory of /mysql
bin is a directory
lib is a directory
demo is a directory
test.txt is a file
README is a file
index.html is a file
include is a directory