`

NIO - FileChannel

 
阅读更多

转自:http://blog.csdn.net/java2000_wl/article/details/7614611

 

  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8. import java.nio.ByteBuffer;  
  9. import java.nio.channels.Channel;  
  10. import java.nio.channels.FileChannel;  
  11. import java.nio.charset.Charset;  
  12.   
  13. public class FileChannelMain {  
  14.       
  15.     private static final Charset charset = Charset.forName("GBK");  
  16.       
  17.     private static final int BUFFER_CAPACITY  = 1024;  
  18.       
  19.     public static void main(String[] args) throws IOException, InterruptedException {  
  20.         final String srcfilePath = "D:/tomcat-6.0.26/logs/catalina.2012-04-30.log";  
  21.         readFile(srcfilePath);  
  22.           
  23.         final String writeFilePath = "D:/test.txt";  
  24.         final String[] lines = new String[]{"line1xxssss""中文测试""!@#$%^&*()"};   
  25.         writeFile(writeFilePath, lines, Boolean.TRUE);  
  26.         readFile(writeFilePath);  
  27.           
  28.         final String targetFilePath = "D:/test-copy.txt";  
  29.         copyFile1(srcfilePath, targetFilePath);  
  30.         copyFile2(srcfilePath, targetFilePath);  
  31.     }  
  32.   
  33.     /** 
  34.      * 
  35.      * <br>------------------------------<br> 
  36.      * @param srcfilePath 
  37.      * @param targetPath 
  38.      * @throws IOException  
  39.      */  
  40.     private static void copyFile2(String srcfilePath, String targetPath) throws IOException {  
  41.         File file = new File(targetPath);  
  42.         if (!file.getParentFile().exists()) {  
  43.             file.mkdirs();  
  44.         }  
  45.         FileInputStream fileInputStream = new FileInputStream(srcfilePath);  
  46.         FileOutputStream fileOutputStream = new FileOutputStream(file);  
  47.         FileChannel inChannel = fileInputStream.getChannel();  
  48.         FileChannel outChannel = fileOutputStream.getChannel();  
  49.         //两者等价  
  50. //      inChannel.transferTo(0, inChannel.size(), outChannel);  
  51.         outChannel.transferFrom(inChannel, 0, inChannel.size());  
  52.           
  53.         close(fileOutputStream);  
  54.         close(fileInputStream);  
  55.         close(inChannel);  
  56.         close(outChannel);  
  57.     }  
  58.   
  59.     /** 
  60.      * 
  61.      * <br>------------------------------<br> 
  62.      * @param srcfilePath 
  63.      * @param targetPath 
  64.      * @throws IOException  
  65.      */  
  66.     private static void copyFile1(String srcfilePath, String targetPath) throws IOException {  
  67.         File file = new File(targetPath);  
  68.         if (!file.getParentFile().exists()) {  
  69.             file.mkdirs();  
  70.         }  
  71.         FileInputStream fileInputStream = new FileInputStream(srcfilePath);  
  72.         FileOutputStream fileOutputStream = new FileOutputStream(file);  
  73.         FileChannel inChannel = fileInputStream.getChannel();  
  74.         FileChannel outChannel = fileOutputStream.getChannel();  
  75.         ByteBuffer inBuffer = ByteBuffer.allocate(BUFFER_CAPACITY);  
  76.         while (inChannel.read(inBuffer) != -1) {  
  77.             inBuffer.flip();  
  78.             outChannel.write(inBuffer);  
  79.             inBuffer.clear();  
  80.         }  
  81.         close(fileOutputStream);  
  82.         close(fileInputStream);  
  83.         close(inChannel);  
  84.         close(outChannel);  
  85.     }  
  86.   
  87.     /** 
  88.      * <br>------------------------------<br> 
  89.      * @param writeFilePath 
  90.      * @param lines 
  91.      * @param append 
  92.      * @throws IOException 
  93.      */  
  94.     private static void writeFile(String writeFilePath, String[] lines, boolean append) throws IOException {  
  95.         File file = new File(writeFilePath);  
  96.         if (!file.getParentFile().exists()) {  
  97.             file.mkdirs();  
  98.         }  
  99.         FileOutputStream fileOutputStream = new FileOutputStream(file, append);  
  100.         FileChannel fileChannel = fileOutputStream.getChannel();  
  101.         ByteBuffer buffer = ByteBuffer.allocate(BUFFER_CAPACITY);  
  102.         for (String line : lines) {  
  103.             buffer.put(line.getBytes());  
  104.             buffer.put("\r\n".getBytes());  
  105.             buffer.flip();  
  106.             fileChannel.write(buffer);  
  107.             buffer.clear();  
  108.         }  
  109.         close(fileOutputStream);  
  110.         close(fileChannel);  
  111.     }  
  112.       
  113.     /** 
  114.      * <br>------------------------------<br> 
  115.      * @param path 
  116.      * @throws IOException 
  117.      */  
  118.     private static void readFile(String path) throws IOException {  
  119.         if (isFileNotExists(path)) {  
  120.             throw new FileNotFoundException();  
  121.         }  
  122.         FileInputStream fileInputStream = new FileInputStream(path);  
  123.         FileChannel fileChanne = fileInputStream.getChannel();  
  124.         ByteBuffer buffer = ByteBuffer.allocate(BUFFER_CAPACITY);  
  125.         while (fileChanne.read(buffer) != -1) {  
  126.             buffer.flip();  
  127.             System.out.println(charset.decode(buffer));  
  128.             buffer.clear();  
  129.         }  
  130.         close(fileInputStream);  
  131.         close(fileChanne);  
  132.     }  
  133.       
  134.     private static boolean isFileNotExists(String path) {  
  135.         File file = new File(path);  
  136.         return !file.exists();  
  137.     }  
  138.       
  139.     /** 
  140.      *  
  141.      * <br>------------------------------<br> 
  142.      * @param outputStream 
  143.      */  
  144.     private static void close(OutputStream outputStream) {  
  145.         if (outputStream == nullreturn;  
  146.         try {  
  147.             outputStream.close();  
  148.         } catch (IOException e) {  
  149.             e.printStackTrace();  
  150.         }  
  151.     }  
  152.       
  153.     /** 
  154.      *  
  155.      * <br>------------------------------<br> 
  156.      * @param channel 
  157.      */  
  158.     private static void close(Channel channel) {  
  159.         if (channel == null ) return;  
  160.         try {  
  161.             channel.close();  
  162.         } catch (IOException e) {  
  163.             e.printStackTrace();  
  164.         }  
  165.     }  
  166.       
  167.     /** 
  168.      *  
  169.      * <br>------------------------------<br> 
  170.      * @param inputStream 
  171.      */  
  172.     private static void close(InputStream inputStream) {  
  173.         if (inputStream == nullreturn;  
  174.         try {  
  175.             inputStream.close();  
  176.         } catch (IOException e) {  
  177.             e.printStackTrace();  
  178.         }  
  179.     }  

分享到:
评论

相关推荐

    Java NIO实战开发多人聊天室

    05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-SocketChannel.mp4 10-Java NIO-Channel-...

    JAVA-NIO-DEMO

    Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于传统IO(基于字节流和字符流)的I/O操作方式。传统的IO模型是阻塞式的,而NIO的核心特点是非阻塞,这使得在处理大量并发I/O请求时更为高效。...

    java网络编程NIO视频教程

    Java NIO-异步FileChannel-CompletionHandler读数据 - **主要内容**:演示如何使用CompletionHandler处理异步读取的数据。 - **学习目标**:学会使用CompletionHandler进行异步数据处理。 通过以上内容的学习,...

    Java-NIO-系列教程

    ### Java NIO 系列教程知识点详解 #### 一、Java NIO 概述 Java NIO (New IO) 是 Java SE 1.4 版本引入的一种新的输入/输出方式,它提供了一种替代传统的 Java IO 包的方式。Java NIO 主要包括三个核心组成部分:*...

    bio-nio-aio.zip

    压缩包中的`demo3.txt`展示了如何使用NIO的`FileChannel`进行文件读写,而`demo4read.txt`和`demo4write.txt`则演示了如何利用`SocketChannel`进行网络通信。 三、反应器模式(Reactor) Reactor是Java NIO的一种...

    【IT十八掌徐培成】Java基础第27天-02.NIO-ServerSocketChannel-SocketChannel.zip

    通道是数据进出的路径,如FileChannel、SocketChannel、ServerSocketChannel等。它们提供了读写数据的方法,并且可以与Selector配合工作,实现高效的并发I/O操作。 7. **选择器模式(Selector Pattern)**: 通过...

    muyinchen#woker#07 Java的NIO之FileChannel1

    7.1 打开一个FileChannel 7.2 从FileChannel通道中读取数据 7.3 向FileChannel中写入数据: 7.4 关闭FileCha

    nio-study:尼奥研究

    例如,FileChannel用于文件操作,SocketChannel用于网络通信。 2. **缓冲区(Buffers)**:缓冲区是NIO中数据操作的主要对象,所有类型的Java原始类型都有对应的Buffer类,如ByteBuffer、CharBuffer等。数据在进行I...

    nio-demo:NIO编辑演示

    在NIO中,`java.nio`包提供了`FileChannel`类,它允许我们高效地在文件之间传输数据。与BIO中的`InputStream`和`OutputStream`不同,`FileChannel`可以进行内存映射文件操作,提高了大文件读写的效率。通过`...

    nio-2015:NIO 2015 第二轮——我的解决方案

    2. **Java NIO API**:学习如何使用java.nio包下的类和接口,如FileChannel、ByteBuffer、SelectionKey等,创建高效的I/O系统。 3. **C++异步I/O**:如果在C++中实现了NIO概念,那么会涉及到异步编程模型,如事件...

    java.util源码-Java.util-NIO-Source-code:基本输入和输出,包括带有NIO源代码的java.util读取文件

    例如,`java.nio.channels.FileChannel`类,它允许我们以非阻塞方式读写文件,提高了I/O性能。通过查看源码,我们可以学习到如何使用`transferTo()`和`transferFrom()`方法进行文件间的高效数据传输,或者如何使用`...

    NIO学习-Java源代码分享(含netty)

    常见的Channel类有FileChannel、SocketChannel、ServerSocketChannel等。 2. **Buffer**:Buffer是NIO中的数据容器,用于临时存储数据。Buffer有固定大小,当数据读取或写入时,会改变Buffer的状态,例如position...

    nio-开源

    4. **文件通道(FileChannel)**:允许直接在文件和缓冲区之间传输数据,减少了数据拷贝。 5. **管道(Pipe)**:提供进程间的双向数据流,不同于基于套接字的网络通信,管道主要用于同一JVM内的线程间通信。 6. **...

    nio压力测试

    在测试中,我们需要关注不同类型的通道(如FileChannel、SocketChannel)和缓冲区(ByteBuffer)的性能特性。 2. **选择器(Selectors)**:选择器允许单个线程监控多个通道的事件,如读写就绪。测试中会评估选择器...

    【IT十八掌徐培成】Java基础第26天-06.FileChannel-RandomAccessFile-CopyFile.zip

    首先,`FileChannel`是`java.nio.channels`包中的一个接口,它提供了低级的、高性能的文件操作。`FileChannel`的主要特性包括读写文件、映射内存到文件、锁定文件区域等。通过`FileInputStream`, `FileOutputStream`...

    无涯教程(LearnFk)-Java-Nio教程离线版.pdf

    Java NIO提供了多种类型的通道实现,例如FileChannel、SocketChannel、ServerSocketChannel和DatagramChannel。FileChannel用于文件的读写操作,而SocketChannel和ServerSocketChannel用于TCP网络通信,...

    java nio教程pdf

    Java NIO(New IO,也称为Non-Blocking IO)是一种基于通道(Channel)和缓冲区(Buffer)的I/O操作方法,用于替代标准Java IO API。Java NIO提供了与标准IO不同的I/O工作方式,它是面向缓冲区、基于通道的I/O操作,...

    JAVA-NIO程序设计完整实例

    **JAVA-NIO程序设计完整实例** Java NIO(New IO)是Java 1.4引入的一个新特性,它为Java提供了非阻塞I/O操作的能力,使得Java在处理I/O时更加高效。NIO与传统的BIO(Blocking I/O)模型相比,其核心在于它允许程序...

Global site tag (gtag.js) - Google Analytics