国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > java- Java IO

java- Java IO

来源:程序员人生   发布时间:2016-08-11 08:28:30 阅读次数:2348次

 

这是java io 比较基本的1些处理流,除此以外我们还会提到1些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializable接口等等1些高级用法极为原理。

 

1、java io的开始:文件

1. 我们主要讲的是流,流的本质也是对文件的处理,我们按部就班1步1步从文件将到流去。

2. java 处理文件的类 File,java提供了10分详细的文件处理方法,举了其中几个例子,其余的可以去

 

Java代码  收藏代码
  1. package com.hxw.io;  
  2. import java.io.*;  
  3.    
  4. public class FileExample{  
  5.     public static void main(String[] args) {  
  6.        
  7.         createFile();  
  8.     }  
  9.    
  10.   /** 
  11.    * 文件处理示例 
  12.    */  
  13.   public static void createFile() {  
  14.      File f=new File("E:/电脑桌面/jar/files/create.txt");  
  15.         try{  
  16.             f.createNewFile();  //当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建1个新的空文件。  
  17.             System.out.println("该分区大小"+f.getTotalSpace()/(1024*1024*1024)+"G"); //返回由此抽象路径名表示的文件或目录的名称。  
  18.             f.mkdirs();  //创建此抽象路径名指定的目录,包括所有必须但不存在的父目录。  
  19. //            f.delete(); //  删除此抽象路径名表示的文件或目录  
  20.            System.out.println("文件名  "+f.getName());  //  返回由此抽象路径名表示的文件或目录的名称。  
  21.            System.out.println("文件父目录字符串 "+f.getParent());// 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。  
  22.             
  23.         }catch (Exception e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.   }  
  27. }  



2、字节流:

1.字节流有输入和输出流,我们首先看输入流InputStream,我们首先解析1个例子(FileInputStream)。

 

Java代码  收藏代码
  1. package com.hxw.io;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. public class FileCount {  
  7.    /** 
  8.     * 我们写1个检测文件长度的小程序,别看这个程序挺长的,你疏忽try catch块后发现也就那末几行而已。 
  9.     */  
  10.    publicstatic void main(String[] args) {  
  11.       //TODO 自动生成的方法存根  
  12.              int count=0;  //统计文件字节长度  
  13.       InputStreamstreamReader = null;   //文件输入流  
  14.       try{  
  15.           streamReader=newFileInputStream(new File("D:/David/Java/java 高级进阶/files/tiger.jpg"));  
  16.           /*1.new File()里面的文件地址也能够写成D:\\David\\Java\\java 高级进阶\\files\\tiger.jpg,前1个\是用来对后1个 
  17.            * 进行转换的,FileInputStream是有缓冲区的,所以用完以后必须关闭,否则可能致使内存占满,数据丢失。 
  18.           */  
  19.           while(streamReader.read()!=-1) {  //读取文件字节,并递增指针到下1个字节  
  20.              count++;  
  21.           }  
  22.           System.out.println("---长度是: "+count+" 字节");  
  23.       }catch (final IOException e) {  
  24.           //TODO 自动生成的 catch 块  
  25.           e.printStackTrace();  
  26.       }finally{  
  27.           try{  
  28.              streamReader.close();  
  29.           }catch (IOException e) {  
  30.              //TODO 自动生成的 catch 块  
  31.              e.printStackTrace();  
  32.           }  
  33.       }  
  34.    }  
  35.    
  36. }  



我们1步1步来,首先,上面的程序存在问题是,每读取1个自己我都要去用到FileInputStream,我输出的结果是“---长度是: 64982 字节”,那末进行了64982次操作!可能想象如果文件10分庞大,这样的操作肯定会出大问题,所以引出了缓冲区的概念。可以将streamReader.read()改成streamReader.read(byte[]b)此方法读取的字节数目等于字节数组的长度,读取的数据被存储在字节数组中,返回读取的字节数,InputStream还有其他方法mark,reset,markSupported方法,例如:

 

markSupported 判断该输入流能支持mark 和 reset 方法。

mark用于标记当前位置;在读取1定数量的数据(小于readlimit的数据)后使用reset可以回到mark标记的位置。

FileInputStream不支持mark/reset操作;BufferedInputStream支持此操作;

mark(readlimit)的含义是在当前位置作1个标记,制定可以重新读取的最大字节数,也就是说你如果标记后读取的字节数大于readlimit,你就再也回不到回来的位置了。

通常InputStream的read()返回⑴后,说明到达文件尾,不能再读取。除非使用了mark/reset。

 

 

2.FileOutputStream 按部就班版, InputStream是所有字节输出流的父类,子类有ByteArrayOutputStream,FileOutputStream,ObjectOutputStreanm,这些我们在后面都会逐一说到。先说FileOutputStream

我以1个文件复制程序来讲,顺便演示1下缓存区的使用。(Java I/O默许是不缓冲流的,所谓“缓冲”就是先把从流中得到的1块字节序列暂存在1个被称为buffer的内部字节数组里,然后你可以1下子取到这1整块的字节数据,没有缓冲的流只能1个字节1个字节读,效力孰高孰低1目了然。有两个特殊的输入流实现了缓冲功能,1个是我们经常使用的BufferedInputStream.)

 

Java代码  收藏代码
  1. package com.hxw.io;  
  2. import java.io.*;  
  3.    
  4. public class FileCopy {  
  5.    
  6.   public static void main(String[] args) {  
  7.      // TODO自动生成的方法存根  
  8.      byte[] buffer=new byte[512];   //1次取出的字节数大小,缓冲区大小  
  9.      int numberRead=0;  
  10.      FileInputStream input=null;  
  11.      FileOutputStream out =null;  
  12.      try {  
  13.         input=new FileInputStream("D:/David/Java/java 高级进阶/files/tiger.jpg");  
  14.         out=new FileOutputStream("D:/David/Java/java 高级进阶/files/tiger2.jpg"); //如果文件不存在会自动创建  
  15.          
  16.         while ((numberRead=input.read(buffer))!=-1) {  //numberRead的目的在于避免最后1次读取的字节小于buffer长度,  
  17.            out.write(buffer, 0, numberRead);       //否则会自动被填充0  
  18.         }  
  19.      } catch (final IOException e) {  
  20.         // TODO自动生成的 catch 块  
  21.         e.printStackTrace();  
  22.      }finally{  
  23.         try {  
  24.            input.close();  

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生