在Java編程中,IO流(輸入輸出流)是處理數據輸入輸出的重要工具。無論是讀取文件、網絡數據傳輸,還是與用戶交互,IO流都扮演著至關重要的角色。Java提供了豐富的IO流類庫,涵蓋了字節流、字符流、緩沖流、轉換流等多種類型。本文將詳細介紹Java SE中常用的IO流及其方法,幫助開發者更好地理解和應用這些工具。
IO流是Java中用于處理輸入輸出的抽象概念。根據數據的傳輸方向,IO流可以分為輸入流(InputStream/Reader)和輸出流(OutputStream/Writer)。根據數據的處理方式,IO流又可以分為字節流和字符流。
InputStream
是所有字節輸入流的基類,提供了讀取字節數據的基本方法。
int read()
:讀取一個字節的數據,返回讀取的字節值(0-255),如果到達流的末尾則返回-1。int read(byte[] b)
:將數據讀入字節數組b
,返回實際讀取的字節數。int read(byte[] b, int off, int len)
:將數據讀入字節數組b
的指定位置,從off
開始,最多讀取len
個字節。long skip(long n)
:跳過n
個字節的數據,返回實際跳過的字節數。int available()
:返回當前可讀取的字節數。void close()
:關閉輸入流,釋放相關資源。InputStream inputStream = new FileInputStream("example.txt");
int data;
while ((data = inputStream.read()) != -1) {
System.out.print((char) data);
}
inputStream.close();
OutputStream
是所有字節輸出流的基類,提供了寫入字節數據的基本方法。
void write(int b)
:寫入一個字節的數據。void write(byte[] b)
:寫入字節數組b
中的所有數據。void write(byte[] b, int off, int len)
:寫入字節數組b
中從off
開始的len
個字節。void flush()
:刷新輸出流,強制將緩沖區中的數據寫入目標。void close()
:關閉輸出流,釋放相關資源。OutputStream outputStream = new FileOutputStream("example.txt");
byte[] data = "Hello, World!".getBytes();
outputStream.write(data);
outputStream.close();
Reader
是所有字符輸入流的基類,提供了讀取字符數據的基本方法。
int read()
:讀取一個字符的數據,返回讀取的字符值(0-65535),如果到達流的末尾則返回-1。int read(char[] cbuf)
:將數據讀入字符數組cbuf
,返回實際讀取的字符數。int read(char[] cbuf, int off, int len)
:將數據讀入字符數組cbuf
的指定位置,從off
開始,最多讀取len
個字符。long skip(long n)
:跳過n
個字符的數據,返回實際跳過的字符數。boolean ready()
:判斷流是否準備好被讀取。void close()
:關閉輸入流,釋放相關資源。Reader reader = new FileReader("example.txt");
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
reader.close();
Writer
是所有字符輸出流的基類,提供了寫入字符數據的基本方法。
void write(int c)
:寫入一個字符的數據。void write(char[] cbuf)
:寫入字符數組cbuf
中的所有數據。void write(char[] cbuf, int off, int len)
:寫入字符數組cbuf
中從off
開始的len
個字符。void write(String str)
:寫入字符串str
。void write(String str, int off, int len)
:寫入字符串str
中從off
開始的len
個字符。void flush()
:刷新輸出流,強制將緩沖區中的數據寫入目標。void close()
:關閉輸出流,釋放相關資源。Writer writer = new FileWriter("example.txt");
writer.write("Hello, World!");
writer.close();
File
類用于表示文件和目錄路徑名的抽象表示,提供了文件和目錄的操作方法。
boolean exists()
:判斷文件或目錄是否存在。boolean isFile()
:判斷是否是一個文件。boolean isDirectory()
:判斷是否是一個目錄。String getName()
:獲取文件或目錄的名稱。String getPath()
:獲取文件或目錄的路徑。long length()
:獲取文件的長度(字節數)。boolean createNewFile()
:創建一個新的空文件。boolean delete()
:刪除文件或目錄。boolean mkdir()
:創建一個目錄。boolean mkdirs()
:創建一個目錄,包括所有必需的父目錄。String[] list()
:獲取目錄中的文件和子目錄的名稱數組。File[] listFiles()
:獲取目錄中的文件和子目錄的File
對象數組。File file = new File("example.txt");
if (file.exists()) {
System.out.println("File exists: " + file.getName());
} else {
System.out.println("File does not exist.");
}
RandomAccessFile
類允許隨機訪問文件內容,既可以讀取也可以寫入。
long getFilePointer()
:獲取當前文件指針的位置。void seek(long pos)
:設置文件指針的位置。int read()
:讀取一個字節的數據。int read(byte[] b)
:將數據讀入字節數組b
。int read(byte[] b, int off, int len)
:將數據讀入字節數組b
的指定位置。void write(int b)
:寫入一個字節的數據。void write(byte[] b)
:寫入字節數組b
中的所有數據。void write(byte[] b, int off, int len)
:寫入字節數組b
中從off
開始的len
個字節。void close()
:關閉文件,釋放相關資源。RandomAccessFile raf = new RandomAccessFile("example.txt", "rw");
raf.seek(raf.length());
raf.write("Hello, World!".getBytes());
raf.close();
BufferedInputStream
為InputStream
提供了緩沖功能,可以提高讀取效率。
int read()
:讀取一個字節的數據。int read(byte[] b)
:將數據讀入字節數組b
。int read(byte[] b, int off, int len)
:將數據讀入字節數組b
的指定位置。long skip(long n)
:跳過n
個字節的數據。int available()
:返回當前可讀取的字節數。void close()
:關閉輸入流,釋放相關資源。BufferedInputStream bis = new BufferedInputStream(new FileInputStream("example.txt"));
int data;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
bis.close();
BufferedOutputStream
為OutputStream
提供了緩沖功能,可以提高寫入效率。
void write(int b)
:寫入一個字節的數據。void write(byte[] b)
:寫入字節數組b
中的所有數據。void write(byte[] b, int off, int len)
:寫入字節數組b
中從off
開始的len
個字節。void flush()
:刷新輸出流,強制將緩沖區中的數據寫入目標。void close()
:關閉輸出流,釋放相關資源。BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("example.txt"));
byte[] data = "Hello, World!".getBytes();
bos.write(data);
bos.close();
BufferedReader
為Reader
提供了緩沖功能,可以提高讀取效率。
int read()
:讀取一個字符的數據。int read(char[] cbuf)
:將數據讀入字符數組cbuf
。int read(char[] cbuf, int off, int len)
:將數據讀入字符數組cbuf
的指定位置。String readLine()
:讀取一行文本。long skip(long n)
:跳過n
個字符的數據。boolean ready()
:判斷流是否準備好被讀取。void close()
:關閉輸入流,釋放相關資源。BufferedReader br = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
BufferedWriter
為Writer
提供了緩沖功能,可以提高寫入效率。
void write(int c)
:寫入一個字符的數據。void write(char[] cbuf)
:寫入字符數組cbuf
中的所有數據。void write(char[] cbuf, int off, int len)
:寫入字符數組cbuf
中從off
開始的len
個字符。void write(String str)
:寫入字符串str
。void write(String str, int off, int len)
:寫入字符串str
中從off
開始的len
個字符。void newLine()
:寫入一個行分隔符。void flush()
:刷新輸出流,強制將緩沖區中的數據寫入目標。void close()
:關閉輸出流,釋放相關資源。BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"));
bw.write("Hello, World!");
bw.newLine();
bw.write("This is a new line.");
bw.close();
InputStreamReader
是字節流到字符流的橋梁,可以將字節流轉換為字符流。
int read()
:讀取一個字符的數據。int read(char[] cbuf)
:將數據讀入字符數組cbuf
。int read(char[] cbuf, int off, int len)
:將數據讀入字符數組cbuf
的指定位置。boolean ready()
:判斷流是否準備好被讀取。void close()
:關閉輸入流,釋放相關資源。InputStreamReader isr = new InputStreamReader(new FileInputStream("example.txt"));
int data;
while ((data = isr.read()) != -1) {
System.out.print((char) data);
}
isr.close();
OutputStreamWriter
是字符流到字節流的橋梁,可以將字符流轉換為字節流。
void write(int c)
:寫入一個字符的數據。void write(char[] cbuf)
:寫入字符數組cbuf
中的所有數據。void write(char[] cbuf, int off, int len)
:寫入字符數組cbuf
中從off
開始的len
個字符。void write(String str)
:寫入字符串str
。void write(String str, int off, int len)
:寫入字符串str
中從off
開始的len
個字符。void flush()
:刷新輸出流,強制將緩沖區中的數據寫入目標。void close()
:關閉輸出流,釋放相關資源。OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("example.txt"));
osw.write("Hello, World!");
osw.close();
DataInputStream
允許應用程序以與機器無關的方式從底層輸入流中讀取基本Java數據類型。
int read(byte[] b)
:將數據讀入字節數組b
。int read(byte[] b, int off, int len)
:將數據讀入字節數組b
的指定位置。boolean readBoolean()
:讀取一個boolean
值。byte readByte()
:讀取一個byte
值。char readChar()
:讀取一個char
值。double readDouble()
:讀取一個double
值。float readFloat()
:讀取一個float
值。int readInt()
:讀取一個int
值。long readLong()
:讀取一個long
值。short readShort()
:讀取一個short
值。String readUTF()
:讀取一個UTF-8編碼的字符串。void close()
:關閉輸入流,釋放相關資源。DataInputStream dis = new DataInputStream(new FileInputStream("example.dat"));
int intValue = dis.readInt();
double doubleValue = dis.readDouble();
String stringValue = dis.readUTF();
dis.close();
DataOutputStream
允許應用程序以與機器無關的方式向底層輸出流中寫入基本Java數據類型。
void write(byte[] b)
:寫入字節數組b
中的所有數據。void write(byte[] b, int off, int len)
:寫入字節數組b
中從off
開始的len
個字節。void writeBoolean(boolean v)
:寫入一個boolean
值。void writeByte(int v)
:寫入一個byte
值。void writeChar(int v)
:寫入一個char
值。void writeDouble(double v)
:寫入一個double
值。void writeFloat(float v)
:寫入一個float
值。void writeInt(int v)
:寫入一個int
值。void writeLong(long v)
:寫入一個long
值。void writeShort(int v)
:寫入一個short
值。void writeUTF(String str)
:寫入一個UTF-8編碼的字符串。void flush()
:刷新輸出流,強制將緩沖區中的數據寫入目標。void close()
:關閉輸出流,釋放相關資源。DataOutputStream dos = new DataOutputStream(new FileOutputStream("example.dat"));
dos.writeInt(123);
dos.writeDouble(123.456);
dos.writeUTF("Hello, World!");
dos.close();
ObjectInputStream
用于從輸入流中讀取對象。
Object readObject()
:讀取一個對象。int read()
:讀取一個字節的數據。int read(byte[] b)
:將數據讀入字節數組b
。int read(byte[] b, int off, int len)
:將數據讀入字節數組b
的指定位置。void close()
:關閉輸入流,釋放相關資源。ObjectInputStream ois = new ObjectInputStream(new FileInputStream("example.dat"));
Object obj = ois.readObject();
ois.close();
ObjectOutputStream
用于將對象寫入輸出流。
void writeObject(Object obj)
:寫入一個對象。void write(int b)
:寫入一個字節的數據。void write(byte[] b)
:寫入字節數組b
中的所有數據。void write(byte[] b, int off, int len)
:寫入字節數組b
中從off
開始的len
個字節。void flush()
:刷新輸出流,強制將緩沖區中的數據寫入目標。void close()
:關閉輸出流,釋放相關資源。ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("example.dat"));
oos.writeObject(new MyClass());
oos.close();
PrintStream
為其他輸出流添加了功能,使它們能夠方便地打印各種數據值表示形式。
void print(boolean b)
:打印一個boolean
值。void print(char c)
:打印一個char
值。void print(int i)
:打印一個int
值。void print(long l)
:打印一個long
值。void print(float f)
:打印一個float
值。void print(double d)
:打印一個double
值。void print(char[] s)
:打印一個字符數組。void print(String s)
:打印一個字符串。void print(Object obj)
:打印一個對象。void println()
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。