日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java学习笔记-7.Java IO流

發布時間:2025/3/13 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java学习笔记-7.Java IO流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、輸入/輸出流

1.流:不同類型的輸入、輸出源??? 數據流:輸入或輸出的數據

?? Java數據流的所有接口和類都是在java.io包中定義的,因此應在程序開頭加入

?? import java.io.*

2.流的分類:

? (1)從流的流動方向來看,可以將IO流分為輸入流和輸出流

????????? 輸入流:數據信息從某個地方流向程序中

????????? 輸出流:數據信息從程序中發送到某個目的地

? (2)從流的數據處理單位來看,可以將IO流分為字節流和字符流

????????? 字節流:以字節方式處理的二進制數據

????????? 字符流:以字符方式處理的數據流(Java使用Unicode字符集,存放一個字符需要兩個字節)

? (3)從流的功能來看,可以將IO流分為節點流和過濾流

????????? 節點流:程序中用于直接操作目標設備所對應的IO流

????????? 過濾流(也稱為包裝流):通過一個間接IO流去調用相應的節點流,以更加靈活方便地讀/寫各種類型的數據

二、字節流和字符流

1.java.io包中有兩大繼承體系:

?? 一類是以字節為單位處理數據的Stream,它們的命名方式都是***Stream

?? 另一類是以字符為單位處理數據的Reader和Writer,它們的命名方式都是*Reader或*Writer

三、文件及文件流

1.Java中IO流操作的基本流程

?? 使用File類定位一個文件->通過字節流或字符流的子類進行流對象的實例化

?? ->進行讀寫操作->關閉字節或字符流

2.Java字節流和字符流的區別:在字符流進行操作時會使用到緩沖區,字節流操作不會使用緩沖區

