Java IO流之節點流與字符流的相關知識總結
file是文件和目錄路徑名的抽象表示
1.1 File的用法用法:
File file = new File('路徑名');//如File file = new File('L:FileTestDemoAAAaaa.txt');
注意:在windows中,路徑名不能使用單個的,單個的為轉義字符,可以使用,//或/
1.2 File的常用方法1.boolean createNewFile()
當且僅當具有此名稱的文件尚不存在時,以原子方式創建由此抽象路徑名命名的新空文件。 注意: 不能創建文件夾,只能創建文件
System.out.println(file.createNewFile()); //true or false表示是否創建成功
2.boolean delete()
刪除此抽象路徑名表示的文件或目錄。
System.out.println(file.delete());
3.boolean exists()
測試此抽象路徑名表示的文件或目錄是否存在。
if(!file.exists()){ System.out.println('文件不存在,創建'+ file.createNewFile());}
4.String getName()
返回此抽象路徑名表示的文件或目錄的名稱。
System.out.println(file.getName());
5.long lastModified()
返回上次修改此抽象路徑名表示的文件的時間。
System.out.println(new SimpleDateFormat().format(new Date(file.lastModified())));二、IO流
File 類:
只能操作文件外部的內容,無法操作文件內部內容的讀寫
流:數據以先入先出的順序進行傳輸,流就是管道,就是用來 傳輸數據的
IO 流:java提供了一個io包,提供了很多類,提供了很多功能能夠實現數據的讀寫
2.1 流的概念數據源就像水箱,流就像水管中流著的水流,程序就是我們最終的用戶。 流是一個抽象、動態的概念, 是一連串連續動態的數據集合
2.2 流的分類按流向可分為輸入流(InputStream和Reader)和輸出流(OutputStream和Writer)
按操作單元可分為字節流(InputStream 和 OutputStream)和字符流(Reader 和 Writer)
按功能可分為節點流(可以直接從數據源或目的地讀寫數據)和功能流(是處理流的流。通過對其他流的處理提高程序的性能)
2.3 IO操作步驟在進行任何操作之前,首先要明確目的(讀還是寫),找準源頭(讀取),找準目的地(寫出)
1.建立聯系 :這一步驟是為了獲取流,如果此時是文件,則需要將文件抽象到內存形成對象。后期也 可以是其他的數據源
2.選擇流:從讀寫、數據單元和功能方面考慮。輸入|輸出,字節|字符,結點流|處理流。
3.執行操作:該讀就讀,該寫就寫。考慮是一次性完成還行需要循環。
4.釋放資源:程序中打開的文件 IO 資源不屬于內存中的資源,垃圾回收無法回收,需要顯示關閉。
2.4 基本輸入流(InputStream和Reader)int read() -> 返回值是這一次讀取到的內容(一個字節的值, 一個字符的值)
int read(byte[] car) -> 將讀取到的字節臨時存儲到car數組中, 返回實際讀取到的字節數量
int reade(char[] car) -> 將讀取到的字符臨時存儲到car數組中, 返回實際讀取到的字符數量
無論以何種方式 read(), read([]) 讀取文件, -1,就意味著讀取到文件末尾
字符 -> 只能操作文本,直接讀取到的就是字符
字節 -> 任意數據, 但是如果操作是字符的話,還需要我們轉換(麻煩)
單個字節讀取
以InputStream為例,Reader同理
public class IOTest { public static void main(String[] args) throws IOException {//選擇流,建立聯系InputStream is = new FileInputStream('L:FileTestDemo123.txt');//無論以何種方式 read(), read([]) 讀取文件, -1,就意味著讀取到文件末尾 //則當result的值為-1時結束int result = -1;while((result = is.read()) != -1){ System.out.println((char)result);}//關閉is.close(); }}
多個字節讀取
public class IOTest { public static void main(String[] args) throws IOException {//選擇流,建立聯系InputStream is = new FileInputStream('L:FileTestDemo123.txt');//定義運輸數組byte[] car = new byte[1024];int len = -1;//當result的值為-1時結束while ((len = is.read(car)) != -1){ System.out.println(new String(car,0,len));}//關閉is.close(); }}2.5 基本輸出流(OutputStream和Writer)
以OutputStream為例,Writer同理
注意:在關閉(close)輸出流前需要先清空(flush)緩存區的數據
flush()一般主要用在IO中,即清空緩沖區數據,就是說你用讀寫流的時候,其實數據是先被讀到了內存中,然后用數據寫到文件中,當你數據讀完的時候不代表你的數據已經寫完了,因為還有一部分有可能會留在內存這個緩沖區中。這時候如果你調用了 close()方法關閉了讀寫流,那么這部分數據就會丟失,所以應該在關閉讀寫流之前先flush(),先清空數據。
單字節寫入
public class OutputStream01 { public static void main(String[] args) throws IOException {選擇流,建立聯系OutputStream os = new FileOutputStream('L:FileTestDemoabc.txt',true);//寫入數據os.write(’a’);//刷出流os.flush();//關閉os.close(); }}
多字節輸入
public class OutputStream02 { public static void main(String[] args) throws IOException {//構建輸出流OutputStream os = new FileOutputStream('L:FileTestDemoabc.txt');//需要寫入的數據String str = '我好菜啊n' +'就這?n' +'ttt不是吧,阿sir';//轉為字節數據存入數組byte[] arr = str.getBytes();//寫入數據os.write(arr);//刷出數據os.flush();//關閉os.close(); }}2.6 輸入輸出聯合使用
以InputStream和OutputStream為例
public class In_Out { public static void main(String[] args){//提升作用域范圍InputStream is = null;OutputStream os = null;try { //創建輸入流 is = new FileInputStream('L:FileTestDemoaaa.txt'); os = new FileOutputStream('L:FileTestDemoabcbbb.txt'); //創建輸入數組 byte[] arr = new byte[1024]; int len = -1; while ((len = is.read(arr)) != -1){//write(byte[] b, int off, int len) 將從偏移量 off開始的指定字節數組中的 len字節寫入此輸出流os.write(arr,0,len); } //刷出 os.flush();} catch (FileNotFoundException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();}finally { //后打開,先關閉 //先關閉輸出流 if(os != null){try { os.close();} catch (IOException e) { e.printStackTrace();} } //再關閉輸入流 if(is != null){try { is.close();} catch (IOException e) { e.printStackTrace();} }} }}2.7 異常的處理
在使用IO流的時候會出現編譯時異常,可以使用拋出異常或抓取異常來處理
拋出異常
public class IOTest {public static void main(String[] args) throws IOException {//建立聯系可能會遇到找不到文件位置(FileNotFoundException)異常//這時候可以拋出(throw)異常InputStream is = new FileInputStream('L:FileTestDemo123.txt'); }}
抓取異常
public class IOTest { public static void main(String[] args){ //通過try...carch...來抓取異常try { InputStream is = new FileInputStream('L:FileTestDemo123.txt');} catch (FileNotFoundException e) { e.printStackTrace();} }}2.8 字節流與字符流的區別
字節流和字符流的區別:
1.每次讀寫的字節數不同;
2.字符流是塊讀寫,字節流是字節讀寫;
3.字符流帶有緩存,字節流沒有。
java流在處理上分為字符流和字節流。字符流處理的單元為2個字節的Unicode字符,分別操作字符、字符數組或字符串,而字節流處理單元為1個字節,操作字節和字節數組。
字符流和字節流,一個屬性范圍小,一個屬性范圍大,字符流只能是字符這一種類型,但是字節流中可以是字符,可以是二進制文件,可以是音頻,可以是各種各樣的類型,只要符合字節形式存儲的都可以接字節流,而字符流只能接字符。
到此這篇關于Java IO流之節點流與字符流的相關知識總結的文章就介紹到這了,更多相關Java節點流與字符流內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章:
