1. 程式人生 > >Java 檔案流一:位元組流(FileInputStream 和 FileOutputStream)

Java 檔案流一:位元組流(FileInputStream 和 FileOutputStream)

   Java檔案流操作是一個非常重要的內容。下圖列舉了關於Java基本的檔案流操作,當然目前還有NIO,這個後來會進行討論,先看基本的檔案流操作。我們主要使用的是訪問檔案的流和緩衝流。

  檔案的流操作一般包含字元流和位元組流,兩者區別在於,字元流每次傳播16bit資料,位元組流一次讀取8bit資料。這裡先對Java中位元組流的使用展開討論。

  必須明確一個概念,流操作包含了輸入輸出流,其中,輸出流指的是檔案流輸出,也就是將檔案流輸出到磁碟或者資料庫;輸入流是從磁碟或者資料庫中讀取流資料,並打印出來。下面以程式碼來給大家做個展示。

1 FileInputStream 檔案讀入

    //使用byte[]陣列進行讀取檔案
    public void testInput() {
        File file=new File("D:\\test.txt");//此處讀取的為txt文字,也可以是圖片或者其他,但是列印結果會比較尷尬,具體可以試試
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(file);
            byte[] b=new byte[5];//讀取資料到陣列,這裡根據讀取的問件定大小,圖片或者視訊可以採用1024以及其倍數
            int len;//每次讀入byte的位元組長度,到末尾為-1
            while((len=fis.read(b))!=-1) {
                /*這裡的i的閾值一定為len 因為len不是固定的 在讀到檔案末尾時 len
                與每次固定讀入長度(這裡是 5)不一樣
                */
                for(int i=0;i<len;i++) {
                    System.out.println((char)b[i]);
                }
                /*或者這樣列印
                String str=new String(b,0,len);
                System.out.println(str);*/
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            if(fis!=null)
                try {
                    fis.close();//關檔案操作 必須要有!!!
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            
        }
        
    }

2 檔案輸出 FileOutputStream

   //檔案流輸出
    public void testOutput() {
        //輸出目標(其目標可以不存在 可以在程式執行中自行建立,若存在會自動覆蓋檔案)
        File file=new File("D:test1.txt");
        //建立一個FileOutputStream物件 將file作為引數傳入
        FileOutputStream fos=null;
        try {
            fos=new FileOutputStream(file);
            //向檔案中寫東西(覆蓋寫法)
            fos.write(new String("I love China").getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            if(fos!=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
    }

3 有了輸入和輸出的樣例,其實我們就可以將檔案的輸入輸出封裝為一個工具類,具體操作如下:

//其中 src dst分別為檔案的 源地址和目標地址

 public void copyFile(String src,String dst) {
        //1 提供讀入 輸出檔案(位元組流)(可以為txt 或者 圖片 視訊等)
                File file1=new File(src);
                File file2=new File(dst);    
                //提供流物件
                FileInputStream fis=null;
                FileOutputStream fos=null;
                try {
                    fis=new FileInputStream(file1);
                    fos=new FileOutputStream(file2);
                    // 實現檔案複製
                    byte[] b=new byte[10];//讀取位元組長度,根據所傳檔案大小來定,圖片視訊一般為1024及其倍數
                    int len;//每次讀入的長度
                    while((len=fis.read(b))!=-1) {
                        //寫入檔案
                        fos.write(b, 0, len);
                    }
                    
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }finally {
                    //先關輸出
                    if(fos!=null) {
                        try {
                            fos.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    //再關輸入
                    if(fis!=null) {
                        try {
                            fis.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
    }

方法呼叫:

public static void main(String[] args) {
        String src="D:\\test.txt";//源地址
        String dst="D:\\test1.txt";//目標地址
        copyFile(src,dst);//進行copy(注意這個方法在這個類裡面要是靜態,因為直接被main 方法呼叫了)
    }
就可以看到 D盤裡有一個test1.txt.

【注意】這裡根據位元組流進行操作,讀取中文時,是讀不出來的,因為漢語為字元。後來會對其進行討論。

相關推薦

Java 檔案位元組FileInputStream FileOutputStream

   Java檔案流操作是一個非常重要的內容。下圖列舉了關於Java基本的檔案流操作,當然目前還有NIO,這個後來會進行討論,先看基本的檔案流操作。我們主要使用的是訪問檔案的流和緩衝流。   檔案的流操作一般包含字元流和位元組流,兩者區別在於,字元流每次傳播16bit資

四種讀寫檔案的方式系統呼叫open/read/write,C語言fopen,fgets, fputs,C++(ifstream, ofstream getline,)泛型演算法

第一種方法是系統呼叫 (1)open系統呼叫    原型:        #include <sys/types.h>        #include <sys/stat.h>        #include <fcntl.h>     

學習MongoDB MongoDB 入門安裝與配置

          MongoDB一種非關係型資料庫(NoSql),是一種強大、靈活、可擴充套件的資料儲存方式,因為MongoDB是文件模型,自由靈活很高,可以讓你在開發過程中暢順無比,對於大資料量、高併發、弱事務的網際網路應用,MongoDB可以應對自如,MongoDB內建的水平擴充套件機制提供了從百萬到十

java計算長方形的周長和麵積物件

1 1 4 1 2 3 10 6 4 5 18 20 2 2 8 4 0 0 0 0 0 0 0 0 import java.util.Scanner; class Rect {     private int length;   private int width;         public Rect

java輸入輸出14IO位元組讀寫中文

位元組流讀取中文的問題 位元組流在讀中文的時候有可能會讀到半個中文,造成亂碼。 位元組流寫出中文的問題 位元組流直接操作位元組,所以寫出中文必須將字串轉換成位元組陣列。寫出回車換行write("\r\n

java輸入輸出10IOIO概述及其分類

1 概念 1、IO流用來處理裝置之間的資料傳輸。 2、Java對資料的操作時通過流的方式。 3、Java用於操作流的類都在IO包中。 4、流按流向分為兩種:輸入流,輸出流。 5、流按照操作型別分為兩種:(1)位元組流:位元組流可以操作任何資料,因為在計算機中任何資料都是以位元

Java位元組、字元

1、IO概述- IO流概述及分類 1)、IO流: I:Input(輸入):資料從外部流向程式中。(外部:檔案) O:Ouput(輸出):資料從程式流向外部。 流:線性的,有方向的 2)、作用: 可以“讀”,“寫”檔案的內容,File類只能獲取檔案/目

Java之路位元組與字元

儘管可以使用File進行檔案的操作,但是如果要進行檔案內容的操作,在Java之中就必須通過兩類流操作完成。 Java的流操作分為位元組流和字元流兩種。 字元流處理的物件單元是Unicode字元,每個Unicode字元佔據2個位元組,而位元組流輸入輸出的資料是以單個位元組(Byte

java輸入輸出11IOFileOutputStream

FileOutputStream(String str)在建立物件的時候沒有這個檔案會建立該檔案,如果有這個檔案就會將其清空。 package filePackage; import java.io.F

java輸入輸出12IO拷貝圖片

第1種實現方式 package filePackage; import java.io.FileInputStream; import java.io.FileNotFoundException; im

java輸入輸出13IOBufferedInputStreamBufferedOutputStream拷貝

緩衝思想 位元組流一次讀寫一個數組的速度明顯比一次讀寫一個位元組的速度快很多,這是加入了陣列這樣的緩衝區的效果。 BufferedInputStream BufferedInputStream中讀取一個緩衝區(陣列),從BufferedInputStream中讀

Java IO3位元組

流類      Java的流式輸入/輸出是建立在四個抽象類的基礎上的:InputStream(位元組輸入流)、OutputStream(位元組輸出流)、Reader(字元輸入流)、Writer(字元輸出流)。它們用來建立具體的流式子類。儘管程式通過具體子類執行輸入/

Java——IO(二)使用位元組來實現圖片加密、拷貝檔案的功能

1.實現圖片加密功能 2.拷貝檔案(在控制檯錄入檔案的路徑,將檔案拷貝到當前專案下)  3.實現錄入資料拷貝到檔案的功能(將鍵盤錄入的資料拷貝到當前專案下的te.txt檔案中,錄入資料遇到quit時退出) package pra_16; import java.i

學習筆記之java.io包中的位元組—— 基本的InputStreamOutputStream

先看下類的宣告: 1 2 public abstract class InputStream implements Closeable public abstract class

java提高篇拓展篇 java知識彙總---IO的使用規律總結含程式碼示例淺顯易懂

IO流的使用規律總結。 解決的問題,就是在開發過程中具體要使用哪個流物件的問題。 1,明確 資料來源,資料匯(資料的目的)其實就是在明確要使用的IO體系,InputStream OutputStream Reader Writer需求中操作的是源:意味著是 讀。InputS

事件()事件

net 讀者 win ets 我們 chrom 就會 click事件 分享圖片 事件流:從頁面中接收事件的順序ie中叫事件冒泡流netscape中叫事件捕獲流 事件冒泡 事件冒泡,即事件開始時由最具體的元素(文檔中嵌套層級最深的那個節點)接收,然後逐級向上傳播到較為不具

JAVA中常用IOFileInputStreamFileOutputStream

table string [] 文件中 讀取 描述符 off fis 系統資源 FileInputStream 用於讀取本地文件中的字節數據,繼承自InputStream類 構造方法摘要 FileInputStream(File file) 通

檔案位元組FileInputStreamFileOutputStream

1.完成基本檔案複製 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStrea

JAVA學習--檔案FileInputStreamFileOutputStream操作

* 1.流的分類:  * 按照資料流向的不同:輸入流  輸出流  * 按照處理資料的單位的不同:位元組流  字元流(處理的文字檔案)  * 按照角色的不同:節點流(直接作用於檔案的)  處理流  *   * 2

Java:IO之:探究位元組字元

前言---- 本來不想寫前言了,但是寫完,發現寫得太好了,遇到就好好看一看啊!!!! 注:歡迎轉載,轉載請註明來處 目錄 一. 簡單理解什麼是流? 二.位元組輸入流 三.位元組輸出流 四.流的正確關閉方式 五.字元輸入流 六.字元輸出流 七.位元組流和字元流的