import java.io.*; class FileStream {public static void main(String[] args) {try {File inFile = new File("file1.txt");File outFile = new File("file2.txt");FileReader fis = new FileReader(inFile);FileWriter fos = new FileWriter(outFile);int c;while ((c = fis.read()) != -1) {fos.write(c);}fis.close();//fos.close();fos.flush(); //若無此語句,file2.txt文件為空} catch(FileNotFoundException e) {System.out.println("FileStream: " + e);} catch (IOException e) {System.out.println("FileStream: " + e);}} }

?? flush();語句強制緩沖區輸出,若使用FileInputStream字節流操作則無該技術

?? 字符流在緩沖區未滿前先存放在緩沖區中,除非使用flush() 或 close()強制輸出

3.在Windows系統下文件名稱分隔符使用"/"或轉義字符"\\"

?? 而Linux中使用"/"

?? 為了保持Java系統很好的可移植性,在操作文件時最好使用File.separator

?? 例:File f = new FIle("D:" + File.seperator + "test.txt");

?? 一般使用"./"表示當前目錄,"../"表示當前目錄的父目錄

4.隨機文件讀寫:RandomAccessFile類

?? 訪問模式值及含義

mode值含義
"r"以只讀方式打開
"rw"打開以便讀取和寫入,如果該文件不存在,則嘗試創建該文件
"rws"同步讀/寫,任何寫操作的內容都被直接寫入物理文件,包括文件內容和文件屬性
"rwd"同步讀/寫,任何寫操作的內容都被直接寫入物理文件,不包括文件屬性

?? "rw"模式時,僅當RandomAccessFile類對象執行close方法時才將更新內容寫入文件

?? 而"rws"和"rwd"模式是同步讀/寫,因此可以保證數據實時更新

?? RandomAccessFile類一般方法

方法名稱含義
public long getFilePointer() throws IOException返回當前的文件指針位置
public void seek(long pos) throws IOException移動文件指針到pos位置
public int skipBytes(int n) throws IOException文件指針向后移動n個字節,n為負數時指針不移動
public int read(byte[] b) throws IOException將最多b.length個字節讀入數組b
public void write(byte[] b) throws IOException將b.length個字節從指定數組b寫入到文件
public final byte readByte() throws IOException讀取一個字節
public final void writeByte(int v) throws IOException將(byte) v寫入文件
public final String readLine() throws IOException讀取一行
public void close() throws IOException關閉流
?? 注意:類中有readLine方法,但不存在writeLine方法

四、過濾流

1.緩沖流

?? 為提高IO流的讀取效率,Java提供了具有緩沖功能的流類,使用這些流類時,會創建一個內部的緩沖區。

?? 在讀字節或字符時,先從數據源讀取到的數據填充到緩沖區,然后再返回

?? 在寫字節或字符時,先把寫入的數據填充到內部緩沖區,然后一次性寫入到目標數據源中,從而提高了I/O流的讀取效率

?? 緩沖流包括:

?? 字節流:BufferedInputStream??? BufferedOutputStream

?? 字符流:BufferedReader??? BufferedWriter

?? 注意:緩沖區的大小默認為32字節大小,一般緩沖區的大小為內存頁或磁盤塊等的整數倍

??????????? 只有緩沖區滿時,才會將數據真正送到輸出流,但可以使用flush()方法人為地將尚未填滿的緩沖區中的數據送出

2.數據流:DataInputStream 和 DataOutputStream

?? 作用:允許程序按與機器無關的風格讀取Java原始數據,即不關心一個數值應當是多少字節

例:

import java.io.IOException; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; public class DataStreamDemo {public static void main(String[] args) throws IOException {//write the dataFileOutputStream fos = new FileOutputStream("data.txt");DataOutputStream dos = new DataOutputStream(fos);dos.writeBoolean(true);dos.writeByte((byte)123);dos.writeChar('J');dos.writeDouble(3.1415926);dos.writeFloat(2.7182f);dos.writeInt(1234567);dos.writeLong(998877665544332211L);dos.writeShort((short)11223);dos.close();//read the dataFileInputStream fis = new FileInputStream("data.txt");DataInputStream dis = new DataInputStream(fis);System.out.println(dis.readBoolean());System.out.println(dis.readByte());System.out.println(dis.readChar());System.out.println(dis.readDouble());System.out.println(dis.readFloat());System.out.println(dis.readInt());System.out.println(dis.readLong());System.out.println(dis.readShort());dis.close();} }

3.打印流:使輸出信息更方便的類,主要包含PrintStream和PrintWriter

?? 包含輸出方法print? println? printf

五、標準流

1.語言包java.lang中的System類管理標準IO流和錯誤流。System是final類,System類中定義了以下三個靜態變量成員變量

?? public static final InputStream in:標準輸入,一般是鍵盤

?? public static final PrintStream out:標準輸出,一般是顯示器

?? public static final PrintStream err:錯誤信息輸出,通常是顯示器

例:

public class SystemDemo {public static void main(String[] args) {try {byte bArray[] = new byte[20];String str;System.out.print("Input:");System.in.read(bArray);str = new String(bArray, 0);System.out.print("Output:");System.out.println(str.trim());}catch (IOException ioe) {System.err.println(ioe.toStirng());}} }

六、對象流

1.對象的序列化:把一個對象變為二進制的數據流的方法,可以實現對象的傳輸和存儲

?? 只有實現 java.io.Serializable 接口的類才能被序列化

?? java.io.Serializable接口中沒有任何方法,一個類聲明實現java.io.Serializable只是表明該類加入對象序列化協議

2.對象流

?? 類ObjectOutputStream和ObjectInputStream繼承了接口ObjectOutput和ObjectInput

?? 將數據流功能擴展到可以讀/寫對象,方法:readObject(); 和 writeObject();

?? 注:通常,只要某個類實現了Serializable接口,那么該類的類對象中的所有屬性都會被串行化

???????? 對于一些敏感信息,只需在不串行化的屬性上用 transient 修飾即可

七、Scanner類

1.Scanner類處于java.util包中,使用時需要import引入

?? Scanner類常用方法

方法名稱含義
public Scanner(InputStream source)從指定字節輸入流中接收內容
public Scanner(File source) throws FileNotFoundException從文件中接收內容
public boolean hasNextInt()判斷輸入的是否是整數
public boolean hasNextDouble()判斷輸入的是否是小數
public String next()接收數據
public int nextInt()接收整數
public float nextDOuble()接收小數
public Scanner useDelimiter(String pattern)設置分隔符

例:

Scanner reader = new Scanner(System.in); while(reader.hasNextDouble()) {double x = reader.nextDouble(); }

八、流的選擇

1.步驟:

? (1)選擇合適的節點流:按照鏈接的數據源種類進行選擇

???????????????????????????????????? 讀寫文件應該使用文件流,讀寫字節數組應該使用字節數組流

? (2)選擇合適方向的流:讀:輸入流/寫:輸出流

? (3)選擇字節流或字符流:所有的文件在傳輸時都是以字節的方式進行的(包括圖片等)

??????????????????????????????????????? 而字符時只有在內存中才會形成的,因此字節流使用較廣泛

? (4)包裝流:可以選擇多個,例如:

????????????????????? 如果需要讀/寫格式化數據,選擇DataInputStream/DataOutputStream

????????????????????? 如果需要提高讀/寫的效率,選擇BufferedReader/BufferedWriter

轉載于:https://www.cnblogs.com/trj14/p/4300462.html

總結

以上是生活随笔為你收集整理的Java学习笔记-7.Java IO流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。