java.nio.channels.FileChannel 用于读取、写入、映射和操作文件的通道,类的定义:public abstract class FileChannel 。
文件通道在其文件中有一个当前 position,可对其进行查询和修改。该文件本身包含一个可读写的长度可变的字节序列,并且可以查询该文件的当前#size大小。写入的字节超出文件的当前大小时,则增加文件的大小;截取 该文件时,则减小文件的大小。文件可能还有某个相关联的元数据,如访问权限、内容类型和最后的修改时间;此类未定义访问元数据的方法。
下面举几个例子:
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class FileChannelTest1 {
public static void main(String[] args) throws Exception {
File file = new File(”d:\\note.txt”); // 创建新的文件对象
FileInputStream in = new FileInputStream(file); // 创建新的文件输入字节流
FileOutputStream out = new FileOutputStream(”d:\\1.txt”); // 创建新的文件输出字节流
FileChannel fc = in.getChannel(); // 创建一个新的文件输入通道
FileChannel fout = out.getChannel(); // 创建新的文件输出通道
ByteBuffer buf = ByteBuffer.allocate(1024); // 创建新的字节缓冲区
int c = 0;
while((c = fc.read(buf))!=-1){ // 将字节序列从此通道读入给定的缓冲区
buf.flip();
fout.write(buf); // 将字节序列从给定的缓冲区写入此通道。
buf.clear();
}
fout.close();
fc.close();
in.close();
out.close();
}
}
=========================================================
//文件锁定
import java.io.File;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
public class FileLockTest1 {
public static void main(String[] args) throws Exception {
File file = new File(”d://note.txt”);
FileOutputStream out = new FileOutputStream(file,true);
FileChannel fout = out.getChannel();
FileLock lock = fout.lock();//独占锁
if(lock!=null){
System.out.println(”文件被锁定了”);
Thread.sleep(20000);
lock.release();
System.out.println(”文件被释放了”);
}
fout.close();
out.close();
}
}
=========================================================
// MappedByteBuffer类 直接字节缓冲区,其内容是文件的内存映射区域。
import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
public class MappedByteBufferTest {
public static void main(String[] args) throws Exception{
File file = new File(”d:\\note.txt”);
FileInputStream in = new FileInputStream(file);
FileChannel fc = in.getChannel();
MappedByteBuffer mbb = fc.map(MapMode.READ_ONLY, 0, file.length());
System.out.println(mbb.position()); // 输出结果: 0
//ByteBuffer buf = ByteBuffer.allocate((int)file.length());
byte[] data = new byte[(int)file.length()];
int index = 0;
while(mbb.hasRemaining()){
data[index] = mbb.get();
index++;
}
System.out.println(new String(data));
//用内存映射的方式读是最快的,但是很危险,建议只读
}
分享到:
相关推荐
24. **java.nio.channels.FileChannel**:提供文件通道,支持大文件读写和映射到内存。 25. **java.nio.charset.Charset**:处理字符集的类,用于编码和解码。 26. **java.nio.file.Files**:提供大量静态方法用于...
其中,`Charset`类代表了一种字符集,`CharsetDecoder`和`CharsetEncoder`用于解码和编码。下面是一个简单的Java代码示例,演示如何将一个GB2312编码的文件转换为UTF-8编码: ```java import java.io.*; import ...
例如,你可以使用`java.nio`包的`FileChannel`和`ByteBuffer`来读取类文件。 3. **解析字节码**:使用`ClassDefinition`或者`defineClass()`方法将字节码转换为Class对象。注意,`defineClass()`方法必须使用正确的...
本篇文章将全面解析Java IO工具类,帮助你理解并掌握其在实际开发中的应用。 一、Java IO基础 Java IO体系主要由流(Stream)组成,分为字节流和字符流两大类,分别处理字节数据和字符数据。字节流包括InputStream...
更高级的文件操作可以使用FileChannel和RandomAccessFile,它们支持随机访问和大块数据传输。 NIO(New IO)是Java 1.4引入的扩展,提供了非阻塞I/O、选择器和内存映射文件等特性,提升了并发性能。Channels代表...
`FileUtil`类可能会使用Java的IO流进行读写操作,例如`copyFileUsingInputStreamOutputStream(String srcPath, String destPath)`和`copyFileUsingFileChannels(String srcPath, String destPath)`,分别利用...
我们可以使用`java.nio.charset`包中的类,如`Charset`、`CharsetDecoder`和`CharsetEncoder`。以下是一个简单的文件编码转换示例: ```java import java.io.*; import java.nio.*; import java.nio.charset.*; ...
- `java.nio`包:提供了非阻塞I/O,包含`Buffer`、`Channel`和`FileChannel`等类,提高了文件操作的效率。 - `java.io.FileInputStream`和`java.io.FileOutputStream`:用于读写文件的基本流,可以配合`...
在Java中,进行字符编码转换可以使用`java.nio.charset`包下的类,如`Charset`、`CharsetDecoder`和`CharsetEncoder`。例如,你可以先读取`a.properties`文件,将内容解码为特定的字符集(如UTF-8),然后使用`...
`Charset`可以用来编码(字符串转字节)和解码(字节转字符串)。Java默认支持多种常见的字符集,如ASCII、UTF-8、GBK等。 #### 文件读写操作 在Java中,读取和写入文件通常有两种方式:流式操作(使用`...
这一示例演示了使用Java NIO的FileChannel类来读取文件的基本流程。 在介绍完Java NIO的基础概念后,文档通过代码示例加深了对NIO使用方法的理解。如ChannelDemo.java展示了一个简单的文件读取操作,其中使用了...
3. `java.nio.file`包:Java NIO(New IO)提供了非阻塞I/O操作,包括`Files`、`Paths`、`FileChannel`等类,提供了更高效的数据传输方式。 4. `java.util.Scanner`:可以从文件、系统输入或其他输入流中读取基本的...
为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行读取大文件,并将其内容解析后存储到数据库中。本文将详细讲解这一过程。 首先,我们需要了解`java.nio`包...
使用 NIO 的 `FileChannel` 类可以实现快速的文件拷贝操作。需要注意的是,在拷贝文件时需要捕获 `IOException` 异常,并且在 finally 块中关闭文件流,以免资源泄露。 本文总结的这些代码都是 Java 开发中常见的...
Java 提供了 `FileChannel` 类来实现这种操作。使用 NIO 可以将文件拷贝的速度提高数倍,从而提高文件操作的效率。 这 20 个常用的 Java 代码都是开发者在项目中经常使用的代码。这些代码可以帮助开发者快速地实现...
9. **零拷贝**: Netty利用Java NIO的FileChannel.transferTo()和FileChannel.transferFrom(),以及直接内存分配,实现了高效的零拷贝技术,减少了数据在用户空间和内核空间之间的拷贝次数,提高了传输效率。...
H264TrackImpl h264TrackImpl = new H264TrackImpl(new ... FileChannel fChannel = new FileOutputStream(new File("C://a.mp4")).getChannel(); mp4f.writeContainer(fChannel); fChannel.close();
`FileChannel`可以用于高效地读写文件。异步IO(AsynchronousFileChannel)允许在独立于当前线程的情况下进行读写操作,提高了并发性能。 ### 7. 高级IO(NIO.2) Java 7引入了NIO.2,增加了文件系统操作的API,如`...
- `FileChannel`: 文件通道类。 #### 24. **java.nio.channels** - **用途**: I/O通道。 - **关键类**: - `SocketChannel`: 套接字通道类。 - `ServerSocketChannel`: 服务器套接字通道类。 - `...
Java NIO 是 Java SE 1.4 版本引入的一个全新的 I/O API,用来替代传统的 I/O 类型,即 java.io 包下的类。 Java NIO 的主要特点包括: 1. **非阻塞模式**:与传统的阻塞 I/O 相比,NIO 支持非阻塞模式,这意味着...