Java/File Input Output/New IO

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

Copy a file using NIO

   <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: map(FileChannel.MapMode mode,long position,long size)

   <source lang="java">

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

 public static void main(String args[]) {
   FileInputStream fileInputStream;
   FileChannel fileChannel;
   long fileSize;
   MappedByteBuffer mBuf;
   try {
     fileInputStream = new FileInputStream("test.txt");
     fileChannel = fileInputStream.getChannel();
     fileSize = fileChannel.size();
     mBuf = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fileSize);
     for (int i = 0; i < fileSize; i++)
       System.out.print((char) mBuf.get());
     fileChannel.close();
     fileInputStream.close();
   } catch (IOException exc) {
     System.out.println(exc);
     System.exit(1);
   }
 }

}

      </source>
   
  
 
  



Use a mapped file to read a text file

   <source lang="java">

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

 public static void main(String args[]) {
   FileInputStream fileInputStream;
   FileChannel fileChannel;
   long fileSize;
   MappedByteBuffer mBuf;
   try {
     fileInputStream = new FileInputStream("test.txt");
     fileChannel = fileInputStream.getChannel();
     fileSize = fileChannel.size();
     mBuf = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fileSize);
     for (int i = 0; i < fileSize; i++)
       System.out.print((char) mBuf.get());
     fileChannel.close();
     fileInputStream.close();
   } catch (IOException exc) {
     System.out.println(exc);
     System.exit(1);
   }
 }

}

      </source>
   
  
 
  



Use New Java IO to write string into a file

   <source lang="java">

/*

* Output:

File stream created successfully. New buffer: position = 0 Limit = 1024 capacity = 1024 Buffer after loading: position = 30 Limit = 1024 capacity = 1024 Buffer after flip: position = 0 Limit = 30 capacity = 1024 Buffer contents written to file.

*/

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

 public static void main(String[] args) {
   String phrase = new String("www.jexp.ru\n");
   File aFile = new File("test.txt");   
   FileOutputStream outputFile = null;  
   try {
     outputFile = new FileOutputStream(aFile, true);
     System.out.println("File stream created successfully.");
   } catch (FileNotFoundException e) {
     e.printStackTrace(System.err);
   } 
   FileChannel outChannel = outputFile.getChannel();
   
   ByteBuffer buf = ByteBuffer.allocate(1024);
   System.out.println("New buffer:           position = " + buf.position()
                      + "\tLimit = " + buf.limit() + "\tcapacity = "
                      + buf.capacity());
   // Load the data into the buffer
   for (char ch : phrase.toCharArray()) {
     buf.putChar(ch);
   }
   System.out.println("Buffer after loading: position = " + buf.position()
                      + "\tLimit = " + buf.limit() + "\tcapacity = "
                      + buf.capacity());
   buf.flip();
   System.out.println("Buffer after flip:    position = " + buf.position() 
                      + "\tLimit = " + buf.limit() + "\tcapacity = " 
                      + buf.capacity());
   try {
     outChannel.write(buf);
     outputFile.close();
     System.out.println("Buffer contents written to file.");
   } catch (IOException e) {
     e.printStackTrace(System.err);
   }
 }

}


      </source>
   
  
 
  



Write A String As Bytes

   <source lang="java">

/*

* Output:
*/

import java.io.File; import java.io.FileNotFoundException; 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) {
   String phrase = new String("www.jexp.ru API \n");
   File aFile = new File("test.txt");
   FileOutputStream file = null;
   try {
     file = new FileOutputStream(aFile, true);
   } catch (FileNotFoundException e) {
     e.printStackTrace(System.err);
   }
   FileChannel outChannel = file.getChannel();
   ByteBuffer buf = ByteBuffer.allocate(phrase.length());
   byte[] bytes = phrase.getBytes();
   buf.put(bytes);
   buf.flip();
   try {
     outChannel.write(buf);
     file.close();
   } catch (IOException e) {
     e.printStackTrace(System.err);
   }
 }

}

      </source>
   
  
 
  



Write to a file using the new I/O

   <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>
   
  
 
  



Write to a mapped file

   <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>