public class TestNio {
public static void main(String[] args) throws IOException {
writeFileChannel();
}
//fileChannel读文件
public static void testFileChannel() throws IOException {
// fileChannel
RandomAccessFile aFile = new RandomAccessFile(new File("d:\java-2021-03.7z"), "rw");
FileChannel channel = aFile.getChannel();
// 缓冲区
ByteBuffer buf = ByteBuffer.allocate(1024);
// 读数据进缓冲区
int bytesRead = channel.read(buf);
while (bytesRead != -1) {
System.out.println("file长度:" + bytesRead);
buf.flip();
while (buf.hasRemaining()) {
System.out.println((char) buf.get());
}
buf.clear();
bytesRead = channel.read(buf);
}
aFile.close();
System.out.println("end");
}
//fileChannel写文件
public static void writeFileChannel() throws IOException{
RandomAccessFile rw = new RandomAccessFile("d:\fx.txt", "rw");
FileChannel channel = rw.getChannel();
ByteBuffer buf = ByteBuffer.allocate(1024);
buf.put("你说过不闪躲,你非要这么做。".getBytes(StandardCharsets.UTF_8));
buf.flip();
while (buf.hasRemaining()) {
channel.write(buf);
}
channel.close();
}
//fileChannel通道之间传输
public static void testFileChannelTransfer() throws IOException{
RandomAccessFile aFile = new RandomAccessFile("d:\aa.txt", "rw");
FileChannel channelFrom = aFile.getChannel();
RandomAccessFile bFile = new RandomAccessFile("d:\fx.txt", "rw");
FileChannel channelTo = bFile.getChannel();
//from 的内容传输到 channelTo
channelTo.transferFrom(channelFrom, 0, channelFrom.size());
aFile.close();
bFile.close();
}
}