1.实现输出读取文件内容的示列(不推荐使用低效):
@Test public void testStream(){ InputStream fis=null; //声明输入流对象 OutputStream fos=null; //声明输出流对象 try { fis=new FileInputStream("d:\\ff_copy.txt"); fos=new FileOutputStream("d:\\ff_copy1.txt"); long num=0; //读取字节计数 int bt=0; //每次读入字节内容 //当读入文件末尾时,读入数据的值为-1,每次读入一个字节,存放变量bt中,直到读完整个文件 while((bt=fis.read())!=-1){ //以字母的形式逐个输出文件的每个字节 System.out.println((char) bt); fos.write(bt); //将字节写入输出流中,实现copy功能 num++; } System.out.println("读取的字节数为"+num+"\n 文件复制成功"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { fis.close(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2.使用缓冲流来实现(一般):
/* * 字节流测试:copy文件 */ @Test public void tsetBufferStream() { InputStream fis=null; OutputStream fos=null; try { fis=new BufferedInputStream(new FileInputStream("d:\\ff_copy.txt")); fos=new BufferedOutputStream(new FileOutputStream("d:\\ff_copy2.txt")); byte[] bur=new byte[2048]; int i; while((i=fis.read())!=-1){ fos.write(bur,0,i); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { fis.close(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
3.使用同道的方式:高效(推荐使用这种方式)
@Test public void testFileChanne(){ FileInputStream fi = null; FileOutputStream fo = null; FileChannel in = null; FileChannel out = null; try { fi = new FileInputStream("d:\\ff_copy.txt"); fo = new FileOutputStream("d:\\ff_copy3.txt"); in = fi.getChannel();//得到对应的文件通道 out = fo.getChannel();//得到对应的文件通道 in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道 } catch (IOException e) { e.printStackTrace(); } finally { try { fi.close(); in.close(); fo.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } }