`
xzknet
  • 浏览: 309612 次
  • 性别: Icon_minigender_1
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

FileChannel类的简单用法

阅读更多

清单一:

  1. import java.io.*;
  2. import java.nio.*;
  3. import java.nio.channels.*;
  4. public class GetChannel
  5. {
  6. private static final int BSIZE = 1024;
  7. public static void main(String[] args)throws IOException 
  8. {
  9.     FileChannel fc = new FileOutputStream ("data.txt").getChannel();
  10.     fc.write(ByteBuffer.wrap("some txt".getBytes()));//write()    Writes a sequence of bytes to 
  11.     //this channel from the given buffer
  12.     fc.close();
  13.     fc = new RandomAccessFile("data.txt","rw").getChannel();
  14.     fc.position(fc.size());//abstract    FileChannel position(long newPosition) 
  15.                              //Sets this channel's file position. 
  16.     fc.write(ByteBuffer.wrap("some more".getBytes()));
  17.     fc.close();
  18.     fc =new FileInputStream("data.txt").getChannel();
  19.     ByteBuffer bf =    ByteBuffer.allocate(BSIZE);//static ByteBuffer allocate(int capacity) 
  20.                                                     //Allocates a new byte buffer. 
  21.     //一旦调用read()来告知FileChannel向ByteBuffer存储字节,就必须调用缓冲器上的filp(),
  22.     //让它做好别人存储字节的准备(是的,他是有点拙劣,但请记住他是很拙劣的,但却适于获取大速度)
  23.     //
  24.     fc.read(bf);// Reads a sequence of bytes from this channel into the given buffer
  25.     bf.flip();
  26.     while(bf.hasRemaining())
  27.         System.out.print((char)bf.get());
  28. }
  29. }

 

清单二:

  1. //Copying a file using channels and buffers;
  2. import java.io.*;
  3. import java.nio.*;
  4. import java.nio.channels.*;
  5. public class ChannelCopy
  6. {
  7. private static final int BSIZE = 1024;
  8. public static void main(String [] args)throws IOException 
  9. {
  10.    if (args.length!=2)
  11.    {
  12.     System.out.println("argument:sourcefile destfile");
  13.     System.exit(1);
  14.    }
  15.    FileChannel 
  16.         in = new FileInputStream (args[0]).getChannel(),
  17.         out = new FileOutputStream (args[1]).getChannel();
  18.    ByteBuffer bb = ByteBuffer.allocate(BSIZE);
  19.    while (in.read(bb)!=-1)
  20.    {
  21.     bb.flip();
  22.     out.write(bb);
  23.     bb.clear();//prepare for reading;清空缓冲区;
  24.    }
  25. }
  26. }

 

清单三

  1. import java.io.*;
  2. import java.nio.*;
  3. import java.nio.channels.*;
  4. public class TransferTo
  5. {
  6. public static void main(String [] args) throws IOException
  7. {
  8.    if(args.length!=2)
  9.    {
  10.     System.out.println("argument: sourcefile destfile");
  11.     System.exit(1);
  12.    }
  13.    FileChannel
  14.        in = new FileInputStream(args[0]).getChannel(),
  15.        out = new FileOutputStream(args[1]).getChannel();
  16. //abstract   long transferTo(long position, long count, WritableByteChannel target) 
  17. //          Transfers bytes from this channel's file to the given writable byte channel. 
  18.    in.transferTo(0,in.size(),out);
  19.    //or
  20.    //using out
  21. //abstract   long transferFrom(ReadableByteChannel src, long position, long count) 
  22.       //      Transfers bytes into this channel's file from the given readable byte channel. 
  23. // out.transferFrom(in,0,in.size());
  24. }
  25. }
分享到:
评论
1 楼 一塌糊涂 2011-11-10  
本来我不想评论的,
但是我实在觉得在网上转转来实在是没意思。
你既然转了,干吗他妈的边转载出处都不写!
蛋疼!

相关推荐

    拷贝文件及文件夹(封装工具类)

    在拷贝单个文件时,我们可以使用`java.nio.file.Files`类提供的`copy()`方法,它提供了简单且高效的文件复制功能。但若要拷贝整个目录及其子目录,我们需要递归处理每个文件和子目录。以下是一个基础的文件拷贝工具...

    java写的一个实用的高速复制大文件的工具类

    这两个方法虽然简单易用,但在大文件操作中可能会导致内存溢出,因为它们通常会将整个文件内容加载到内存中。为了解决这个问题,我们需要采用流(Stream)进行处理,以便逐块读取和写入数据,减少对内存的需求。 下面...

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

    在介绍完Java NIO的基础概念后,文档通过代码示例加深了对NIO使用方法的理解。如ChannelDemo.java展示了一个简单的文件读取操作,其中使用了RandomAccessFile和FileChannel来读取文件,并通过ByteBuffer缓冲区来接收...

    java网络编程NIO视频教程

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

    工具类,文本文件替换方法.zip

    `String`类的`replaceAll()`方法允许使用正则表达式,例如`^start.*end$`会匹配以"start"开头,以"end"结束的任何内容。 7. **性能优化** 对于大型文本文件,一次性加载到内存可能会消耗大量资源。此时,可以采用...

    java NIO原理和使用

    下面是一个简单的 Java NIO 示例,展示了如何使用 `FileChannel` 和 `ByteBuffer` 进行文件复制: ```java package nio; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio....

    基于Java的实例源码-二进制IO类与文件复制操作实例.zip

    这个压缩包"基于Java的实例源码-二进制IO类与文件复制操作实例.zip"提供了一些实际的代码示例,帮助开发者了解如何使用Java进行二进制文件的读写和复制操作。在这个实例中,我们将深入探讨Java中的关键二进制IO类...

    大文件分割与合并

    在Java中,我们可以使用`java.nio`包中的`FileChannel`类来实现高效的数据传输。以下是一个简单的文件合并示例: ```java import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels....

    超简单Java多线程填表源码.zip

    如果源码中使用了Thread类,那么会创建一个子类并重写其run()方法,然后创建该子类的对象并调用start()方法启动线程。另一种方式是实现Runnable接口,将业务逻辑放在run()方法中,然后将Runnable对象传递给Thread的...

    java 文件操作类

    - **创建文件**:通过`File`类的构造函数可以创建一个`File`对象,然后使用`createNewFile()`方法创建新的文件。 - **检查文件/目录**:`exists()`方法检查文件或目录是否存在,`isFile()`和`isDirectory()`分别...

    关于文件的读写各种方法

    文件传输,特别是在网络环境下,通常涉及`java.nio`包中的类,如`SocketChannel`和`FileChannel`。下面是一个简单的文件上传示例: ```java ServerSocket server = new ServerSocket(8080); Socket client = server...

    java复制文件的4种方式

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

    ffc.zip_FileCopy_NIO_java nio

    在Java NIO中,可以使用`FileChannel`类来代表一个文件通道,它可以从一个通道读取数据并写入另一个通道。以下是一个简单的文件复制示例: ```java import java.io.IOException; import java.nio.channels....

    NIO学习系列:文件锁定和字符集

    通过调用`FileChannel.lock()`方法,我们可以尝试获取一个文件锁。如果文件已被其他进程或线程锁定,该操作将阻塞直到锁可用。文件锁是共享的,意味着同一文件可以被多个读取者同时锁定,但只能被一个写入者锁定。这...

    基于java的二进制IO类与文件复制操作实例.zip

    对于大文件,可以使用`FileChannel`的`transferFrom()`和`transferTo()`方法,它们允许在两个通道之间直接传输数据,减少了内存开销。 总之,Java的二进制IO类为开发者提供了强大而灵活的工具来处理各种非文本数据...

    java_api_中文

    JDK API 1.7文档包含了所有类、接口、方法和构造函数的详细说明,是开发者查询API功能和用法的权威参考。在阅读时,可以通过类名、方法名以及它们的描述来理解它们的功能和使用场景。此外,每个类或接口通常都会有一...

    NIO复制文件

    本节我们将深入探讨如何利用NIO进行文件复制,并通过示例代码`NioDemo.java`来理解相关类的使用。 首先,NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。在文件复制过程中,我们主要...

    JAVA nio的一个简单的例子

    在这个简单的例子中,我们可能使用了`java.nio.charset.Charset`类对字符串进行编码和解码,以及`java.security.MessageDigest`类计算字符串的哈希值。哈希值计算通常用于数据校验,确保信息在传输过程中未被篡改。 ...

    java 使用IO流实现文件的复制

    在这个例子中,我们使用`FileChannel`的`transferTo()`方法直接将源文件通道的数据传输到目标文件通道,避免了中间的缓冲区操作,提高了效率。 总的来说,Java通过IO流提供了多种文件复制的方法,开发者可以根据...

    javase-6-doc-api-zh_CN

    Java 6引入了NIO的升级版NIO.2,增加了文件系统API,如Path类、Files类和FileChannel类的新方法,使文件操作更加高效和灵活。例如,可以直接创建符号链接,以及异步I/O操作,提高了文件系统的操作性能。 5. **改进...

Global site tag (gtag.js) - Google Analytics