转载

Java回顾之I/O(1)

工作后,使用的技术随着项目的变化而变化,时而C#,时而Java,当然还有其他一些零碎的技术。总体而言,C#的使用时间要更长一些,其次是 Java。我本身对语言没有什么倾向性,能干活的语言,就是好语言。而且从面向对象的角度来看,我觉得C#和Java对我来说,没什么区别。

这篇文章主要回顾Java中和I/O操作相关的内容,I/O也是编程语言的一个基础特性,Java中的I/O分为两种类型,一种是顺序读取,一种是随机读取。

我们先来看顺序读取,有两种方式可以进行顺序读取,一种是InputStream/OutputStream,它是针对字节进行操作的输入输出流;另外一种是Reader/Writer,它是针对字符进行操作的输入输出流。

下面我们画出InputStream的结构

    • FileInputStream:操作文件,经常和BufferedInputStream一起使用
    • PipedInputStream:可用于线程间通信
    • ObjectInputStream:可用于对象序列化
    • ByteArrayInputStream:用于处理字节数组的输入
    • LineNumberInputStream:可输出当前行数,并且可以在程序中进行修改

下面是OutputStream的结构

Java回顾之I/O(1)

    • PrintStream:提供了类似print和println的接口去输出数据

下面我们来看如何使用Stream的方式来操作输入输出

  1. 使用BufferedOutputStream复制文件 
  2.  public static void copyFilebyBufferedOutputStream(File file)throws IOException 
  3.  { 
  4.      FileInputStream fis = null
  5.      BufferedInputStream bis = null
  6.      FileOutputStream fos = null
  7.      BufferedOutputStream bos = null
  8.      try 
  9.      { 
  10.          fis = new FileInputStream(file); 
  11.          bis = new BufferedInputStream(fis); 
  12.          fos = new FileOutputStream(file.getName() + ".bak"); 
  13.          bos = new BufferedOutputStream(fos); 
  14.          byte[] buffer = new byte[1024]; 
  15.          int bytesRead = 0
  16.          while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1
  17.          { 
  18.              bos.write(buffer, 0, bytesRead); 
  19.          } 
  20.          bos.flush(); 
  21.      } 
  22.      catch(Exception ex) 
  23.      { 
  24.          System.out.println("Error occurs during copying " + file.getAbsoluteFile()); 
  25.      } 
  26.      finally 
  27.      { 
  28.          if (fis != null) fis.close(); 
  29.          if (bis != null) bis.close(); 
  30.          if (fos != null) fos.close(); 
  31.          if (bos != null) bos.close(); 
  32.      } 
  33.  } 
  1. 使用FileOutputStream复制文件 
  2.  public static void copyFileByFileOutputStream(File file) throws IOException 
  3.  { 
  4.      FileInputStream fis = null
  5.      FileOutputStream fos = null
  6.      try 
  7.      { 
  8.          fis = new FileInputStream(file); 
  9.          fos = new FileOutputStream(file.getName() + ".bak"); 
  10.          byte[] buffer = new byte[1024]; 
  11.          int bytesRead = 0
  12.          while((bytesRead = fis.read(buffer,0,buffer.length)) != -1
  13.          { 
  14.              fos.write(buffer, 0, bytesRead); 
  15.          } 
  16.          fos.flush(); 
  17.      } 
  18.      catch(Exception ex) 
  19.      { 
  20.          System.out.println("Error occurs during copying " + file.getAbsoluteFile()); 
  21.      } 
  22.      finally 
  23.      { 
  24.          if (fis != null) fis.close(); 
  25.          if (fos != null) fos.close(); 
  26.      } 
  27.  } 
  1. 使用BufferedInputStream读取文件 
  2.  public static byte[] readFileByBufferedInputStream(File file) throws Exception 
  3.  { 
  4.      FileInputStream fis = null
  5.      BufferedInputStream bis = null
  6.      ByteArrayOutputStream output = new ByteArrayOutputStream(); 
  7.      try 
  8.      { 
  9.          fis = new FileInputStream(file); 
  10.          bis = new BufferedInputStream(fis); 
  11.          byte[] buffer = new byte[1024]; 
  12.          int bytesRead = 0
  13.          while((bytesRead = bis.read(buffer, 0, buffer.length)) != -1
  14.          { 
  15.              output.write(buffer, 0, bytesRead); 
  16.          } 
  17.      } 
  18.      catch(Exception ex) 
  19.      { 
  20.          System.out.println("Error occurs during reading " + file.getAbsoluteFile()); 
  21.      } 
  22.      finally 
  23.      { 
  24.          if (fis != null) fis.close(); 
  25.          if (bis != null) bis.close(); 
  26.          if (output != null) output.close(); 
  27.      } 
  28.      return output.toByteArray(); 
  29.  } 
  1. 使用FileInputStream读取文件信息 
  2.  public static byte[] readFileByFileInputStream(File file) throws IOException 
  3.  { 
  4.      ByteArrayOutputStream output = new ByteArrayOutputStream(); 
  5.      FileInputStream fis = null
  6.      try 
  7.      { 
  8.          fis = new FileInputStream(file); 
  9.          byte[] buffer = new byte[1024]; 
  10.          int bytesRead = 0
  11.          while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1
  12.          { 
  13.              output.write(buffer, 0, bytesRead); 
  14.          } 
  15.      } 
  16.      catch(Exception ex) 
  17.      { 
  18.          System.out.println("Error occurs during reading " + file.getAbsoluteFile()); 
  19.      } 
  20.      finally 
  21.      { 
  22.          if (fis !=null) fis.close(); 
  23.          if (output !=null) output.close(); 
  24.      } 
  25.      return output.toByteArray(); 
  26.  } 

1 2 下一页>>查看全文
内容导航
 第 1 页:Java回顾之I/O(1)  第 2 页:Java回顾之I/O(2)

原文:Java回顾之I/O(1) 返回开发首页

正文到此结束
Loading...