Java FileInputStream與FileOutputStream使用詳解
什么是InputStream和OutputStream?
InputStream和OutputStream是抽象類,是所有字節(jié)輸入流和輸出流的父類。這里,我們首先要分清楚兩個(gè)概念:
- InputStream(輸入流):輸入流是用來讀入數(shù)據(jù)的。- - - > > >讀入
- OutputStream(輸出流):輸出流是用來寫出數(shù)據(jù)的。- - - > > >寫出
文件輸入流——FileInputStream
FileInputStream 從文件系統(tǒng)中的某個(gè)文件中獲得輸入字節(jié)。
構(gòu)造方法
//通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,該文件通過文件系統(tǒng)中的 File 對象 file 指定。 public FileInputStream(File file); //通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,該文件通過文件系統(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)流(低級流),從文件中讀入數(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ù)需要來定義
byte[] buffer=new byte[1024];
FileInputStream fis=new FileInputStream("FOSDemo.txt");
//循環(huán)來讀取該文件中的數(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ù)寫入到文件中。
構(gòu)造方法
//創(chuàng)建一個(gè)向指定 File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流。 public FileOutputStream(File file); //創(chuàng)建一個(gè)向指定 File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流。如果第二個(gè)參數(shù)為 true,則將字節(jié)寫入文件末尾處,而不是寫入文件開始處。 public FileOutputStream(File file,boolean append); //創(chuàng)建一個(gè)向具有指定名稱的文件中寫入數(shù)據(jù)的輸出文件流。 public FileOutputStream(String name); //創(chuàng)建一個(gè)向具有指定 name 的文件中寫入數(shù)據(jù)的輸出文件流。如果第二個(gè)參數(shù)為 true,則將字節(jié)寫入文件末尾處,而不是寫入文件開始處。 public FileOutputStream(String name,boolean append);
常用方法
向文件中寫入一個(gè)字節(jié)大小的數(shù)據(jù)
//向文件中寫入一個(gè)字節(jié)大小的數(shù)據(jù) public void write(int b);
向文件中一次性寫入一個(gè)字節(jié)數(shù)組的數(shù)據(jù)
//將 b.length 個(gè)字節(jié)從指定 byte 數(shù)組寫入此文件輸出流中。 public void write(byte[] b); //指定 byte 數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此文件輸出流。 public void write(byte[] b,int off,int len);
向文件中寫出數(shù)據(jù):
import java.io.FileOutputStream;
/**
* FileOutputStream:節(jié)點(diǎn)流(低級流),向文件中寫出數(shù)據(jù)
* @author Administrator
*
*/
public class FOSDemo01 {
public static void main(String[] args){
try {
//向文件中寫入字節(jié)數(shù)組
String font="輸出流是用來寫入數(shù)據(jù)的!";
FileOutputStream fos = new FileOutputStream("FOSDemo.txt");
fos.write(font.getBytes());
//關(guān)閉此文件輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。此文件輸出流不能再用于寫入字節(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ù)通過輸出流寫入到目標(biāo)文件中
* 3.關(guān)閉輸入流和輸出流
*/
try {
long begin=System.currentTimeMillis();
//從輸入流中讀取數(shù)據(jù)
FileInputStream fis=new FileInputStream("FOSDemo.txt");
//向輸出流中寫入數(shù)據(jù)
FileOutputStream fos=new FileOutputStream("FISAndFOSDest.txt");
//先定義一個(gè)字節(jié)緩沖區(qū),減少I/O次數(shù),提高讀寫效率
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問題(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題
我們在使用idea的時(shí)候經(jīng)常會(huì)遇到一些問題,本文介紹了如何解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題,文中有相關(guān)的圖文示例,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
淺談Java包裝類型Long的==操作引發(fā)的低級bug
本文主要介紹了淺談Java包裝類型Long的==操作引發(fā)的低級bug,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Java報(bào)錯(cuò)Non-terminating?decimal?expansion解決分析
這篇文章主要為大家介紹了Java報(bào)錯(cuò)Non-terminating?decimal?expansion解決方案及原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
不寫mybatis的@Param有的報(bào)錯(cuò)有的卻不報(bào)錯(cuò)問題分析
這篇文章主要為大家介紹了不寫mybatis的@Param有的報(bào)錯(cuò)有的卻不報(bào)錯(cuò)問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
利用Mybatis向PostgreSQL中插入并查詢JSON字段
這篇文章主要介紹了利用Mybatis向PostgreSQL中插入并查詢JSON字段,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
Junit單元測試關(guān)于@Transactional注解引起的事務(wù)回滾問題
這篇文章主要介紹了Junit單元測試關(guān)于@Transactional注解引起的事務(wù)回滾問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
mybatis Map查詢結(jié)果下劃線轉(zhuǎn)駝峰的實(shí)例
這篇文章主要介紹了mybatis Map查詢結(jié)果下劃線轉(zhuǎn)駝峰的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
一篇文章帶你了解MySQL數(shù)據(jù)庫基礎(chǔ)
這篇文章主要介紹了MySql數(shù)據(jù)庫基礎(chǔ)知識點(diǎn),總結(jié)整理了mysql數(shù)據(jù)庫基本創(chuàng)建、查看、選擇、刪除以及數(shù)據(jù)類型相關(guān)操作技巧,需要的朋友可以參考下2021-08-08

