Java NIO FileChannel
2014-11-20 08:52
363 查看
Java Nio
By Jakob Jenkov Connect with me:
Rate article:Share article:Tweet
Table of ContentsOpening a FileChannel
Writing Data to a FileChannel
Closing a FileChannel
FileChannel Position
FileChannel Size
FileChannel Truncate
FileChannel Force
A Java NIO FileChannel is a channel that is connected to a file. Using a file channel you can read data from a file, and write data to a file. The Java NIO FileChannel class is NIO's an alternative to reading files with the standard Java IO API.A
FileChannel inChannel = aFile.getChannel();
int bytesRead = inChannel.read(buf);
First a
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
while(buf.hasRemaining()) {
channel.write(buf);
}
Notice how the
channel.position(pos +123);
If you set the position after the end of the file, and try to read from the channel, you will get -1 - the end-of-file marker.If you set the position after the end of the file, and write to the channel, the file will be expanded to fit the position and written data. This may result in a "file hole", where the physical file on the disk has gaps in the written data.
This example truncates the file at 1024 bytes in length.
Next: Java NIO SocketChannel
Java NIO FileChannel
By Jakob Jenkov Connect with me:
Rate article:Share article:Tweet
Table of ContentsOpening a FileChannel
Writing Data to a FileChannel
Closing a FileChannel
FileChannel Position
FileChannel Size
FileChannel Truncate
FileChannel Force
A Java NIO FileChannel is a channel that is connected to a file. Using a file channel you can read data from a file, and write data to a file. The Java NIO FileChannel class is NIO's an alternative to reading files with the standard Java IO API.A
FileChannelcannot be set into non-blocking mode. It always runs in blocking mode.
Opening a FileChannel
Before you can use aFileChannelyou must open it. You cannot open a FileChannel directly. You need to obtain a FileChannel via an InputStream, OutputStream, or a RandomAccessFile. Here is how you open a FileChannel via a RandomAccessFile:RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel();
Reading Data from a FileChannel
To read data from aFileChannelyou call one of the
read()methods. Here is an example:ByteBuffer buf = ByteBuffer.allocate(48);
int bytesRead = inChannel.read(buf);
First a
Bufferis allocated. The data read from the
FileChannelis read into the
Buffer.Second the
FileChannel.read()method is called. This method reads data from the
FileChannelinto the
Buffer. The
intreturned by the
read()method tells how many bytes were witten into the
Buffer. If -1 is returned, the end-of-file is reached.
Writing Data to a FileChannel
Writing data to aFileChannelis done using the
FileChannel.write()method, which takes a
Bufferas parameter. Here is an example:String newData = "New String to write to file..." + System.currentTimeMillis();
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
while(buf.hasRemaining()) {
channel.write(buf);
}
Notice how the
FileChannel.write()method is called inside a while-loop. There is no guarantee of how many bytes the
write()method writes to the
FileChannel.Therefore we repeat the
write()call until the
Bufferhas no further bytes to write.
Closing a FileChannel
When you are done using aFileChannelyou must close it. Here is how that is done:channel.close();
FileChannel Position
When reading or writing to aFileChannelyou do so at a specific position. You can obtain the current position of the
FileChannelobject by calling the
position()method.You can also set the position of the
FileChannelby calling the
position(long pos)method.Here are two examples:long pos channel.position();
channel.position(pos +123);
If you set the position after the end of the file, and try to read from the channel, you will get -1 - the end-of-file marker.If you set the position after the end of the file, and write to the channel, the file will be expanded to fit the position and written data. This may result in a "file hole", where the physical file on the disk has gaps in the written data.
FileChannel Size
Thesize()method of the
FileChannelobject returns the file size of the file the channel is connected to. Here is a simple example:long fileSize = channel.size();
FileChannel Truncate
You can truncate a file by calling theFileChannel.truncate()method. When you truncate a file, you cut it off at a given length. Here is an example:channel.truncate(1024);
This example truncates the file at 1024 bytes in length.
FileChannel Force
TheFileChannel.force()method flushes all unwritten data from the channel to the disk. An operating system may cache data in memory for performance reasons, so you are not guaranteed that data written to the channel is actually written to disk, until you call the
force()method.The
force()method takes a boolean as parameter, telling whether the file meta data (permission etc.) should be flushed too.Here is an example which flushes both data and meta data:channel.force(true);
Next: Java NIO SocketChannel
相关文章推荐
- 【JAVA】【NIO】8、Java NIO FileChannel
- 【原创】java NIO FileChannel 学习笔记 FileChannel实现分析 即FileChannelImpl分析
- 08. Java NIO FileChannel 文件通道
- Java - NIO之Channel(FileChannel)
- Java NIO AsynchronousFileChannel
- java nio 之FileChannel
- Java的NIO之FileChannel
- JAVA NIO FileChannel 内存映射文件
- javaNio Filechannel
- Java NIO FileChannel
- Java NIO FileChannel
- Java Nio 八、Java NIO FileChannel
- JavaNio——FileChannel
- Java NIO FileChannel
- 【原创】java NIO FileChannel 学习笔记 新建一个FileChannel
- Java NIO AsynchronousFileChannel
- java NIO系列: Java NIO AsynchronousFileChannel
- JAVA NIO之FileChannel
- FileChannel类的理解和使用(java.nio.channels.FileChannel)
- Java NIO AsynchronousFileChannel