Java FileInputStream與FileOutputStream使用詳解
什么是InputStream和OutputStream?
InputStream和OutputStream是抽象類(lèi),是所有字節(jié)輸入流和輸出流的父類(lèi)。這里,我們首先要分清楚兩個(gè)概念:
- InputStream(輸入流):輸入流是用來(lái)讀入數(shù)據(jù)的。- - - > > >讀入
- OutputStream(輸出流):輸出流是用來(lái)寫(xiě)出數(shù)據(jù)的。- - - > > >寫(xiě)出
文件輸入流——FileInputStream
FileInputStream 從文件系統(tǒng)中的某個(gè)文件中獲得輸入字節(jié)。
構(gòu)造方法
//通過(guò)打開(kāi)一個(gè)到實(shí)際文件的連接來(lái)創(chuàng)建一個(gè) FileInputStream,該文件通過(guò)文件系統(tǒng)中的 File 對(duì)象 file 指定。 public FileInputStream(File file); //通過(guò)打開(kāi)一個(gè)到實(shí)際文件的連接來(lái)創(chuàng)建一個(gè) FileInputStream,該文件通過(guò)文件系統(tǒng)中的路徑名 name 指定。 public FileInputStream(String name);
常用的方法
從輸入流中讀取一個(gè)字節(jié)大小的數(shù)據(jù)
//從此輸入流中讀取一個(gè)數(shù)據(jù)字節(jié)。 public int read();
從輸入流一次讀取一個(gè)字節(jié)數(shù)組
//從此輸入流中將最多 b.length 個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中。 public int read(byte[] b); //從此輸入流中將最多 len 個(gè)字節(jié)的數(shù)據(jù)讀入一個(gè) byte 數(shù)組中。off:目標(biāo)數(shù)組 b 中的起始偏移量。 public int read(byte[] b,int off,int len);
從文件中讀取數(shù)據(jù):
import java.io.FileInputStream;
/**
* FileInputStream:節(jié)點(diǎn)流(低級(jí)流),從文件中讀入數(shù)據(jù)
* @author Administrator
*
*/
public class FISDemo01 {
public static void main(String[] args){
String content=null;
try {
int size=0;
//定義一個(gè)字節(jié)緩沖區(qū),該緩沖區(qū)的大小根據(jù)需要來(lái)定義
byte[] buffer=new byte[1024];
FileInputStream fis=new FileInputStream("FOSDemo.txt");
//循環(huán)來(lái)讀取該文件中的數(shù)據(jù)
while((size=fis.read(buffer))!=-1){
content=new String(buffer, 0, size);
System.out.println(content);
}
//關(guān)閉此文件輸入流并釋放與此流有關(guān)的所有系統(tǒng)資源。
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
文件輸出流——FileOutputStream
文件輸出流是用于將數(shù)據(jù)寫(xiě)入到文件中。
構(gòu)造方法
//創(chuàng)建一個(gè)向指定 File 對(duì)象表示的文件中寫(xiě)入數(shù)據(jù)的文件輸出流。 public FileOutputStream(File file); //創(chuàng)建一個(gè)向指定 File 對(duì)象表示的文件中寫(xiě)入數(shù)據(jù)的文件輸出流。如果第二個(gè)參數(shù)為 true,則將字節(jié)寫(xiě)入文件末尾處,而不是寫(xiě)入文件開(kāi)始處。 public FileOutputStream(File file,boolean append); //創(chuàng)建一個(gè)向具有指定名稱(chēng)的文件中寫(xiě)入數(shù)據(jù)的輸出文件流。 public FileOutputStream(String name); //創(chuàng)建一個(gè)向具有指定 name 的文件中寫(xiě)入數(shù)據(jù)的輸出文件流。如果第二個(gè)參數(shù)為 true,則將字節(jié)寫(xiě)入文件末尾處,而不是寫(xiě)入文件開(kāi)始處。 public FileOutputStream(String name,boolean append);
常用方法
向文件中寫(xiě)入一個(gè)字節(jié)大小的數(shù)據(jù)
//向文件中寫(xiě)入一個(gè)字節(jié)大小的數(shù)據(jù) public void write(int b);
向文件中一次性寫(xiě)入一個(gè)字節(jié)數(shù)組的數(shù)據(jù)
//將 b.length 個(gè)字節(jié)從指定 byte 數(shù)組寫(xiě)入此文件輸出流中。 public void write(byte[] b); //指定 byte 數(shù)組中從偏移量 off 開(kāi)始的 len 個(gè)字節(jié)寫(xiě)入此文件輸出流。 public void write(byte[] b,int off,int len);
向文件中寫(xiě)出數(shù)據(jù):
import java.io.FileOutputStream;
/**
* FileOutputStream:節(jié)點(diǎn)流(低級(jí)流),向文件中寫(xiě)出數(shù)據(jù)
* @author Administrator
*
*/
public class FOSDemo01 {
public static void main(String[] args){
try {
//向文件中寫(xiě)入字節(jié)數(shù)組
String font="輸出流是用來(lái)寫(xiě)入數(shù)據(jù)的!";
FileOutputStream fos = new FileOutputStream("FOSDemo.txt");
fos.write(font.getBytes());
//關(guān)閉此文件輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。此文件輸出流不能再用于寫(xiě)入字節(jié)。 如果此流有一個(gè)與之關(guān)聯(lián)的通道,則關(guān)閉該通道。
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用FileInputStream和FileOutputStream實(shí)現(xiàn)文件的復(fù)制
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* 使用文件輸入流和文件輸出流實(shí)現(xiàn)文件的復(fù)制
* @author Administrator
*
*/
public class SummaryFISAndFOS {
public static void main(String[] args){
/**
* 1.先將文件中的內(nèi)容讀入到輸入流中
* 2.將輸入流中的數(shù)據(jù)通過(guò)輸出流寫(xiě)入到目標(biāo)文件中
* 3.關(guān)閉輸入流和輸出流
*/
try {
long begin=System.currentTimeMillis();
//從輸入流中讀取數(shù)據(jù)
FileInputStream fis=new FileInputStream("FOSDemo.txt");
//向輸出流中寫(xiě)入數(shù)據(jù)
FileOutputStream fos=new FileOutputStream("FISAndFOSDest.txt");
//先定義一個(gè)字節(jié)緩沖區(qū),減少I(mǎi)/O次數(shù),提高讀寫(xiě)效率
byte[] buffer=new byte[10240];
int size=0;
while((size=fis.read(buffer))!=-1){
fos.write(buffer, 0, size);
}
fis.close();
fos.close();
long end=System.currentTimeMillis();
System.out.println("使用文件輸入流和文件輸出流實(shí)現(xiàn)文件的復(fù)制完畢!耗時(shí):"+(end-begin)+"毫秒");
} catch (Exception e) {
e.printStackTrace();
}
//解決JNI問(wèn)題(Java Native Interface)
System.exit(0);
}
}
運(yùn)行結(jié)果:
使用文件輸入流和文件輸出流實(shí)現(xiàn)文件的復(fù)制完畢!耗時(shí):17毫秒
以上基本上就是我們經(jīng)常用到的方法的介紹,記得最后一定要close()哦!
到此這篇關(guān)于Java FileInputStream與FileOutputStream使用詳解的文章就介紹到這了,更多相關(guān)Java FileInputStream與FileOutputStream內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot使用spring.factories加載默認(rèn)配置的實(shí)現(xiàn)代碼
在日常開(kāi)發(fā)過(guò)程中,發(fā)布一些產(chǎn)品或者框架時(shí),會(huì)遇到某些功能需要一些配置才能正常運(yùn)行,這時(shí)我們需要的提供默認(rèn)配置項(xiàng),同時(shí)用戶也能覆蓋進(jìn)行個(gè)性化2024-06-06
Java中ThreadLocal避免內(nèi)存泄漏的方法詳解
ThreadLocal是Java中的一個(gè)線程本地存儲(chǔ)機(jī)制,它允許每個(gè)線程擁有一個(gè)獨(dú)立的本地存儲(chǔ)空間,用于存儲(chǔ)該線程的變量,本文主要介紹了ThreadLocal如何避免內(nèi)存泄漏,需要的朋友可以參考下2023-05-05
java實(shí)現(xiàn)的順時(shí)針/逆時(shí)針打印矩陣操作示例
這篇文章主要介紹了java實(shí)現(xiàn)的順時(shí)針/逆時(shí)針打印矩陣操作,涉及java基于數(shù)組的矩陣存儲(chǔ)、遍歷、打印輸出等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
IDEA實(shí)現(xiàn)添加 前進(jìn)后退 到工具欄的操作
這篇文章主要介紹了IDEA 前進(jìn) 后退 添加到工具欄的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java 數(shù)據(jù)結(jié)構(gòu)七大排序使用分析
這篇文章主要介紹了Java常用的排序算法及代碼實(shí)現(xiàn),在Java開(kāi)發(fā)中,對(duì)排序的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時(shí)候能夠有扎實(shí)的基礎(chǔ)能力。那Java有哪些排序算法呢?本文小編就來(lái)詳細(xì)說(shuō)說(shuō)Java常見(jiàn)的排序算法,需要的朋友可以參考一下2022-04-04

