java入門 -- Java I/O (二) 輸入流(文件讀取)

說明:參考代碼部分的時候,請忽略異常處理語句。I/O中異常的有效處理辦法請看【I/O異常處理】章節(jié)

/*

* File類:

* 描述一個文件或是文件夾,通過File的實例對象可讀取文件或是文件夾的的屬性數(shù)據(jù)

* 如果需要操作文件的內(nèi)容,那么就需要使用IO流技術(shù)

*

* IO(Input / Output流技術(shù):

* 作用:在不同的設(shè)備之間傳輸數(shù)據(jù)

* -- 硬盤數(shù)據(jù)讀取到內(nèi)存

* -- 鍵盤數(shù)據(jù)讀取到內(nèi)存中

* -- 將內(nèi)存數(shù)據(jù)寫到硬盤中

*

* 應(yīng)用場景:

* -- 報表導(dǎo)入

* -- 上傳圖片

* -- 數(shù)據(jù)下載

*

* IO流分類:

* - 按照數(shù)據(jù)的流向劃分(以內(nèi)存為參照物):

* --- 輸入流(從其他設(shè)備讀數(shù)據(jù)進入內(nèi)存):

*

* --- 輸出流(將內(nèi)存數(shù)據(jù)寫入或是現(xiàn)實在其他設(shè)備上):

*

* - 按照處理的數(shù)據(jù)單位劃分:

* --- 字節(jié)流:讀取的數(shù)據(jù)都是文件中的二進制,不會做任何處理

*

* --- 字符流:讀取的是二進制數(shù)據(jù),但是會把二進制數(shù)據(jù)轉(zhuǎn)換成能字面量的形式

*

* --| 輸入字節(jié)流InputStream 所有輸入字節(jié)流的基類,是一個抽象類

* -------|FileInputStrem 讀取【文件數(shù)據(jù)】的輸入字節(jié)流

*

* 讀取文件數(shù)據(jù)的步驟:

* 1.定位目標(biāo)文件;

* 2.構(gòu)建數(shù)據(jù)的輸入通道;

* 3.讀取文件數(shù)據(jù);

* read()從輸入流【讀取一個字節(jié)】并返回,如果沒有數(shù)據(jù)可讀,將阻塞;

* 為了提高讀取效率,可以結(jié)合緩沖數(shù)組byte[] 來提升讀取效率,緩沖數(shù)組的大小一般設(shè)置

* 為1024;

* 4。關(guān)閉輸入通道;

* close();

*

* 說明:

* 1.文件資源一旦使用完畢,必須馬上釋放,否則該資源無法被別的程序鎖操作。

* 2.

*/

package com.michael.iodetail;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class Demo01 {

public static void main(String[] args){

readFileData(); //方式一

readFileDate2(); //方式二:

readFileData3(); //方式三

}

public static void readFileData3(){

//1.定位目標(biāo)文件

File file = new File("c:\\a.txt");

//2.建立數(shù)據(jù)輸入通道

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(file);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//3.使用緩沖數(shù)組循環(huán)讀取文件內(nèi)容

int length = 0;

byte[] buf = new byte[1024];

try {

while((length=fileInputStream.read(buf))!=-1){

String content = new String(buf,0,buf.length);

System.out.println(content);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//4.關(guān)閉文件輸入通道

try {

fileInputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//讀取方式二:使用緩沖數(shù)組讀物文件你讓,缺點:無法一次讀取文件全部內(nèi)容

public static void readFileDate2(){

//1.定位目標(biāo)文件

File file = new File("c:\\a.txt");

//2.建立數(shù)據(jù)的輸入通道

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(file);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//3.讀物文件內(nèi)容

byte[] buf = new byte[1024]; //定義緩沖數(shù)組大小

try {

int length = fileInputStream.read(buf);

System.out.println(length);

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} //讀取的數(shù)組已經(jīng)存入字節(jié)數(shù)組buf中,每次只能讀3個字節(jié),返回值是本次讀取的字節(jié)數(shù)

//使用字節(jié)數(shù)組構(gòu)建字符串

String content = new String(buf,0,buf.length);

System.out.println(content);

//4.關(guān)閉文件讀物通道

try {

fileInputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//讀取方式一:使用read循環(huán)讀取文件內(nèi)容,缺點:每次只能讀一個字節(jié),效率較低

public static void readFileData(){

//1.定位目標(biāo)文件

File file = new File("c:\\a.txt");

//2.構(gòu)造數(shù)據(jù)輸入通道

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(file);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//3.讀取文件數(shù)據(jù)

//read()讀取一個字節(jié)的數(shù)據(jù)并返回

int content = 0;

try {

while((content=fileInputStream.read())!=-1){ //循環(huán)讀物文件數(shù)據(jù)

System.out.print((char)content);

}

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

try {

fileInputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,673評論 18 399
  • 一、流的概念和作用。 流是一種有順序的,有起點和終點的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偝苫虺橄?。即?shù)據(jù)在兩設(shè)備之間的傳輸...
    布魯斯不吐絲閱讀 10,315評論 2 95
  • 一、 1、請用Java寫一個冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨云閱讀 1,497評論 0 6
  • 說明:參考代碼部分的時候,請忽略異常處理語句。I/O中異常的有效處理辦法請看【I/O異常處理】章節(jié) package...
    Michael_林閱讀 480評論 0 0
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,011評論 0 11

友情鏈接更多精彩內(nèi)容