文件字節(jié)流FileInputStrea和FileOutputStream
大家好,我是Java進(jìn)階者。
前言
我們知道計(jì)算機(jī)的數(shù)據(jù)基本是存儲在硬盤文件當(dāng)中,操作文件的數(shù)據(jù)是常用的操作例如讀取數(shù)據(jù)和寫入數(shù)據(jù)。接下來小編帶大家一起來學(xué)習(xí)!
一、文件字節(jié)流FileInputStream
1.FileInputStream是InputStream的子類,F(xiàn)ileInputStram是操作文件的字節(jié)輸入流。文件字節(jié)輸入流是以字節(jié)讀取文件中的數(shù)據(jù)。
2.FileInputStream類的構(gòu)造方法有:
(1)public FileInputStream(String name)方法:使用指定的文件名name創(chuàng)建一個(gè)FileInputStream對象。
(2)public FileInputStream(File file)方法:使用File對象創(chuàng)建FileInputStream對象。
3.在工程里面新建一個(gè)目錄text,然后再建test01.txt文本文件,在并在文本文件寫入"helloworld",實(shí)現(xiàn)字節(jié)流對文件數(shù)據(jù)的讀取。
例子的實(shí)現(xiàn):
- package cc;
- import java.io.FileInputStream;
- public class P01 {
- public static void main(String[] args) throws Exception {
- //創(chuàng)建一個(gè)文件字節(jié)輸入流
- FileInputStream f=new FileInputStream("text/test01");
- //定義int類型的變量a保存每次讀取的一個(gè)字節(jié)
- int a=0;
- while(true){
- //變量a保存讀取的一個(gè)字節(jié)
- a=f.read();
- //當(dāng)讀取的字節(jié)為-1,跳出循環(huán)
- if(a==-1){
- break;
- }
- System.out.println(a);
- }
- //關(guān)閉流
- f.close();
- }
- }
運(yùn)行的結(jié)果如下所示:
上面的運(yùn)行的結(jié)果是數(shù)字是因?yàn)橛脖P上的文件是以字節(jié)的形式存在,在test01.txt文件中,字符'h','e','l','l','o','w','o','r','l','d'各占一個(gè)字節(jié),所以這10個(gè)字節(jié)對應(yīng)十進(jìn)制數(shù)。
二、文件字節(jié)流FileOutputStream
1.FileOutputStream是OutputStream的子類,它具有文件的寫入功能。文件字節(jié)輸出流按字節(jié)把數(shù)據(jù)寫到文件中。
2.FileOutputStream類的構(gòu)造方法有:
(1)public FileOutputStream(String name)方法:使用指定的文件名name創(chuàng)建一個(gè)FileOutputStream對象。
(2)public FileOutputStream(File file)方法:使用File對象創(chuàng)建FileOutputStream對象。
(3)public FileOutputStream(String name,boolean append)方法:指定的文件已經(jīng)存在,在文件尾追加還是覆蓋這個(gè)文件。
3.如何將數(shù)據(jù)寫入文件?
例子的實(shí)現(xiàn):
- package cc;
- import java.io.FileOutputStream;
- public class P02 {
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- //創(chuàng)建一個(gè)文件字節(jié)輸出流
- FileOutputStream fo=new FileOutputStream("text/test02");
- String str="Java進(jìn)階交流";
- byte b[]=str.getBytes();
- for(int i=0;i<b.length;i++){
- fo.write(b[i]);
- }
- fo.close();
- }
- }
運(yùn)行的結(jié)果如下圖所示:
在程序text目錄下自動生成一個(gè)新的test02.txt文件。
三、如何把數(shù)據(jù)追加到文件末尾?
1.使用public FileOutputStream(String name,boolean append)方法把a(bǔ)ppend參數(shù)設(shè)置為true。
2.例子的實(shí)現(xiàn)
- package cc;
- import java.io.FileOutputStream;
- public class P02 {
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- //創(chuàng)建一個(gè)文件字節(jié)輸出流
- FileOutputStream fo=new FileOutputStream("text/test02",true);
- String str="公眾號";
- byte b[]=str.getBytes();
- for(int i=0;i<b.length;i++){
- fo.write(b[i]);
- }
- fo.close();
- }
- }
運(yùn)行的結(jié)果如下所示:
從上面的運(yùn)行的結(jié)果中,通過輸出流對象向text目錄下的test02.txt文件中在原來的Java進(jìn)階交流的末尾添加“公眾號”,并不會把原來的數(shù)據(jù)清空掉,是把新的數(shù)據(jù)追加文件的末尾。
四、編寫程序,接收用戶從鍵盤輸入的數(shù)據(jù),按回車后保存到text目錄下的文件test03.txt中。如果用戶輸入符號#,則退出程序。
1.例子的實(shí)現(xiàn):
- package cc;
- import java.io.FileOutputStream;
- import java.io.IOException;
- public class P03 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- byte b[]=new byte[128];
- System.out.println("請輸入數(shù)據(jù),數(shù)據(jù)將保存在test03文件中,輸入#則退出");
- try{
- FileOutputStream fo=new FileOutputStream("text/test03");
- while(true){
- int i=System.in.read(b);
- if(b[0]=='#'){
- break;
- }
- fo.write(b,0,i-1);
- fo.write('\n');
- }
- fo.close();
- }catch(IOException e){
- System.out.println(e.toString());
- }
- }
- }
運(yùn)行的結(jié)果如下圖所示:
從上面的運(yùn)行的結(jié)果我們可以看出,將用戶輸入的數(shù)據(jù)保存到test03.txt是自動生成的不需要去手動創(chuàng)建test03.txt文件。
五、總結(jié)
本文主要介紹了文件字節(jié)流FileInputStrea和FileOutputStream、如何把數(shù)據(jù)追加到文件末尾實(shí)現(xiàn)的例子、通過接收用戶從鍵盤輸入的數(shù)據(jù),按回車后保存到text目錄下的文件test03.txt中。如果用戶輸入符號#,則退出程序。FileInputStrea文件字節(jié)輸入流是以字節(jié)讀取文件中的數(shù)據(jù);介紹了它的構(gòu)造方法,通過例子實(shí)現(xiàn)來理解FileInputStrea用法。FileOutputStream是OutputStream的子類,它具有文件的寫入功能;介紹了它的構(gòu)造方法,通過例子實(shí)現(xiàn)來理解FileOutputStream用法。希望通過本文的學(xué)習(xí),對你有所幫助!