जावा एनआईओ - फाइल चैनल

विवरण

जैसा कि पहले ही उल्लेख किया गया है कि जावा एनआईओ चैनल के फाइलचैनल कार्यान्वयन को फ़ाइल के मेटा डेटा गुणों तक पहुंचने के लिए पेश किया गया है जिसमें निर्माण, संशोधन, आकार आदि शामिल हैं। इस फाइल चैनल के साथ बहु थ्रेडेड हैं जो फिर से जावा आईओ की तुलना में जावा एनआईओ को अधिक कुशल बनाता है।

सामान्य तौर पर हम कह सकते हैं कि FileChannel एक चैनल है जो एक ऐसी फ़ाइल से जुड़ा है जिसके द्वारा आप किसी फ़ाइल से डेटा पढ़ सकते हैं, और किसी फ़ाइल में डेटा लिख ​​सकते हैं। FileChannel की महत्वपूर्ण विशेषता यह है कि इसे गैर-अवरोधन मोड में सेट नहीं किया जा सकता है। और हमेशा अवरुद्ध मोड में चलता है।

हम सीधे फ़ाइल चैनल ऑब्जेक्ट प्राप्त नहीं कर सकते, फ़ाइल चैनल का ऑब्जेक्ट या तो प्राप्त किया जाता है -

  • getChannel() - किसी भी FileInputStream, FileOutputStream या RandomAccessFile पर विधि।

  • open() - फ़ाइल चैनल की विधि जो डिफ़ॉल्ट रूप से चैनल खोलती है।

फ़ाइल चैनल का ऑब्जेक्ट प्रकार ऑब्जेक्ट निर्माण से वर्ग के प्रकार पर निर्भर करता है अर्थात यदि ऑब्जेक्ट FileInputStream की getchannel विधि को कॉल करके बनाया जाता है तो फ़ाइल चैनल पढ़ने के लिए खोला जाता है और इसे लिखने के मामले में NonWritableChannelException को फेंक देगा।

उदाहरण

निम्नलिखित उदाहरण जावा एनआईओ फाइलचैनल से डेटा को पढ़ने और लिखने का तरीका दिखाता है।

निम्नलिखित उदाहरण एक पाठ फ़ाइल से पढ़ता है C:/Test/temp.txt और सामग्री को कंसोल पर प्रिंट करता है।

temp.txt

Hello World!

FileChannelDemo.java

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.HashSet;
import java.util.Set;

public class FileChannelDemo {
   public static void main(String args[]) throws IOException {
      //append the content to existing file 
      writeFileChannel(ByteBuffer.wrap("Welcome to TutorialsPoint".getBytes()));
      //read the file
      readFileChannel();
   }
   public static void readFileChannel() throws IOException {
      RandomAccessFile randomAccessFile = new RandomAccessFile("C:/Test/temp.txt",
      "rw");
      FileChannel fileChannel = randomAccessFile.getChannel();
      ByteBuffer byteBuffer = ByteBuffer.allocate(512);
      Charset charset = Charset.forName("US-ASCII");
      while (fileChannel.read(byteBuffer) > 0) {
         byteBuffer.rewind();
         System.out.print(charset.decode(byteBuffer));
         byteBuffer.flip();
      }
      fileChannel.close();
      randomAccessFile.close();
   }
   public static void writeFileChannel(ByteBuffer byteBuffer)throws IOException {
      Set<StandardOpenOption> options = new HashSet<>();
      options.add(StandardOpenOption.CREATE);
      options.add(StandardOpenOption.APPEND);
      Path path = Paths.get("C:/Test/temp.txt");
      FileChannel fileChannel = FileChannel.open(path, options);
      fileChannel.write(byteBuffer);
      fileChannel.close();
   }
}

उत्पादन

Hello World! Welcome to TutorialsPoint