Java NIO 拷贝文件
实现方式一:
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("c:/ntldr");
fos = new FileOutputStream("c:/ntldr.bak");
FileChannel fic = fis.getChannel();
FileChannel foc = fos.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
int bytesRead = 0;
while (bytesRead >= 0 || buffer.hasRemaining()) {//---------(1)
if (bytesRead != -1)
bytesRead = fic.read(buffer);//-------------(2)
buffer.flip();
foc.write(buffer);
buffer.compact(); //---------------(3)
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != fis) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != fos) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
说明:
2。 byteReads==-1表示输入源数据已经结束,但是buffer中仍旧还有数据。
3。在输入速度超过输出速度时,仍旧保留未输出的数据。
实现方式二:
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("c:/ntldr");
fos = new FileOutputStream("c:/ntldr.bak");
FileChannel fic = fis.getChannel();
FileChannel foc = fos.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(fic.read(buffer)!=-1){
buffer.flip();
while(buffer.hasRemaining()){ //----------------------(1)
foc.write(buffer);
}
buffer.clear();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != fis) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != fos) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
1.使用了双重循环。
分享到:
相关推荐
二、使用Java NIO读取文件 在Java NIO中,读取文件主要涉及FileChannel和ByteBuffer。以下是一个简单的示例: ```java import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels....
### Java NIO 处理超大数据文件的知识点详解 ...综上所述,使用Java NIO处理超大数据文件时,关键是利用好内存映射文件技术和合理的数据读取策略,通过适当的分块和数据解析方法,可以有效地提升读取速度和处理能力。
- **直接内存(Direct Byte Buffer)**:Java NIO中的直接缓冲区可以分配在JVM堆外内存,减少从Java对象到本机内存的拷贝,从而实现零拷贝。 - **mmap(Memory Mapped File)**:Java的FileChannel提供了一个映射...
使用Java NIO进行文件写入的主要优势在于其非阻塞特性。NIO能够以更有效的方式管理系统资源,特别是在高并发环境中。此外,通过缓冲区和选择器,可以提高I/O操作的吞吐量。 总结,Java NIO提供了一套高效、灵活的...
在这个主题中,我们将深入探讨Java NIO如何用于写文件,特别是在处理大数据文件时如何提高性能。 首先,理解Java NIO的基本概念非常重要。NIO中的“N”代表“非阻塞”,这意味着在进行I/O操作时,程序可以继续执行...
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
在Java中,可以使用java.nio.file包下的Files和Paths类来列出目录中的文件和子目录,获取文件的基本信息,如大小、修改时间等。 在实际开发中,我们还需要考虑错误处理、安全性(如权限控制)、性能优化(如批量...
`NIOServer.java`和`NIOClient.java`这两个文件很可能是用于演示Java NIO服务器端和客户端的基本操作。下面将详细介绍Java NIO的主要组件和工作原理,并结合这两个文件名推测它们可能包含的内容。 1. **Selector...
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
这个文件很可能是一个示例程序,演示了如何使用Java NIO进行高效的大文件复制。在传统的Java I/O中,我们通常使用InputStream和OutputStream进行文件复制,而这种方式需要不断读写,造成大量的上下文切换,效率较低...
Java NIO支持多种类型的通道,包括文件通道(FileChannel)、套接字通道(SocketChannel)和服务器套接字通道(ServerSocketChannel)等。通道可以同时进行读写操作,并且可以实现异步读写。 2. **缓冲区(Buffers...
简单的用Java的NIO读取文件的程序,给大家参考。
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。...学习和理解Java NIO以及Netty的使用,对于提升Java网络编程的能力至关重要。
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件...
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 ...
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。 Java NIO: Selectors(选择器) ...
下面是一个简单的 Java NIO 示例,展示了如何使用 `FileChannel` 和 `ByteBuffer` 进行文件复制: ```java package nio; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio....
Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...