转自:http://blog.csdn.net/java2000_wl/article/details/7614611
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.nio.ByteBuffer;
- import java.nio.channels.Channel;
- import java.nio.channels.FileChannel;
- import java.nio.charset.Charset;
- public class FileChannelMain {
- private static final Charset charset = Charset.forName("GBK");
- private static final int BUFFER_CAPACITY = 1024;
- public static void main(String[] args) throws IOException, InterruptedException {
- final String srcfilePath = "D:/tomcat-6.0.26/logs/catalina.2012-04-30.log";
- readFile(srcfilePath);
- final String writeFilePath = "D:/test.txt";
- final String[] lines = new String[]{"line1xxssss", "中文测试", "!@#$%^&*()"};
- writeFile(writeFilePath, lines, Boolean.TRUE);
- readFile(writeFilePath);
- final String targetFilePath = "D:/test-copy.txt";
- copyFile1(srcfilePath, targetFilePath);
- copyFile2(srcfilePath, targetFilePath);
- }
- /**
- *
- * <br>------------------------------<br>
- * @param srcfilePath
- * @param targetPath
- * @throws IOException
- */
- private static void copyFile2(String srcfilePath, String targetPath) throws IOException {
- File file = new File(targetPath);
- if (!file.getParentFile().exists()) {
- file.mkdirs();
- }
- FileInputStream fileInputStream = new FileInputStream(srcfilePath);
- FileOutputStream fileOutputStream = new FileOutputStream(file);
- FileChannel inChannel = fileInputStream.getChannel();
- FileChannel outChannel = fileOutputStream.getChannel();
- //两者等价
- // inChannel.transferTo(0, inChannel.size(), outChannel);
- outChannel.transferFrom(inChannel, 0, inChannel.size());
- close(fileOutputStream);
- close(fileInputStream);
- close(inChannel);
- close(outChannel);
- }
- /**
- *
- * <br>------------------------------<br>
- * @param srcfilePath
- * @param targetPath
- * @throws IOException
- */
- private static void copyFile1(String srcfilePath, String targetPath) throws IOException {
- File file = new File(targetPath);
- if (!file.getParentFile().exists()) {
- file.mkdirs();
- }
- FileInputStream fileInputStream = new FileInputStream(srcfilePath);
- FileOutputStream fileOutputStream = new FileOutputStream(file);
- FileChannel inChannel = fileInputStream.getChannel();
- FileChannel outChannel = fileOutputStream.getChannel();
- ByteBuffer inBuffer = ByteBuffer.allocate(BUFFER_CAPACITY);
- while (inChannel.read(inBuffer) != -1) {
- inBuffer.flip();
- outChannel.write(inBuffer);
- inBuffer.clear();
- }
- close(fileOutputStream);
- close(fileInputStream);
- close(inChannel);
- close(outChannel);
- }
- /**
- * <br>------------------------------<br>
- * @param writeFilePath
- * @param lines
- * @param append
- * @throws IOException
- */
- private static void writeFile(String writeFilePath, String[] lines, boolean append) throws IOException {
- File file = new File(writeFilePath);
- if (!file.getParentFile().exists()) {
- file.mkdirs();
- }
- FileOutputStream fileOutputStream = new FileOutputStream(file, append);
- FileChannel fileChannel = fileOutputStream.getChannel();
- ByteBuffer buffer = ByteBuffer.allocate(BUFFER_CAPACITY);
- for (String line : lines) {
- buffer.put(line.getBytes());
- buffer.put("\r\n".getBytes());
- buffer.flip();
- fileChannel.write(buffer);
- buffer.clear();
- }
- close(fileOutputStream);
- close(fileChannel);
- }
- /**
- * <br>------------------------------<br>
- * @param path
- * @throws IOException
- */
- private static void readFile(String path) throws IOException {
- if (isFileNotExists(path)) {
- throw new FileNotFoundException();
- }
- FileInputStream fileInputStream = new FileInputStream(path);
- FileChannel fileChanne = fileInputStream.getChannel();
- ByteBuffer buffer = ByteBuffer.allocate(BUFFER_CAPACITY);
- while (fileChanne.read(buffer) != -1) {
- buffer.flip();
- System.out.println(charset.decode(buffer));
- buffer.clear();
- }
- close(fileInputStream);
- close(fileChanne);
- }
- private static boolean isFileNotExists(String path) {
- File file = new File(path);
- return !file.exists();
- }
- /**
- *
- * <br>------------------------------<br>
- * @param outputStream
- */
- private static void close(OutputStream outputStream) {
- if (outputStream == null) return;
- try {
- outputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- *
- * <br>------------------------------<br>
- * @param channel
- */
- private static void close(Channel channel) {
- if (channel == null ) return;
- try {
- channel.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- *
- * <br>------------------------------<br>
- * @param inputStream
- */
- private static void close(InputStream inputStream) {
- if (inputStream == null) return;
- try {
- inputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
相关推荐
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(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于传统IO(基于字节流和字符流)的I/O操作方式。传统的IO模型是阻塞式的,而NIO的核心特点是非阻塞,这使得在处理大量并发I/O请求时更为高效。...
Java NIO-异步FileChannel-CompletionHandler读数据 - **主要内容**:演示如何使用CompletionHandler处理异步读取的数据。 - **学习目标**:学会使用CompletionHandler进行异步数据处理。 通过以上内容的学习,...
### Java NIO 系列教程知识点详解 #### 一、Java NIO 概述 Java NIO (New IO) 是 Java SE 1.4 版本引入的一种新的输入/输出方式,它提供了一种替代传统的 Java IO 包的方式。Java NIO 主要包括三个核心组成部分:*...
压缩包中的`demo3.txt`展示了如何使用NIO的`FileChannel`进行文件读写,而`demo4read.txt`和`demo4write.txt`则演示了如何利用`SocketChannel`进行网络通信。 三、反应器模式(Reactor) Reactor是Java NIO的一种...
通道是数据进出的路径,如FileChannel、SocketChannel、ServerSocketChannel等。它们提供了读写数据的方法,并且可以与Selector配合工作,实现高效的并发I/O操作。 7. **选择器模式(Selector Pattern)**: 通过...
7.1 打开一个FileChannel 7.2 从FileChannel通道中读取数据 7.3 向FileChannel中写入数据: 7.4 关闭FileCha
例如,FileChannel用于文件操作,SocketChannel用于网络通信。 2. **缓冲区(Buffers)**:缓冲区是NIO中数据操作的主要对象,所有类型的Java原始类型都有对应的Buffer类,如ByteBuffer、CharBuffer等。数据在进行I...
在NIO中,`java.nio`包提供了`FileChannel`类,它允许我们高效地在文件之间传输数据。与BIO中的`InputStream`和`OutputStream`不同,`FileChannel`可以进行内存映射文件操作,提高了大文件读写的效率。通过`...
2. **Java NIO API**:学习如何使用java.nio包下的类和接口,如FileChannel、ByteBuffer、SelectionKey等,创建高效的I/O系统。 3. **C++异步I/O**:如果在C++中实现了NIO概念,那么会涉及到异步编程模型,如事件...
例如,`java.nio.channels.FileChannel`类,它允许我们以非阻塞方式读写文件,提高了I/O性能。通过查看源码,我们可以学习到如何使用`transferTo()`和`transferFrom()`方法进行文件间的高效数据传输,或者如何使用`...
常见的Channel类有FileChannel、SocketChannel、ServerSocketChannel等。 2. **Buffer**:Buffer是NIO中的数据容器,用于临时存储数据。Buffer有固定大小,当数据读取或写入时,会改变Buffer的状态,例如position...
4. **文件通道(FileChannel)**:允许直接在文件和缓冲区之间传输数据,减少了数据拷贝。 5. **管道(Pipe)**:提供进程间的双向数据流,不同于基于套接字的网络通信,管道主要用于同一JVM内的线程间通信。 6. **...
在测试中,我们需要关注不同类型的通道(如FileChannel、SocketChannel)和缓冲区(ByteBuffer)的性能特性。 2. **选择器(Selectors)**:选择器允许单个线程监控多个通道的事件,如读写就绪。测试中会评估选择器...
首先,`FileChannel`是`java.nio.channels`包中的一个接口,它提供了低级的、高性能的文件操作。`FileChannel`的主要特性包括读写文件、映射内存到文件、锁定文件区域等。通过`FileInputStream`, `FileOutputStream`...
Java NIO提供了多种类型的通道实现,例如FileChannel、SocketChannel、ServerSocketChannel和DatagramChannel。FileChannel用于文件的读写操作,而SocketChannel和ServerSocketChannel用于TCP网络通信,...
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(New IO)是Java 1.4引入的一个新特性,它为Java提供了非阻塞I/O操作的能力,使得Java在处理I/O时更加高效。NIO与传统的BIO(Blocking I/O)模型相比,其核心在于它允许程序...