`
Donald_Draper
  • 浏览: 981199 次
社区版块
存档分类
最新评论

FileChannel示例

    博客分类:
  • NIO
nio 
阅读更多
前面我们看过socket通道,datagram通道,以管道Pipe,从今天起,我们来看一下file通道,先从一个示例开始:
测试主类1:
package nio.filechannel;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
 * 测试FileChannel
 * @author donald
 * 2017年4月9日
 * 下午4:16:35
 */
public class testFileChannel {
	public static void main(String[] args) throws IOException {
		RandomAccessFile aFile = new RandomAccessFile("E:/nio_data.txt", "rw");
		FileChannel inChannel = aFile.getChannel();
		ByteBuffer buf = ByteBuffer.allocate(1024);
		/*
		 * 1.先屏蔽writeBytes,执行readBytes,从文件中读取数据
		 * 2.再屏蔽readBytes,执行writeBytes,向文件中写数据
		 * 3.最后屏蔽writeBytes,执行readBytes,从文件中读取数据
		 */
//		writeBytes(buf, inChannel);
		readBytes(buf, inChannel);
		inChannel.close();
		aFile.close();
	}
	private static void writeBytes(ByteBuffer buf, FileChannel fileChannel) throws IOException{
	    String newData = "new String to write to file...."+System.currentTimeMillis();
	    buf.put(newData.getBytes("UTF-8"));
	    buf.flip();
	    while(buf.hasRemaining())
	    	fileChannel.write(buf);
	    System.out.println("===已经写完数据到文件");
	    
	}
	private static void readBytes(ByteBuffer buf, FileChannel fileChannel) throws IOException{
		    buf.clear();
			//从file通道读取数据到缓存区,即写入缓冲区
			int bytesRead = fileChannel.read(buf);
			while (bytesRead != -1) {
//				buf.compact();//将未读完的数据移到缓冲的前面,新写入的数据,将会append旧数据的后面
				bytesRead = fileChannel.read(buf);
			}
			//转换缓冲区模式
			buf.flip();// swith the mode write or read
			System.out.println("=====Read byte length:" + buf.limit());
			while (buf.hasRemaining()) {
				System.out.print((char) buf.get());
			}
			System.out.println();
	}
}

按一下三步执行:
1.先屏蔽writeBytes,执行readBytes,从文件中读取数据
2.再屏蔽readBytes,执行writeBytes,向文件中写数据
3.最后屏蔽writeBytes,执行readBytes,从文件中读取数据
相应的控制台输出为:
1.=====Read byte length:0
2.===已经写完数据到文件
3.=====Read byte length:44
new String to write to file....1494407798722

测试主类2:
package nio.filechannel;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
/**
 * 测试通道间传输
 * @author donald
 * 2017年4月9日
 * 下午10:27:16
 */
public class testTransferChannel {
	public static void main(String[] args) throws IOException {
		RandomAccessFile fromFile = new RandomAccessFile("E:/nio_data.txt", "rw");
		FileChannel fromChannel = fromFile.getChannel();
		RandomAccessFile toFile = new RandomAccessFile("E:/nio_data_to.txt", "rw");
		FileChannel toChannel = toFile.getChannel();
		RandomAccessFile to2File = new RandomAccessFile("E:/nio_data_to2.txt", "rw");
		FileChannel to2Channel = to2File.getChannel();
		long position = 0;
		long count = fromChannel.size();
		//将源通道的数据传输的本通道
		toChannel.transferFrom(fromChannel, position, count);
		System.out.println("===将源通道的数据传输的本通道完毕");
		//将本通道数据传输到目的通道
		fromChannel.transferTo(position, count, to2Channel);
		System.out.println("===将本通道数据传输到目的通道完毕");
		fromChannel.close();
		fromFile.close();
		toChannel.close();
		toFile.close();
		to2Channel.close();
		to2File.close();
	}
}

控制输出:
===将源通道的数据传输的本通道完毕
===将本通道数据传输到目的通道完毕

打开文件E:/nio_data_to.txt和E:/nio_data_to2.txt,文件内容如下:
new String to write to file....1494407798722
分享到:
评论

相关推荐

    nio入门文档及示例代码

    1. **文件读写示例**:演示如何使用FileChannel进行文件的读取和写入,可能会包含`transferTo()`和`transferFrom()`等方法的使用。 2. **网络通信示例**:展示如何使用SocketChannel和ServerSocketChannel进行客户端...

    java nio示例代码

    例如,FileChannel、SocketChannel和DatagramChannel是常用的通道类型。 2. **缓冲区(Buffer)**:缓冲区是NIO的核心,它在内存中分配一块区域来存储数据。在进行IO操作时,数据先被存入缓冲区,然后再从缓冲区读取...

    NIO原生API示例

    常见的通道类有FileChannel、SocketChannel、ServerSocketChannel等。例如,ServerSocketChannel用于监听客户端连接,SocketChannel用于接收和发送数据。 2. **缓冲区(Buffers)**:缓冲区是存储数据的容器,它...

    一个NIO开发的示例代码

    这个名为"nioSamples"的压缩包文件很可能包含了以上概念的Java代码示例,你可以通过学习和运行这些示例,更深入地理解Java NIO的工作原理和使用方法。对于Java初学者来说,这是一个极好的实践资源,可以帮助你快速...

    Android网络多线程断点续传下载 示例

    在“Multi_thread_Download”示例中,开发者可能使用了`OkHttp`或者`Volley`这样的网络库来发起HTTP请求,利用`java.nio`包中的`FileChannel`进行文件的读写和合并,以及`SharedPreferences`存储下载状态。...

    java NIO原理和使用

    示例代码展示如何使用 `FileChannel` 的 `map()` 方法进行内存映射: ```java FileChannel fileChannel = ...; MappedByteBuffer mappedBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, fileChannel....

    Java大文件传输示例额

    本示例主要关注如何高效地传输大文件,通过将大文件分解为较小的数据块,然后逐个传输这些小块,最后在接收端进行组装。这种方法可以有效避免一次性加载整个大文件到内存中导致的资源消耗和可能的溢出问题。 首先,...

    Java使用BIO和NIO进行文件操作对比代码示例

    "Java使用BIO和NIO进行文件操作对比代码示例" Java BIO和NIO是两种不同的输入/输出(IO)模型,在文件操作中发挥着重要作用。BIO(Blocking I/O)是一种同步阻塞IO模式,而NIO(Non-Blocking I/O)是一种同步非阻塞...

    java网络编程NIO视频教程

    - **主要内容**:具体讲解FileChannel的使用方法,并提供示例代码。 - **学习目标**:学会如何利用FileChannel进行文件读写操作。 #### 5. Java NIO-Channel-FileChannel详解(一) - **主要内容**:深入探讨...

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

    这一示例演示了使用Java NIO的FileChannel类来读取文件的基本流程。 在介绍完Java NIO的基础概念后,文档通过代码示例加深了对NIO使用方法的理解。如ChannelDemo.java展示了一个简单的文件读取操作,其中使用了...

    Java NIO测试示例

    Java NIO提供了多种类型的通道,如FileChannel用于文件操作,SocketChannel用于网络通信,DatagramChannel用于UDP通信等。通道可以同时进行读写操作,并且可以与多个缓冲区进行交互。 2. **缓冲区(Buffer)**: ...

    java读取超大文本文件

    示例代码中演示了如何使用`ByteBuffer`和`FileChannel`读取文件: ```java int bufSize = 1024; byte[] bs = new byte[bufSize]; ByteBuffer byteBuf = ByteBuffer.allocate(1024); FileChannel channel = new ...

    java nio基础使用示例

    Java NIO(New IO)是Java 1.4版本引入的一种新的I/O API,它提供了非阻塞的I/O操作,极大地提高了I/O操作的效率。...此外,NIO还有Buffer、Pipe、FileChannel等重要概念,它们共同构建了Java NIO的强大功能。

    NIO复制文件

    1. **FileChannel**:`java.nio.channels.FileChannel`是用于读写文件的通道,可以从一个文件通道向另一个文件通道直接传输数据,避免了中间缓冲区的开销。在文件复制中,我们通常使用`transferTo()`和`transferFrom...

    复制文件(java)

    FileChannel inChannel = FileChannel.open(Paths.get(sourcePath), StandardOpenOption.READ); FileChannel outChannel = FileChannel.open(Paths.get(destPath), StandardOpenOption.WRITE); ByteBuffer ...

    JAVA-NIO程序设计完整实例

    示例代码片段 ```java Selector selector = Selector.open(); ServerSocketChannel server = ServerSocketChannel.open().bind(new InetSocketAddress(8080)); server.configureBlocking(false); server.register...

    示例1.1 File类操作文件

    Java NIO(New Input/Output)提供了一种新的文件操作方式,`FileChannel`类允许通过通道直接进行文件操作,这通常比传统的流更快。尽管如此,`File`类在NIO中仍然扮演着基础角色,用来创建通道。 10. **并发访问*...

    Java NIO实战开发多人聊天室

    01-Java NIO-课程简介.mp4 05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 08-Java NIO-Channel-...23-Java NIO-Selector-示例代码(客户端).mp4 24

    java复制文件的4种方式

    本文将详细介绍四种常见的Java文件复制方法:使用`FileStreams`、使用`FileChannel`、使用Apache `Commons IO`以及使用Java 7的`Files`类。 #### 1. 使用`FileStreams`复制文件 这种方法是最传统的文件复制手段,...

Global site tag (gtag.js) - Google Analytics