IO流:
IO流用來處理設備之間的數據傳輸。
Java對數據的操作是通過流的方式。
Java用於操作流的對象都在IO包中。
流按照操作數據分爲兩種:字節流與字符流。
流按照流向分爲:輸出流,輸入流。
字節流的抽象基類:InputStream,OutputStream
字符流的抽象基類:Reader,Writer。
這四個基類派生出來的子類名稱都是以其父類名作爲子類名的後綴。前綴名一般都是該流對象的功能。
FileWriter類:該類主要是操作文件的。
一般流程:
1.創建一個FileWriter對象。該對象一被初始化就必須要明確被操作的文件。而且該文件會被創建到指定目錄下。如果該目錄下已有同名文件,將被覆蓋。FileWriter fw = new FileWriter("demo.txt");//可以傳遞一個true參數,代表不覆蓋已有的文件,並在已有文件的末尾處進行數據續寫。
2.調用write方法,將字符串寫入到流中。Fw.write("abcde");
3.刷新流對象中的緩衝中的數據。將數據刷到目的地中。fw.flush();
4.關閉流資源,但是關閉之前會刷新一次內部的緩衝中的數據。將數據刷到目的地中。和flush的區別:flush刷新後,流可以繼續使用,closeshuaxin後,會將流關閉。
FileReader:
1.創建一個文件讀取流對象,和指定名稱的文件相關聯。要保證該文件是已經存在的,如果不存在,會發生FileNotFoundException異常。
2.【方法一】調用讀取流對象的read方法。一次讀一個字符。而且會自動往下讀。
2.【方法二】定義一個字符數組。用於存儲獨到字符。該read(char[])返回的hi讀到字符個數。
文件複製的過程圖:
--------------------------------------------------------------------------------------
緩衝區
緩衝區的出現提高了對數據的讀寫效率。
對應類:bufferedwrite bufferedreader
緩衝區要結合流纔可以使用。
在流的基礎上對流的功能進行了增強。所以在創建緩衝區之前,必須要現有流對象。
只要將需要被提高效率的流對象作爲參數傳遞給緩衝區的構造函數即可。
關閉緩衝區就是在關閉緩衝區中的流對象。該緩衝區中提供了一個跨平臺的換行符(newline)。
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedDemo
{
/**
* 緩衝區寫入演示
*/
public static void main(String[] args)
{
BufferedWriter bw=null;
try
{
bw=new BufferedWriter(new FileWriter("abc.txt"));
for(int x=0;x<=4;x++)
{
bw.write("abcd"+x);
bw.newLine();//寫入一個行分隔符 }
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if(bw!=null)
bw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
字符讀取流緩衝區:該緩衝區提供了一個一次讀一行的方法readLine,方便於對文本數據的獲取。當返回null時,表示獨到文件末尾。
readLine方法返回的時候只返回回車符之前的數據內容。並不返回回車符。
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
public class LineNumberReaderDemo
{
/**
* 帶行號的緩衝區流
*/
public static void main(String[] args)
{
LineNumberReader lnr=null;
try
{
lnr=new LineNumberReader(new FileReader("BufferedDemo.java"));
lnr.setLineNumber(1);
String line=null;
while((line=lnr.readLine())!=null)
{
System.out.println(lnr.getLineNumber()+" "+line);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if(lnr!=null)
lnr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}