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));
//用内存映射的方式读是最快的,但是很危险,建议只读
}
相关推荐
这一示例演示了使用Java NIO的FileChannel类来读取文件的基本流程。 在介绍完Java NIO的基础概念后,文档通过代码示例加深了对NIO使用方法的理解。如ChannelDemo.java展示了一个简单的文件读取操作,其中使用了...
2. **FileChannel**:在Java中,通过FileChannel类可以实现文件的映射。FileChannel提供了map()方法,用于创建与文件相关的MappedByteBuffer。FileChannel可以从RandomAccessFile、FileInputStream或...
11. FileChannel类在java.nio.channels包中,为磁盘文件映入内存提供一个通道,支持高效的数据传输。 12. 定义一个public final int MAX_LENGTH=100的成员变量,表示这是一个公共常量,不允许修改。 13. J2ME为...
例如,FileChannel类提供了transferTo()和transferFrom()方法,用于高效地移动文件数据。 5. **FileReader和FileWriter**:这两个类分别用于读写字符数据,适合处理文本文件。它们比字节流更加便捷,但不支持编码...
例如,我们可以使用Java的FileChannel类,通过MappedByteBuffer进行内存映射文件的读取,每次只处理一小部分数据。 接下来,排序算法的选择也很关键。对于小数据块,快速排序、归并排序或者插入排序可能是理想选择...
Path类、Files类和FileChannel类等都引入了新功能。 4. **改进的JDBC**:JDBC 4.0引入了自动连接管理和更强大的SQL支持,简化了数据库访问。 5. **Java Web Start**:JDK 6增强了Java Web Start,使得Java应用程序...
6. **NIO.2**:引入了新的文件系统API,包括Path类、Files类和FileChannel类,提供了异步I/O操作、文件属性查询和文件系统遍历等功能。 7. **动态类型语言支持**:Java 7通过JSR 292(invokedynamic指令)支持了...
11. **FileChannel类的作用** - **选项分析** - A. 为磁盘文件映入内存提供数据:描述不够准确。 - B. 为内存数据映入磁盘提供一个文件:描述不够准确。 - C. 为磁盘文件映入内存提供一个通道:描述更准确。 ...
Java 6引入了NIO的升级版NIO.2,增加了文件系统API,如Path类、Files类和FileChannel类的新方法,使文件操作更加高效和灵活。例如,可以直接创建符号链接,以及异步I/O操作,提高了文件系统的操作性能。 5. **改进...
这可以通过Java的FileInputStream和FileChannel类实现,通过seek()和transferTo()方法读取并写入指定范围的文件内容。 2. **建立Socket连接**:使用Socket创建与服务器的连接。需要指定服务器的IP地址和端口号,...
这在Linux和UNIX系统中可以通过Java NIO(New Input/Output)中的FileChannel类的transferTo()方法实现。transferTo()方法允许将数据直接从调用它的通道转移到另一个可写的字节通道中,无需经过应用程序的数据流。 ...
java各类IO流的整理demo,其内包含InputStream/OutputStream BufferedReader流 FileOutputStream/FileInputStream流 PrintWriter流 DataOut/DataIn流 Object流 FileChannel类;
在Java编程语言中,`FileChannel`和`RandomAccessFile`是两个重要的I/O类,它们主要用于处理磁盘文件。这两个类提供了高级的文件操作功能,例如高效的数据传输和随机访问文件内容。在这个主题中,我们将深入探讨这两...
内存映射文件是通过Java的NIO(New Input/Output)包中的FileChannel类来实现的。FileChannel提供了map()方法,可以将文件的一部分或全部映射到Java虚拟机的内存中,形成一个MappedByteBuffer对象。这样,对...
这种方法使用Java nio库中的FileChannel类的transferTo方法来合并文件。下面是一个示例代码: ```java public static boolean mergeFiles(String[] fpaths, String resultPath) { if (fpaths == null || fpaths....
在Java中,FileChannel类提供了两个优化方法transferTo()和transferFrom(),可以将一个通道交叉连接到另一个通道,而不需要通过一个缓冲区来传递数据。这些方法允许将数据直接传输到目标文件中,从而提高了传输的...
例如,FileChannel类可以用于直接在文件之间传输数据,避免了数据在内存中的多次拷贝,提高了性能。 **文件系统API** Java的java.nio.file包提供了丰富的文件系统操作接口,如Files类和Path类。这些API可以用来...
例如,你可以使用`java.nio`包的`FileChannel`和`ByteBuffer`来读取类文件。 3. **解析字节码**:使用`ClassDefinition`或者`defineClass()`方法将字节码转换为Class对象。注意,`defineClass()`方法必须使用正确的...
`FileUtil`类可能会使用Java的IO流进行读写操作,例如`copyFileUsingInputStreamOutputStream(String srcPath, String destPath)`和`copyFileUsingFileChannels(String srcPath, String destPath)`,分别利用...
24. **java.nio.channels.FileChannel**:提供文件通道,支持大文件读写和映射到内存。 25. **java.nio.charset.Charset**:处理字符集的类,用于编码和解码。 26. **java.nio.file.Files**:提供大量静态方法用于...