先前使用一直很混乱的使用过这些方法,但都没有好好做过总结。

这两天趁有空,小结一下。

1、输入输出流

说起 java的 读写文件不得不说java中的输入输出流对象, 被读取的对象为输入流(如某个文件,或者读取请求url返回的数据等), 被写入的对象为输出流(某文件,或写入请求url鞥)。

2、读文件的总分为两种方式: 使用输入流InputStream、使用Reader

1)、使用InputStream;

InputStream为抽象类,具体读取文件需要使用其实现类,这里又可分为两种分支: FileInputStream、BufferedInputStream,

其中三者的继承关系为

a、请看使用FileInputStream读取文件的实例

//使用FileInputStream
     public void fileInputStream(){
         File file =  new File("D:\\tempTest\\xml\\5008.xml");
         File fileTo =  new File("D:\\tempTest\\xml\\5008_to.xml");
         FileInputStream fin = null;
         FileOutputStream fos = null;
         try{
             fin = new FileInputStream(file);
                byte[] buffer = new byte[1024];
                int len=0;
                fos = new FileOutputStream(fileTo);
                while((len = fin.read(buffer))!= -1){ //1024个字节读取
                    fos.write(buffer, 0, len);
                    //System.out.write(buffer, 0, len);
                }
             
         } catch (Exception e){
             e.printStackTrace();
         } finally {
             try {
                 if (fin != null) {
                     fin.close();
                 }
                 if (fos != null) {
                     fos.close();
                 }
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }

b、使用 BufferInputStream

public void bufferedInputStream(){
         File file =  new File("D:\\tempTest\\xml\\5008.xml");
         File fileTo =  new File("D:\\tempTest\\xml\\5008_to.xml");
         BufferedInputStream bin = null;
         BufferedOutputStream bos = null;
         try{
                //使用BufferedInputStream比FileInputStream效率高
                bin = new BufferedInputStream(new FileInputStream(file));
                byte[] buffer = new byte[1024];
                int len=0;
                bos = new BufferedOutputStream(new FileOutputStream(fileTo));
                while((len = bin.read(buffer))!=-1){ //1024个字节读取
                    bos.write(buffer, 0, len);
                    //System.out.write(buffer, 0, len);
                }
         } catch (Exception e){
             e.printStackTrace();
         } finally {
             try {
                 if (bin != null) {
                     bin.close();
                 }
                 if (bos != null) {
                     bos.close();
                 }
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
         
     }


   
注:这两种方式适合于读取二级制文件,如图片,声音、视频