JavaSE入门学习44:文件传输基础之I/O流(三)

来源:互联网 发布:sqlserver清空数据库 编辑:程序博客网 时间:2024/06/11 04:29

三字节流的使用

       6)FileOutputStream--->实现了向文件中写出byte数据的方法

       FileOutputStream继承了OutputStream抽象类。

       FileOutputStream类中的方法:


       实例代码1:

<span style="font-size:18px;">import java.io.*;public class FileOutDemo1{public static void main(String[] args) throws IOException {//如果该文件不存在,则直接创建,如果存在,删除后创建FileOutputStream out = new FileOutputStream("E:\\Java\\JavaSE\\IO\\out.dat");out.write('A');//写出了'A'的低八位out.write('B');//写出了'B'的低八位int a = 10;//write只能写八位,那么写一个int需要些写4次,每次8位out.write(a >>> 24);out.write(a >>> 16);out.write(a >>> 8);out.write(a);byte[] gbk = "中国".getBytes("gbk");out.write(gbk);out.close();IOUtil.printHex("E:\\Java\\JavaSE\\IO\\out.dat");}}</span>

       运行结果:


       文件拷贝

       实例代码2:

<span style="font-size:18px;">import java.io.*;public class IOUtil{/* * 文件拷贝,字节批量读取 */public static void copyFile(File srcFile,File destFile) throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件");}FileInputStream in = new FileInputStream(srcFile);FileOutputStream out = new FileOutputStream(destFile);byte[] buf = new byte[8*1024];int b ;        while((b = in.read(buf,0,buf.length))!=-1){          out.write(buf,0,b);          out.flush();//最好加上       }       in.close();       out.close();}public static void main(String[] args) {try{IOUtil.copyFile(new File("E:\\Java\\JavaSE\\IO\\test.txt"), new File("E:\\Java\\JavaSE\\IO\\test1.txt"));}catch(IOException e) {e.printStackTrace();}}}</span>

       运行结果:


       

       7)DataOutputStream类/DataInputStream类

       对"流"功能的扩展,可以更加方面的读取int、long、字符等类型数据。此类体现了设计模式中的装饰模式。

       DataInputStream类中常用的方法:



       DataOutputStream类中常用的方法:



         实例1:

import java.io.*;public class DisDemo{public static void main(String[] args) throws IOException{    String file = "E:\\Java\\JavaSE\\IO\\demo\\dos.dat";    IOUtil.printHex(file);    DataInputStream dis = new DataInputStream(new FileInputStream(file));    int i = dis.readInt();    System.out.println(i);    i = dis.readInt();    System.out.println(i);    long l = dis.readLong();    System.out.println(l);    double d = dis.readDouble();    System.out.println(d);    String s = dis.readUTF();    System.out.println(s);            dis.close();}}

       运行结果:


         实例2:

import java.io.*;public class DosDemo{        public static void main(String[] args) throws IOException {            String file = "E:\\Java\\JavaSE\\IO\\demo\\dos.dat";            DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));            dos.writeInt(10);            dos.writeInt(-10);            dos.writeLong(10l);            dos.writeDouble(10.5);            //采用utf-8编码写出            dos.writeUTF("中国");            //采用utf-16be编码写出            dos.writeChars("中国");            dos.close();            IOUtil.printHex(file);        }}

       运行结果:


       8)BufferedInputStream类/BufferedOutputStream类

       这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入;或读取操作时,都会加上缓冲,这种流模式提

高了IO的性能从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中。

       BufferedInputStream类的方法:


       BufferedOutputStream类的方法:


       FileOutputStream--->write()方法相当于一滴一滴地把水“转移”过去。

       DataOutputStream-->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去。

       BufferedOutputStream--->write方法更方便,相当于一飘一瓢先放入桶中,再从桶中倒入到另一个缸中,性能提

高了。

      实例代码:

import java.io.*;public class IOUtil{/* * 文件拷贝,字节批量读取 */public static void copyFile(File srcFile,File destFile) throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件");}FileInputStream in = new FileInputStream(srcFile);FileOutputStream out = new FileOutputStream(destFile);byte[] buf = new byte[8*1024];int b ;        while((b = in.read(buf,0,buf.length))!=-1){          out.write(buf,0,b);          out.flush();//最好加上        }        in.close();        out.close();}/* * 进行文件的拷贝,利用带缓冲的字节流 */public static void copyFileByBuffer(File srcFile,File destFile) throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件");}BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));int c ;while((c = bis.read())!=-1){bos.write(c);bos.flush();//刷新缓冲区}bis.close();bos.close();}/* * 单字节,不带缓冲进行文件拷贝 */public static void copyFileByByte(File srcFile,File destFile)throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件");}FileInputStream in = new FileInputStream(srcFile);FileOutputStream out = new FileOutputStream(destFile);int c;while((c = in.read())!=-1){out.write(c);out.flush();}in.close();out.close();}public static void main(String[] args) {try{//三种方法读取写入的时间不一样IOUtil.copyFileByBuffer(new File("E:\\Java\\JavaSE\\IO\\FileUtils.java"),newFile(                                        "E:\\Java\\JavaSE\\IO\\aa.txt"));IOUtil.copyFileByByte(new File("E:\\Java\\JavaSE\\IO\\FileUtils.java"), new File("E:\\Java\\JavaSE\\IO\\bb.txt"));IOUtil.copyFile(new File("E:\\Java\\JavaSE\\IO\\FileUtils.java"), new File("E:\\Java\\JavaSE\\IO\\cc.txt"));}catch(IOException e) {e.printStackTrace();}}}

      运行结果:


       测试拷贝时间:

import java.io.*;public class IOUtil{/* * 文件拷贝,字节批量读取 */public static void copyFile(File srcFile,File destFile) throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件");}FileInputStream in = new FileInputStream(srcFile);FileOutputStream out = new FileOutputStream(destFile);byte[] buf = new byte[8*1024];int b ;        while((b = in.read(buf,0,buf.length))!=-1){          out.write(buf,0,b);          out.flush();//最好加上        }        in.close();        out.close();}/* * 进行文件的拷贝,利用带缓冲的字节流 */public static void copyFileByBuffer(File srcFile,File destFile) throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件");}BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));int c ;while((c = bis.read())!=-1){bos.write(c);bos.flush();//刷新缓冲区}bis.close();bos.close();}/* * 单字节,不带缓冲进行文件拷贝 */public static void copyFileByByte(File srcFile,File destFile)throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件");}FileInputStream in = new FileInputStream(srcFile);FileOutputStream out = new FileOutputStream(destFile);int c ;while((c = in.read())!=-1){out.write(c);out.flush();}in.close();out.close();}public static void main(String[] args) {try{long start=System.currentTimeMillis();//IOUtil.copyFileByByte(new File("E:\\Java\\JavaSE\\IO\\1.mp3"), new File(//"E:\\Java\\JavaSE\\IO\\2.mp3"));//测试的为95042毫秒,最慢//IOUtil.copyFileByBuffer(new File("E:\\Java\\JavaSE\\IO\\1.mp3"), new File(//"E:\\Java\\JavaSE\\IO\\3.mp3"));//测试的为4799毫秒,中等速度IOUtil.copyFile(new File("E:\\Java\\JavaSE\\IO\\1.mp3"), new File("E:\\Java\\JavaSE\\IO\\4.mp3"));//测试的为60毫秒,最快            long end=start=System.currentTimeMillis();            System.out.println(end-start);}catch(IOException e) {e.printStackTrace();}}}

      运行结果:


0 0
原创粉丝点击