33 檔案IO流(二)
阿新 • • 發佈:2020-12-10
33 檔案IO流(二)
1 IO流分類
分類依據:
流向程式裡面還是流到程式外面
分類結果:(以最基礎的舉例)
A 、輸入流
位元組輸入流 File(來源)InPutStream
a. 作用:
從指定地址的檔案讀取資料到程式中
b. 具體操作方法
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class TestRead { public static void main(String[] args) { File file=new File("C:\\Users\\SSS翱翔萬里\\Desktop\\測試.txt"); //首先你得判斷它是否是檔案 if(file.isFile()){ //如果是,就讀取它裡面的內容 FileInputStream fileInputStream=null; byte[] bytes=null; try { fileInputStream = new FileInputStream(file); int length=0; bytes= new byte[1024*8]; while((length=fileInputStream.read(bytes))!=-1){ System.out.print(new String(bytes,0,length)); //bytes陣列存放的資料,最後一次可能不為滿, //所以長度為每次的有效長度是最好的 } } catch (Exception e) { e.printStackTrace(); } finally { //finally中的語句是無論有無異常都會執行完的 //注意:雖然不關閉流,系統會自動幫你關閉且一般不會報錯,但還是建議按標準流程來 try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }else{ System.out.println("給的地址不是一個檔案"); } } }
c.執行截圖
B、輸出流
位元組輸入流 File(來源)OutPutStream
a.作用:
把程式中的資料寫到指定的檔案裡頭
b.具體操作:
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class TestWrite { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("請輸入你要寫入的字串"); String str=scanner.next(); File file=new File("C:\\Users\\SSS翱翔萬里\\Desktop\\測試.txt"); //首先你得判斷它是否是檔案 if(file.isFile()){ //如果是,就開始下面的往裡面去寫的操作 FileOutputStream fileOutputStream=null; byte[] bytes=null; try { //如果不寫true,則預設是覆蓋原來的內容 fileOutputStream = new FileOutputStream(file,true); //因為是位元組流,所以得把字串轉換成bytes[]陣列 fileOutputStream.write(str.getBytes()); } catch (Exception e) { e.printStackTrace(); } finally { //finally中的語句是無論有無異常都會執行完的 //注意:雖然不關閉流,系統會自動幫你關閉且一般不會報錯,但還是建議按標準流程來 try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }else{ System.out.println("給的地址不是一個檔案"); } } }
c.執行截圖:
(1)
(2)
(3)
2. 總結
-
輸入流和輸出流都是需要關閉的.(為防止忘記寫,在建立例項化完流物件操作時,就在下面一行寫該物件的關閉操作)
-
為了防止輸入流和輸出流的源頭不存在,會丟擲FileNotFoundException異常,可以人為的去加個if條件判斷
-
對檔案進行輸出流操作時,預設為覆蓋操作,若想追加,直接令呼叫構造方法,傳遞的引數除了檔案物件(含有檔案的地址資訊),後面再加上true;
fileOutputStream = new FileOutputStream(file,true);