Java by API/java.nio.channels/FileChannel

Материал из Java эксперт
Перейти к: навигация, поиск

FileChannel: close()

   <source lang="java">
  

import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class MainClass {

 public static void main(String args[]) {
   RandomAccessFile randomAccessFile;
   FileChannel fileChannel;
   ByteBuffer byteBuffer;
   try {
     randomAccessFile = new RandomAccessFile("test.txt", "rw");
     fileChannel = randomAccessFile.getChannel();
     byteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, 26);
     for (int i = 0; i < 10; i++)
       byteBuffer.put((byte) ("A" + i));
     fileChannel.close();
     randomAccessFile.close();
   } catch (IOException exc) {
     System.out.println(exc);
     System.exit(1);
   }
 }

}



 </source>
   
  
 
  



FileChannel: lock(long position, long size, boolean shared)

   <source lang="java">

import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; public class Main {

 public static void main(String[] argv) throws Exception {
   String filename = "test.dat";
   RandomAccessFile raf1 = new RandomAccessFile(filename, "rw");
   FileChannel fc1 = raf1.getChannel();
   RandomAccessFile raf2 = new RandomAccessFile(filename, "rw");
   FileChannel fc2 = raf2.getChannel();
   System.out.println("Grabbing first lock");
   FileLock lock1 = fc1.lock(0L, Integer.MAX_VALUE, false);
   System.out.println("Grabbing second lock");
   FileLock lock2 = fc2.lock(5, 10, false);
   System.out.println("Exiting");
 }

}

 </source>
   
  
 
  



FileChannel: map(MapMode mode, long position, long size)

   <source lang="java">
  

import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.IntBuffer; import java.nio.channels.FileChannel; public class Main {

 public static void main(String[] args) throws IOException {
   FileChannel fc = new RandomAccessFile(new File("temp.tmp"), "rw").getChannel();
   IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size()).asIntBuffer();
   ib.put(0);
   for (int i = 1; i < 10; i++)
     ib.put(ib.get(i - 1));
   fc.close();
 }

}


 </source>
   
  
 
  



FileChannel.MapMode.READ_ONLY

   <source lang="java">
  

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class MainClass {

 public static void main(String args[]) {
   FileInputStream fIn;
   FileOutputStream fOut;
   FileChannel fIChan, fOChan;
   long fSize;
   MappedByteBuffer mBuf;
   try {
     fIn = new FileInputStream(args[0]);
     fOut = new FileOutputStream(args[1]);
     fIChan = fIn.getChannel();
     fOChan = fOut.getChannel();
     fSize = fIChan.size();
     mBuf = fIChan.map(FileChannel.MapMode.READ_ONLY, 0, fSize);
     fOChan.write(mBuf); // this copies the file
     fIChan.close();
     fIn.close();
     fOChan.close();
     fOut.close();
   } catch (IOException exc) {
     System.out.println(exc);
     System.exit(1);
   } catch (ArrayIndexOutOfBoundsException exc) {
     System.out.println("Usage: Copy from to");
     System.exit(1);
   }
 }

}



 </source>
   
  
 
  



FileChannel.MapMode.READ_WRITE

   <source lang="java">
  

import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.IntBuffer; import java.nio.channels.FileChannel; public class Main {

 public static void main(String[] args) throws IOException {
   FileChannel fc = new RandomAccessFile(new File("temp.tmp"), "rw").getChannel();
   IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size()).asIntBuffer();
   ib.put(0);
   for (int i = 1; i < 10; i++)
     ib.put(ib.get(i - 1));
   fc.close();
 }

}


 </source>
   
  
 
  



FileChannel: position()

   <source lang="java">

import java.io.IOException; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; public class Main {

 public static void main(String[] argv) throws IOException {
   RandomAccessFile randomAccessFile = new RandomAccessFile("test.dat", "r");
   randomAccessFile.seek(1000);
   FileChannel fileChannel = randomAccessFile.getChannel();
   // This will print "1000"
   System.out.println("file pos: " + fileChannel.position());
   randomAccessFile.seek(500);
   // This will print "500"
   System.out.println("file pos: " + fileChannel.position());
   fileChannel.position(200);
   // This will print "200"
   System.out.println("file pos: " + randomAccessFile.getFilePointer());
 }

}

 </source>
   
  
 
  



FileChannel: position(long newPosition)

   <source lang="java">

import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class Main {

 private static final int BSIZE = 1024;
 public static void main(String[] args) throws Exception {
   FileChannel fc = new RandomAccessFile("data.txt", "rw").getChannel();
   fc.position(fc.size());
   fc.write(ByteBuffer.wrap("Some more".getBytes()));
   fc.close();
 }

}

 </source>
   
  
 
  



