4 Aralık 2019 Çarşamba

FileChannel Sınıfı- NIO

Giriş
Şu satırı dahil ederiz. Bu sınıf soyuttur. Gerçekleştiren sınıflar belirtilmiyor.
import java.nio.channels.FileChannel;
Önemli Notlar
1. Bu sınıfın kardeşi AsynchronousFileChannel  sınıfıdır.

2. Dosyanın işletim sistemi tarafından kilitlenmesini sağlar. Böylece aynı dosyaya başka uygulamanın erişmesi engellenebilir.

3. seek() ve position() çağrıları ile belirtilen konuma gitmek mümkün. Kullanması daha kolay olan olan RandomAccessFile Sınıfı da benzer şekilde seek() ve position() çağrıları sunuyor.

Yaratma
Normalde bu nesneyi yaratmak için open() metodu kullanılır. Ancak mevcut açık dosya sınıfları da bu nesnesi dönebilirler.

Örnek - FileInputStream
Şöyle yaparız.
FileChannel fc = new FileInputStream(...).getChannel();
Örnek - FileOutputStream
Şöyle yaparız.
FileChannel fc = new FileOutputStream(...).getChannel();
Örnek - RandomAccessFile
Şöyle yaparız.
// Get a file channel for the file
File file = new File("filename");
FileChannel fc = new RandomAccessFile(file, "rw").getChannel();
close metodu
Şöyle yaparız.
fc.close();
lock metodu
FileLock nesnesi oluşturur. Şöyle yaparız.
FileChannel fc = ...;

// Use the file channel to create a lock on the file.
// This method blocks until it can retrieve the lock.
FileLock lock = fc.lock();
map metodu
MappedByteBuffer nesnesi döner.
Örnek
Okumak için şöyle yaparız. İkinci parametre offset, üçüncü parametre length içindir.
MappedByteBuffer mbb = fc.map(MapMode.READ_ONLY, 0, 4l);
Örnek
Yazmak için şöyle yaparız.
MappedByteBuffer mbb = fc.map(
  FileChannel.MapMode.READ_WRITE,
  0,                            // offset
  array.length * Integer.BYTES  // length
);
open metodu - Path
Örnek
Okumak için şöyle yaparız.
String fname = ...;
try (FileChannel fc = FileChannel.open(Paths.get(fname))) {
  ...
} catch (IOException ex) {
  ...
}
Örnek - READ
Şöyle yaparız.
Path path = ...;
try (FileChannel fileChannel = FileChannel.open(path,StandardOpenOption.READ)) {
  ...
}
Örnek - Lock Dosyası
Lock dosyası için şöyle yaparız.
// open/create test file
fc = FileChannel.open(file, StandardOpenOption.READ,
                            StandardOpenOption.WRITE, StandardOpenOption.CREATE,
                            StandardOpenOption.DELETE_ON_CLOSE
                      );

Örnek - WRITE
Yazmak için şöyle yaparız.
FileChannel fc = FileChannel.open(Paths.get("a.txt"),StandardOpenOption.WRITE);
Örnek - TRUNCATE_EXISTING
Mevcut dosyayı sıfırlama ve okuma ve yazma için şöyle yaparız.
File file = ...;
try (FileChannel fc = FileChannel.open(
  file.toPath(),
  StandardOpenOption.READ,
  StandardOpenOption.WRITE,
  StandardOpenOption.CREATE,
  StandardOpenOption.TRUNCATE_EXISTING
)) {
  ...
}
Örnek - DELETE_ON_CLOSE
Uygulama kapanırken dosya silinsi diye şöyle yaparız.
Path name = Paths.get("delete.me");
MappedByteBuffer mapped;
try(FileChannel fc1 = FileChannel.open(name, READ,WRITE,CREATE_NEW,DELETE_ON_CLOSE)) {
  mapped = fc1.map(FileChannel.MapMode.READ_WRITE, 0, 4096);
}
position metodu
Şöyle yaparız.
fc.position(14);
size metodu
Şöyle yaparız.
FileChannel fc = ...;

System.out.println("size is " + (fc.size() >> 10) + " KB");
transferFrom metodu
Destination Channel nesnesine, Source Channel nesnesinden kopyalama yapar. Şöyle yaparız.
FileChannel source = ...;
FileChannel destination = ...;
destination.transferFrom(source, 0, source.size());
transferTo metodu
FileChannel.transferTo yazısına taşıdım

tryLock metodu
FileLock nesnesi oluşturur. Oluşturamazsa null döner. Şöyle yaparız.
FileChannel fc = ...
FileLock lock = fc.tryLock();
if(lock != null){
  ...
}
write metodu
Örnek
Şöyle yaparız.
ByteBuffer buf = ...;
fc.write (buf);
Örnek
Kilidi otomatik olarak alıp bırakmak için şöyle yaparız.
try(final FileOutputStream fos = new FileOutputStream(".queue", true);
    final FileChannel chan = fos.getChannel()){
    chan.lock();
    chan.write(ByteBuffer.wrap(message.getBytes()));
}



Hiç yorum yok:

Yorum Gönder