在Java程序處理文件和網絡通信時,輸入輸出流是一個非常關鍵且基礎的概念。它是Java程序與外界交互的橋樑,它可以讀寫各種類型的數據,如文本、圖像、音頻和視頻等。本文將全面介紹Java輸入輸出流相關知識。
一、基礎認識
在Java中,輸入輸出流是通過java.io包提供的。輸入流從任何來源讀取數據,例如從文件、網絡、鍵盤等獲取數據,而輸出流將數據寫迴文件、網絡或者控制台等。Java中的輸入輸出流從字節流開始,提供了InputStream和OutputStream抽象類,這兩個類提供了讀寫字節流的相關操作。
InputStream和OutputStream類是Java輸入輸出流抽象類的基礎,它們分別提供了讀和寫字節的方法,如:read()和write()。在Java中還提供了Reader和Writer類,用於讀寫字符流。這些類在讀寫文件和網絡通信時都非常有效。
二、使用文件輸入輸出流
使用文件輸入輸出流時,需要導入java.io.File類,同時使用FileInputStream和FileOutputStream類開啟文件輸入輸出流。下面是Java代碼實現:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
File file = new File("InputFile.txt");
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
try {
//使用文件輸入流讀取文件
inputStream = new FileInputStream(file);
byte[] bytesArray = new byte[(int) file.length()];
inputStream.read(bytesArray);
//使用文件輸出流寫入文件
outputStream = new FileOutputStream("OutputFile.txt");
outputStream.write(bytesArray);
System.out.println("Operation done successfully");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
該代碼使用了FileInputStream讀取文件內容,使用FileOutputStream將其寫回到另一個文件中。在讀取文件時,先讀取文件的長度,然後在相應大小的字節數組中讀取內容。在寫入文件時,將讀取的字節數組作為write()方法的參數傳遞,從而將內容寫入文件。其中的try-catch快和finally快用於關閉兩個流。
三、使用字節數組輸入輸出流
字節數組輸入輸出流是一種特殊的流,它用於從數據源(如字節數組)中讀取數據或者向目標(如字節數組)中寫入數據。下面是Java代碼實現:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class ByteArrayDemo {
public static void main(String[] args) {
byte[] bytes = { 10, 20, 30, 40, 50 };
ByteArrayInputStream byteArrayInputStream = null;
ByteArrayOutputStream byteArrayOutputStream = null;
try {
//使用ByteArrayInputStream讀取字節數據
byteArrayInputStream = new ByteArrayInputStream(bytes);
//使用ByteArrayOutputStream輸出字節數據
byteArrayOutputStream = new ByteArrayOutputStream();
int data;
while ((data = byteArrayInputStream.read()) != -1) {
byteArrayOutputStream.write(Character.toUpperCase(data));
}
System.out.println(Arrays.toString(byteArrayOutputStream.toByteArray()));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
byteArrayInputStream.close();
byteArrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
該代碼使用ByteArrayInputStream讀取字節數組,使用ByteArrayOutputStream將其轉為大寫字母,再將其轉為字節數組並打印輸出。這裡使用了字符函數Character.toUpperCase()將小寫字母轉換為大寫字母,然後使用write()方法寫入ByteArrayOutputStream流中。
四、使用字符輸入輸出流
Java字符輸入輸出流分別由Reader和Writer抽象類構成,用於讀取或寫入字符流。下面是Java代碼實現:
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class FileWriterDemo {
public static void main(String[] args) {
String str = "Java I/O stream is really powerful";
char[] chars = new char[str.length()];
try {
//使用FileWriter將字符寫入文件
Writer writer = new FileWriter("output.txt");
writer.write(str);
writer.close();
//使用字符讀取流讀取文件內容
Reader reader = new FileReader("output.txt");
reader.read(chars);
reader.close();
System.out.println(chars);
} catch (IOException e) {
e.printStackTrace();
}
}
}
該代碼使用FileWriter將字符流寫入文件中並關閉FileWriter實例,然後使用FileReader讀取寫入的文件內容並存儲在字符數組chars中,並且打印輸出內容。這裡需要注意,如果使用FileWriter時沒有指定第二個參數:true,那麼將覆蓋原先的內容。
五、使用數據輸入輸出流
數據輸入輸出流是一種輸入輸出流,用於讀寫Java基本類型數據,如int、double、long等,以及字符串、字符數組、字節數組等數據類型。下面是Java代碼實現:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class DataInputStreamDemo {
public static void main(String[] args) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);
try {
//使用數據輸出流寫入基本數據類型
dataOutputStream.writeDouble(Math.random());
dataOutputStream.writeBoolean(true);
dataOutputStream.writeByte(100);
dataOutputStream.writeChar('A');
byte[] bytes = byteArrayOutputStream.toByteArray();
//使用數據輸入流讀取基本數據類型
DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(bytes));
System.out.println(dataInputStream.readDouble());
System.out.println(dataInputStream.readBoolean());
System.out.println(dataInputStream.readByte());
System.out.println(dataInputStream.readChar());
dataOutputStream.close();
dataInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
該代碼使用ByteArrayOutputStream將寫入的基本數據類型數據轉換為字節數組,然後使用DataInputStream讀取並打印輸出讀取的數據。這裡首先通過writeDouble()、writeBoolean()、writeByte()和writeChar()等方法向數據輸出流寫入數據類型,然後將其轉換為字節數組。這裡需要注意的是寫入和讀取應該是對應的,在讀取時也應該按寫入的類型按順序讀取。
六、總結
在Java輸入輸出流中,我們通過講解文件輸入輸出流、字節數組輸入輸出流、字符輸入輸出流和數據輸入輸出流等方式,詳細介紹了Java輸入輸出相關知識。輸入輸出流是Java程序與外界交互的橋樑,可以讀寫各種類型的數據。涉及到輸入輸出流操作時,需要注意流的關閉,以免導致資源泄漏。
原創文章,作者:TKIY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/147510.html
微信掃一掃
支付寶掃一掃