FileChannel: read(ByteBuffer dst)

   <source lang="java">
  

import java.io.FileInputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class Main {

 private static final int BSIZE = 1024;
 public static void main(String[] args) throws Exception {
   FileChannel fc = new FileInputStream("data.txt").getChannel();
   ByteBuffer buff = ByteBuffer.allocate(BSIZE);
   fc.read(buff);
   buff.flip();
   while (buff.hasRemaining())
     System.out.print((char) buff.get());
 }

}


 </source>
   
  
 
  



FileChannel: size()

   <source lang="java">
  

import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class MainClass {

 public static void main(String args[]) {
   FileInputStream fIn;
   FileChannel fChan;
   long fSize;
   ByteBuffer mBuf;
   try {
     fIn = new FileInputStream("test.txt");
     fChan = fIn.getChannel();
     fSize = fChan.size();
     mBuf = ByteBuffer.allocate((int) fSize);
     fChan.read(mBuf);
     mBuf.rewind();
     for (int i = 0; i < fSize; i++)
       System.out.print((char) mBuf.get());
     fChan.close();
     fIn.close();
   } catch (IOException exc) {
     System.out.println(exc);
   }
 }

}



 </source>
   
  
 
  



FileChannel: transferFrom(ReadableByteChannel src, long position, long count)

   <source lang="java">

import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; public class Main {

 public static void main(String[] args) {
   FileChannel in = null;
   FileChannel out = null;
   if (args.length < 2) {
     System.out.println("Usage: java Copy <from> <to>");
     System.exit(1);
   }
   try {
     in = new FileInputStream(args[0]).getChannel();
     out = new FileOutputStream(args[1]).getChannel();
     out.transferFrom(in, 0L, (int) in.size());
   } catch (Exception e) {
     e.printStackTrace();
   }
 }

}

 </source>
   
  
 
  



FileChannel: transferTo(long position, long count, WritableByteChannel target)

   <source lang="java">
  

import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; public class MainClass {

 public static void main(String[] args) throws Exception{
   String fromFileName = args[0];
   String toFileName = args[1];
   FileChannel in = new FileInputStream(fromFileName).getChannel();
   FileChannel out = new FileOutputStream(toFileName).getChannel();
   in.transferTo(0, (int) in.size(), out);
   in.close();
   out.close();
 }

}



 </source>
   
  
 
  



FileChannel: tryLock()

   <source lang="java">

import java.io.FileOutputStream; import java.nio.channels.FileLock; public class Main {

 public static void main(String[] args) throws Exception {
   FileOutputStream fos = new FileOutputStream("file.txt");
   FileLock fl = fos.getChannel().tryLock();
   if (fl != null) {
     System.out.println("Locked File");
     Thread.sleep(100);
     fl.release();
     System.out.println("Released Lock");
   }
   fos.close();
 }

}

 </source>
   
  
 
  



FileChannel: write(ByteBuffer buffer)

   <source lang="java">
  

import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class MainClass {

 public static void main(String args[]) {
   FileOutputStream fileOutputStream;
   FileChannel fileChannel;
   ByteBuffer byteBuffer;
   try {
     fileOutputStream = new FileOutputStream("test.txt");
     fileChannel = fileOutputStream.getChannel();
     byteBuffer = ByteBuffer.allocateDirect(26);
     for (int i = 0; i < 26; i++)
       byteBuffer.put((byte) ("A" + i));
     byteBuffer.rewind();
     fileChannel.write(byteBuffer);
     fileChannel.close();
     fileOutputStream.close();
   } catch (IOException exc) {
     System.out.println(exc);
   }
 }

}



 </source>
   
  
 
  



FileChannel: write(MappedByteBuffer buffer)

   <source lang="java">
  

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class MainClass {

 public static void main(String args[]) {
   FileInputStream fIn;
   FileOutputStream fOut;
   FileChannel fIChan, fOChan;
   long fSize;
   MappedByteBuffer mBuf;
   try {
     fIn = new FileInputStream(args[0]);
     fOut = new FileOutputStream(args[1]);
     fIChan = fIn.getChannel();
     fOChan = fOut.getChannel();
     fSize = fIChan.size();
     mBuf = fIChan.map(FileChannel.MapMode.READ_ONLY, 0, fSize);
     fOChan.write(mBuf); // this copies the file
     fIChan.close();
     fIn.close();
     fOChan.close();
     fOut.close();
   } catch (IOException exc) {
     System.out.println(exc);
     System.exit(1);
   } catch (ArrayIndexOutOfBoundsException exc) {
     System.out.println("Usage: Copy from to");
     System.exit(1);
   }
 }

}



 </source>