本地文件的读写复制

1.往被本地文件中写数据

public void test()throws Exception{

String str="hello,nio";

FileOutputStream fos = new FileOutputStream("basic.txt");

FileChannel fc = fos.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(1024);

buffer.put(str.getBytes());

buffer.flip();

fc.write(buffer);

fos.close();

}

NIO中的通道是从输出流对象里通过getChannel()方法获取到的,该通道是双向的,既可以读】又可以写。在往通道里写数据之前,必须通过put方法把数据存到ByteBuffer中,然后通过通道的write方法写数据。在write之前,需要调用flip方法翻转缓冲区,把内部重置到初始位置,这样在接下来写数据时才能把所有数据写到通道里面。

2.从本地文件中读数据

public void test()throws Exception{

File file = new File("basic.txt");

FileInputStream fis = new FileInputStream(file);

FileChannel fc = fis.getChannel();

ByteBuffer buffer = ByteBuffer.allocate((int)file.length());

fc.read(buffer);

System.out.println(new String(buffer.array()));

fis.close();

3.复制文件

public void test()throws Exception{

FileInpurStream fis = new FileInputStream("c:\\user\\zdx\\Desktop\\oracle.mov");

FileOutputStream fos = new FileOutputStream("d:\\oracle.mov");

byte[] b = newbyte[1024];

while(true){

int res=fis.read(b);

if(res==-1){

break;}

fos.write(b,0,res);

}

fis.close();

fos.close();

}

以上代码分别通过输入流和输出流实现了文件的复制,这是通过传统的BIO实现的。

通过NIO复制相同的视频文件,代码如下

public void test()throws Exception{

FileInputStream fis = new FileInputStream("C:\\users\\zdx\\Desktop\\oracle.mov");

FileOutputStream fos = new FIleOutputStream("d:\\ooracle.mov");

FileChannel sourceCh=fis.getChannel();

FileChannel destCh=fos.getChannel();

destCh.transferFrom(sourceCh,0,sourceCh.size());

sourceCh.close();

destCh.close();

}

上述代码分别从两个流中得到两个通道,sourceCh负责读数据,destCh负责写数据,然后直接调用transferFrom方法一步到位实现了文件的复制。

你可能感兴趣的:(本地文件的读写复制)