很少說,直接上乾貨!java
IO流用來處理設備之間的數據傳輸。數組
java對數據的操做是經過流的方式。函數
java用於操做流的對象都在IO包中。編碼
IO流按操做數據分爲兩種:字節流和字符流。spa
IO流按流向分爲:輸入流、輸出流。3d
輸入流和輸出流code
輸入流作什麼事: 將硬盤中的數據讀出來,放到內存裏去運算。對象
輸出流作什麼事:將內存中的數據,寫到硬盤裏去。blog
輸入流和輸出流相對於內存設備而言。內存
將外設中的數據讀取到內存中:輸入。
將內存的數寫入到外設中:輸出。
字節流和字符流
字符流的由來:
其實就是:字節流讀取文字字節數據後,不直接操做而是先查指定的編碼表。獲取對應的文字。
在對這個文字進行操做。簡單說:字節流+編碼表。
字節流的抽象基類:
InputStream、OutputStream
字符流的抽象基類:
Reader、Writer
建立一個能夠往文件(由於是在磁盤)中寫入字符數據的字符輸出流對象。(由於是對內存而言,是取出,因此是輸出流)
注意:由這四個類派生出來的子類名稱都是以其父類名做爲子類名的後綴。
如InputStream的子類FileInputStream。
如Reader的子類FileReader。
如Writer的子類FileWriter。
字節流:
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
字符流:
Writer Reader
FileReader
FileWriter
BufferedReader
BufferedWriter
字符流FileWriter
FileWriterDemo.java
FileWriterDemo.java(涉及到換行和續寫)
package zhouls.bigdata.DataFeatureSelection.test; import java.io.FileWriter; import java.io.IOException; //需求:將一些文字存儲到硬盤一個文件中。 public class FileWriterDemo { private static final String LINE_SEPARATOR = System.getProperty("line.separator"); /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //建立一個能夠往文件中寫入字符數據的字符輸出流對象。 /* * 既然是往一個文件中寫入文字數據,那麼在建立對象時,就必須明確該文件(用於存儲數據的目的地)。 * 若是文件不存在,則會自動建立。 * 若是文件存在,則會被覆蓋。 * 若是構造函數中加入true,能夠實現對文件進行續寫! */ FileWriter fw = new FileWriter("demo.txt",true); /* * 調用Writer對象中的write(string)方法,寫入數據。 * 其實數據寫入到臨時存儲緩衝區中。 */ fw.write("abcde"+LINE_SEPARATOR+"hahaha");//LINE_SEPARATOR是換行符 fw.write("xixi"); //進行刷新,將數據直接寫到目的地中。 注意:flush能夠用屢次。 fw.flush(); //關閉流,關閉資源。在關閉前會先調用flush刷新緩衝中的數據到目的地。 注意:close能夠用屢次。 fw.close(); } }
FileWriter的IO異常處理
IOExceptionDemo.java
package zhouls.bigdata.DataFeatureSelection.test; import java.io.FileWriter; import java.io.IOException; public class IOExceptionDemo { private static final String LINE_SEPARATOR = System .getProperty("line.separator"); /** * @param args * @throws IOException */ public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("demo.txt"); fw.write("abcde" + LINE_SEPARATOR + "hahaha"); } catch (IOException e) { System.out.println(e.toString()); } finally { if (fw != null) try { fw.close(); } catch (IOException e) { // code.... throw new RuntimeException("關閉失敗"); } } } }
字符流FileReader
讀取方式
FileReaderDemo.java
package zhouls.bigdata.DataFeatureSelection.test; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; //需求:讀取一個文本文件。將讀取到的字符打印到控制檯. public class FileReaderDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //1,建立讀取字符數據的流對象。 //在建立讀取流對象時,必需要明確被讀取的文件。必定要肯定該文件是存在的。 //用一個讀取流關聯一個已存在文件。 FileReader fr = new FileReader("demo.txt"); int ch = 0; while((ch=fr.read())!=-1){ System.out.println((char)ch); } fr.close(); } }
也能夠這樣來進行讀取
FileReaderDemo.java
package zhouls.bigdata.DataFeatureSelection.test; import java.io.FileReader; import java.io.IOException; //需求:讀取一個文本文件。將讀取到的字符打印到控制檯. public class FileReaderDemo{ /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { FileReader fr = new FileReader("demo.txt"); //使用read(char[])讀取文本文件數據。 //先建立字符數組。 char[] buf = new char[1024]; int len = 0; while((len=fr.read(buf))!=-1){ System.out.println(new String(buf,0,len)); } fr.close(); } }