輸入輸出流的概念
在java中,對信息的輸入與輸出都抽象爲 流 的概念。
輸入流:數據由外界輸入到程序中
輸出流:數據由程序輸出到外界
java 常見預定義的I/O流類:
從流的方向劃分:
輸入流
輸出流
從流的分工劃分:
節點流(真正訪問文件,進行進行輸入輸出操作的流)
處理流(在節點流的基礎上,對數據進行加工、轉化、處理的流)
從流的內容劃分:
面向字符的流(專門用於處理字符數據,如文本文件,可以實現內部格式和文本文件的外部格式之間轉換):Reader、Writer
面向字節的流(用於一般目的,如音頻、視頻、圖像等文件,以二進制流傳輸):InputStream、OutputStream
面向字符流的抽象基類Reader和Writer(對文本進行編碼,有效防止亂碼)
多數程序使用這兩個抽象類的一系列子類來讀入/寫出文本信息,例如FileReader/FileWriter
面向字節流的抽象基類InputStream和OutputStream(二進制存儲,效率高,空間小)
程序使用這兩個類的子類來讀寫字節信息
讀/寫字符流
FileWriter寫案例:
public class FileWriterTest {
public static void main(String[] args) throws IOException {
String fileName = "hi.txt";
FileWriter fileWriter = new FileWriter(fileName, true);
fileWriter.write("hi\n");
fileWriter.write("this is a java program!");
fileWriter.close();
}
}
涉及方法:
FileWriter("fileName",boolean),第一個參數是打開文件的名稱,第二個參數(可選)設置覆蓋(false)或者追加(true),默認爲false
write(content),將內容寫入的文件
FileWriter缺點:當寫入大量內容的時候,效率不高,而且使用 \n 另起一行,對於不同系統,可能顯示不一致,導致排版出錯
BufferedWriter類可以解決FileWriter類的缺點:效率比FileWriter高,而且比FileWriter多了newLine()方法進行換行
BufferedWriter類寫案例:
public class BufferWriterTest {
public static void main(String[] args) throws IOException {
String fileName = "./hi2.txt";
FileWriter fileWriter = new FileWriter(fileName, true);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write("hi");
bufferedWriter.newLine();
bufferedWriter.write("this is BufferedWriter!");
//關閉bufferedWriter即可
bufferedWriter.close();
}
}
涉及方法:
BufferedWriter類與FileWriter類的方法基本一樣,只是多了newLine()方法
BufferedWriter是建立在FileWriter上的,BufferedWriter構造方法參數爲FileWriter對象,但是只需要關閉流只需要關閉BufferedWriter
讀文本文件的相關類:
FileReader類(繼承自InputStreamReader):
read()方法一個字符一個字符地讀並返回當前字符的int類型,輸出須轉換爲char類型,文本末尾返回-1。
public class FileReaderTest {
public static void main(String[] args) {
try{
FileReader fileReader = new FileReader("./hi.txt");
int c;
while((c = fileReader.read())!= -1){
System.out.print((char)c);
}
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e2){
e2.printStackTrace();
}
}
}
BufferedReader類(繼承自Reader):
readLine()方法,可以對換行符進行鑑別,一行一行地讀取輸入流中的內容。
Class BufferedReaderTester{
Public static void main (String[] args){
String fileName = "Hello.txt" , line;
try{
BufferedReader in = new BuffereedReader(new FileReader(fileName));
Line = in.readLine(); //讀取一行內容
while (line != null){
System.out.println(line); line = in.readerLine();
}
In.close();
}
catch(IOException e){
System.out.println("Problem reading" + fileName);
}
}
}
有的數據是二進制類型,可以使用二進制輸入輸出流進行讀寫,之後補上。