JAVA學習——IO操作(一)
一、IO初步:
JAVA程序中,對於數據的輸入與輸出操作都是以流的方式進行的,按照流的方向不同可以分爲輸入流與輸出流(這裏的輸入與輸出均是以程序爲參照),按照處理數據單位不同可以分爲字節流(直接連接數據源的流)與字符流,按照功能不同可以分爲節點流與處理流。
|
字節流 |
字符流 |
輸入流 |
Reader |
|
輸出流 |
Outputstream |
Writer |
Inputstream示例:
packagecom.abin;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
publicclass InputStream {
public static void main(String[] args){
int byte_in = 0;
FileInputStream in = null;
try {
in=newFileInputStream("E:/JavaProject/IO/src/com/abin/InputStream.java");
} catch(FileNotFoundException e) {
System.out.println("找不到指定文件");
System.exit(-1);
}
long num = 0;
try {
while((byte_in=in.read())!=-1){
System.out.print((char)byte_in);
num++;
}
in.close();
System.out.println();
System.out.println("共讀取"+num+"個字節");
} catch (IOException e) {
System.out.println("讀取文件錯誤");
}
}
}
Outputstream示例:
packagecom.abin;
import java.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
publicclass OutputStream {
public static void main(String[] args){
int byte_in = 0;
FileInputStream in = null;
FileOutputStream out = null;
try {
in = newFileInputStream("E:/JavaProject/IO/src/com/abin/InputStream.java");
} catch(FileNotFoundException e) {
e.printStackTrace();
}
try {
out = newFileOutputStream("E:/JavaProject/InputStream.java");
} catch(FileNotFoundException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
try {
while ((byte_in =in.read())!=-1) {
out.write(byte_in);
}
} catch (IOException e) {
System.out.println("文件複製錯誤");
}
try {
in.close();
} catch (IOException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
}
}
節點流和處理流
按照流是否直接與特定的地方(如磁盤、內存、設備等)相連,分爲節點流和處理流兩類。
節點流:可以從或向一個特定的地方(節點)讀寫數據。如FileReader。
處理流:是對一個已存在的流的連接和封裝,通過所封裝的流的功能調用實現數據讀寫。如BufferedReader。處理流的構造方法總是要帶一個其他的流對象做參數。一個流對象經過其他流的多次包裝,稱爲流的鏈接。
常用的節點流:
父 類 InputStream OutputStream Reader Writer
文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件進行處理的節點流。
數 組 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 對數組進行處理的節點流(對應的不再是文件,而是內存中的一個數組)。
字符串 StringReader StringWriter 對字符串進行處理的節點流。
管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter對管道進行處
理的節點流。
常用處理流(關閉處理流使用關閉裏面的節點流)
緩衝流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter
增加緩衝功能,避免頻繁讀寫硬盤。
轉換流:InputStreamReader OutputStreamReader實現字節流和字符流之間的轉換。
數據流 DataInputStream DataOutputStream 等-提供將基礎數據類型寫入到文件中,或者讀取出來,爲什麼要有這個流呢?看這樣的分析,如果沒有這種流的話,有一個long,本身只佔8個字節,如果我要寫入到文件,需要轉成字符串,然後在轉成字符數組,那空間會佔用很多,但是有了這種流之後就很方便了,直接將這8個字節寫到文件就完了。既節約了內存空間有讓程序寫起來更加方便簡單了。