package cn.luxh.app;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import org.junit.Test;
public class NioTester {
/
读取文件
获取通道;创建缓冲区;让通道将数据读到这个缓冲区中。
/
@Test
public void testRead() {
FileInputStream fis = null;
FileChannel channel = null;
try {
//获取通道Channel,从FileInputStream中获取
fis = new FileInputStream(D:/test.rar);
channel = fis.getChannel();
//创建缓冲区
ByteBuffer buffer = ByteBuffer.allocate(1024);
//将数据从通道读取到缓冲区
channel.read(buffer);
//营业处理惩罚
//...
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(fis != null) {
fis.close();
}
if(channel != null) {
channel.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/
写文件
获取通道;创建一个缓冲区,用数据填充它;然后让通道用这些数据来履行写入操纵。
/
@Test
public void testWrite() {
FileOutputStream fos = null;
FileChannel channel = null;
try {
//获取通道,从FileOutputStream获取
fos = new FileOutputStream(D:/test.txt);
channel = fos.getChannel();
//创建缓冲区
ByteBuffer buffer = ByteBuffer.allocate(1024);
String words = hey,girl.I am a coder.;
byte[] message = words.getBytes(Charset.defaultCharset());
buffer.put(message);
buffer.flip();
channel.write(buffer);
}catch(IOException e) {
e.printStackTrace();
}finally {
try {
if(fos != null) {
fos.close();
}
if(channel != null) {
channel.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
/
读写操纵
获取通道;创建一个 Buffer,然后从源文件中将数据读到这个缓冲区中;
然后将缓冲区写入目标文件。
络续反复 读写 直到源文件停止。
/
@Test
public void testReadAndWrite() {
FileInputStream fis = null;
FileChannel inChannel = null;
FileOutputStream fos = null;
FileChannel outChannel = null;
try {
fis = new FileInputStream(D:/test.txt);
inChannel = fis.getChannel();
fos = new FileOutputStream(D:/test2.txt);
outChannel = fos.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(true) {
//重设缓冲区,使它可以接管读入的数据。
buffer.clear();
if(inChannel.read(buffer)==-1) {
break;
}
//让缓冲区可以将新读入的数据写入通道
buffer.flip();
outChannel.write(buffer);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(fos != null) {
fos.close();
}
if(outChannel != null) {
outChannel.close();
}
if(fis != null) {
fis.close();
}
if(inChannel != null) {
inChannel.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}