程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> JavaIO(03)字節流--OutputStream and InputStream

JavaIO(03)字節流--OutputStream and InputStream

編輯:JAVA編程入門知識
IO概述:   IO流用來處理設備之間的數據傳輸 java對數據的操作是通過流的方式 java用於操作流的對象都在IO包中 流按操作數據分為兩種:字節流與字符流(編碼表) 流按流向分為:輸入流,輸出流   IO流常用基類   java.io包中的流的基本操作主要有:字節流和字符流   字節流的抽象基類:   InputStream: 進入程序的流 OutputStream:流出程序的流   在字節流中輸出數據主要使用OutputStream類完成,輸入使用的是InputStream類;   字符流的抽象基類:   Reader: Writer:   在字符流中輸出主要是使用Writer類完成,輸入主要使用Reader類完成;   注:有這四個類派生出來的子類名稱都是以期父類名作為子類名的後綴; 如:父類:InputStream -----   子類:FileInputStream 如:父類:Reader      ------  子類:FileReader   在java中IO操作主要的操作流程如下:   1:使用File類打開一個文件 2:通過字節流或字符流的子類指定要輸出的位置; 3:進行讀/寫操作 4:關閉輸入/輸出   詳解字節流--(OutputStream)   字節流主要操作byte類型的數據,主要操作類是OutputStream類和InputStream類; 1:字節輸出流 根據API文檔介紹: public abstract class OutputStream extends Object implements Closeable, Flushable 發現OutputStream類屬於抽象類,要想使用此類,則必須使用子類實例化對象;   2:OutputStream類中的常用方法: 將一個字節數據寫入數據流: public abstract void write(int b)throws IOException 將一個byte數組寫入數據流: public void write(byte[] b)throws IOException 將一個指定范圍的byte數組寫入數據流: public void write(byte[] b,int off,int len)throws IOException 刷新緩存區: public void flush()throws IOException 關閉數據流: public void close()throws IOException   3:使用FileOutputStream子類的構造方法: public FileOutputStream(File file)throws FileNotFoundException 操作時必須接收File類的實例,指明要輸出的文件路徑;  
實例01:
需求:向文件中寫入字符串
//public byte[] getBytes():使用平台的默認字符集將此 String 編碼為 byte 序列,並將結果存儲到一個新的 byte 數組中;

package cn.itcast03;

/*
 * 將一個字節數據寫入數據流:
 * public abstract void write( int b)throws IOException
 * 將一個byte數組寫入數據流:
 * public void write(byte[] b)throws IOException
 * 將一個指定范圍的byte數組寫入數據流:
 * public void write(byte[] b, int off,int len)throws IOException
 * 刷新緩存區:
 * public void flush()throws IOException
 * 關閉數據流:
 * public void close()throws IOException
 */

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FileOutputStream01 {
     public static void main(String[] args) throws IOException { 
           //聲明File對象
          File f = new File("a.txt" );
          
           //通過子類實例化父類對象
          OutputStream out = new FileOutputStream(f);
          
           //進行寫操作
          
          String s = "I love JAVA";
          
           byte[] bytes = s.getBytes();
          
           //將一個byte數組寫入數據流:
          out.write(bytes);
          
           //將一個指定范圍的byte數組寫入數據流:
          out.write(bytes,1,5);
          
           //將一個字節數據寫入數據流
          out.write( 'b');
          out.close();
     }
}

實例02:
package cn.itcast03;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

//追加新的內容
//public FileOutputStream(String name,boolean append)throws FileNotFoundException
//如果將append的值設置為true,則表示在文件的末尾追加內容;

public class FileOutStream03 {
     public static void main(String[] args) throws IOException {
          
          File file = new File("b.txt" );
          
          FileOutputStream fos = new FileOutputStream(file,true );
          
          String s = "Hello World";
           byte[] bytes = s.getBytes();
           for (int i = 0; i < bytes.length; i++) {
              fos.write(bytes[i]);
          }
          fos.close();
          
     }

}

  

詳解字節流--(InputStream)   查看API文檔: public abstract class InputStream extends Object implements Closeable   InputStream類的常用方法:   取得出入文件的大小: public int available()throws IOException 關閉輸入流: public void close()throws IOException 讀取一個字節內容,以數字的方式讀取(從輸入流中讀取數據的下一個字節。返回 0255 范圍內的 int 字節值。如果因為已經到達流末尾而沒有可用的字節,則返回值 -1 ) public abstract int read()throws IOException 將內容讀到byte數組中,同時返回讀入的個數 public int read(byte[] b)throws IOException
實例01:
package cn.itcast04;
/*
 * public abstract int read()throws IOException
 * public int read(byte[] b)throws IOException
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo01 {
     public static void main(String[] args) throws IOException {
/*        
//        File f = new File("G:"+File.separator+"JavaTest"+File.separator+"test01.txt ");
          File f = new File("a.txt");
          FileInputStream fis = new FileInputStream(f);
          
           int b;
          while ((b=fis.read())!=-1) {
              System.out.println((char)b);
          }
          fis.close();
*/
          System. out.println("==============================================" );
          File f = new File("a.txt" );
          FileInputStream fis2 = new FileInputStream(f);
           /*
          //將所有內容讀取到數組中
          byte[] bytes =new  byte[1024];
          //用於記錄本次讀取字節的個數
          fis2.read(bytes);
          fis2.close();
          System.out.println(new String(bytes));
          出現的問題:數組長度是1024,但是讀取的數組長度只有17字節,所以會有1007個無用的空間轉為字符串;
          修正錯誤如下:
          */
           /*
           *
          byte[] bytes = new  byte[1024];
           int len ;
          while(( len=fis2.read(bytes))!=-1)
          {
              String s = new String(bytes,0, len);
              System.out.println(s);
          }         
          fis2.close();
          出現的問題:以上雖然指定了byte數組的范文,但是程序依然開辟了很多的無用的空間,以上的程序沒有從根本上解決問題。
          解決方法:使用File提供的length()方法來取得文件的大小
          */
           byte[] bytes = new byte[( int)f.length()];
           int len;
           //如果len的值不是-1,表示文件沒有讀完;
           while((len=fis2.read(bytes))!=-1)
          {
              String s = new String(bytes,0,len);
              System. out.println(s);
          }
          fis2.close();
     }
}

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved