1. 程式人生 > >思維導圖-------java-IO流知識結構梳理

思維導圖-------java-IO流知識結構梳理

基類檔案流 的使用

開始   2018年8月10日16:37:41

結束   2018年8月10日18:24:19

package 面向物件;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.CharBuffer;

public class readfile {
	public static void main(String[] args) throws IOException {
		
//	註釋中的是用位元組流FileInputStream讀取檔案
//		FileInputStream fis=null;
//		
//			//建立位元組輸出流
//			fis=new FileInputStream("E:/Workspaces/MyEclipse 10/yidong/src/面向物件/a.txt");
//		
//			byte[] b=new byte[1024];
//			int hasread=0;
//			while((hasread=fis.read(b))!=-1)
//			{
//				System.out.println(new String(b,0,hasread));
//			
//			
//		}
//	}
//
//		下面是用FileReader讀取檔案
		FileReader fis=null;
		fis=new FileReader("E:/Workspaces/MyEclipse 10/yidong/src/面向物件/a.txt");
		int length=0;
		
		char[] b=new char[3];
//		read方法返回的是陣列長度
//		FileInputStream和FileReader進行檔案的讀寫並沒有什麼區別,只是操作單元不同而且。FileInputStream和FileReader進行檔案的讀寫並沒有什麼區別,只是操作單元不同
//		特別注意不能用int陣列接收字元流所以二者的陣列型別不一樣
		while((length=fis.read(b))!=-1)
		{
			System.out.println(length);
//			System.out.println(new String(b,0,length));
		}
		fis.close();
	}
	

}

思維導圖

這是檔案的讀取  FileInputStream和FileReader用法基本相同

同理                    FileOuputStrewam和FileWriter也基本相同 (接收陣列不同 位元組流與字元流的區別) 如下例

package 面向物件;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.nio.CharBuffer;

public class readfile {
	public static void main(String[] args) throws IOException {
     FileInputStream fis=null;
     FileOutputStream fos=null;
//     建立位元組輸入流和輸出流 檔案不存在會自定建立
     fis=new FileInputStream("E:/Workspaces/MyEclipse 10/yidong/src/面向物件/a.txt");
     fos=new FileOutputStream("E:/Workspaces/MyEclipse 10/yidong/src/面向物件/c.txt");
     byte[] b=new byte[1024];
     int length=0;
//     迴圈讀取資料
     while((length=fis.read(b))!=-1)
     {
//    	 把讀取到的資料寫入檔案輸出流
    	 fos.write(b);
     }
     fis.close();
     fos.close();
		
	}

}

緩衝流

public static void main(String[] args) throws Exception {
        FileReader fr = new FileReader("C:/Users/Mrzhang/javaEE/基礎課/javaSE-30/a.txt");
        BufferedReader bufr = new BufferedReader(fr);
        String line = null;

        while((line = bufr.readLine()) != null) {
            System.out.println(line);
        }

        fr.close();
        bufr.close();
    }

字元緩衝流:
  1: BufferedReader: 帶有緩衝區的字元輸入流。 
   特點: 
   (1)自帶緩衝區  就是提高了效率。
   (2)readLine() 一次讀取一行。 
   
   構造器: 
    new BufferedReader(Reader reader);//使用該緩衝流,需要先準備一個reader類的實現類物件。 
    
 API方法: 
    readLine(); 一次讀取一行的方法。 
    
  2: BufferedWriter: 帶有緩衝區的字元輸出流 
  特點: 
   (1)帶有緩衝區, 就是提高了效率。
   (2)newLine()  ; 提供了換行符 新方法。  \r\n
   
  BufferedReader : readLine方法, 一次讀取一行資料。 
 
  readLine:原理: 
    一次讀取一行資料,本質上,呼叫了FileReader類 read();方法 一次讀取一個字元。 
    當讀取單換行符號的時候,將整行的資料返回到記憶體。 
 
 //自定義一個帶有緩衝區的類,提供一個方法, 一次讀取一行。  模擬: BufferedReader類。
 
  對某個類的某個方法進行功能性的增強。可以使用裝飾設計模式。 帶有緩衝區的位元組讀取流:
     帶有緩衝區的位元組輸入流:    BufferedInputStream
     特點: 
        (1)提供了一個緩衝區, 提高了位元組的讀的效率。  
     
  
    帶有緩衝區的位元組輸出流。   BufferedOutputStream
      (1)提供了一個緩衝區,提高了位元組的寫的效率。 
   
   
 總結: 實現一個檔案的copy  到底使用什麼流? 
  (1)分析: 操作的物件,是字元還是位元組。 
                        明確使用的流物件。
                        
  (2)明確來源:  檔案, 鍵盤錄入。 
            明確目的:  檔案, 控制檯。 
            
 (3)是否需要提高效率, 使用帶有緩衝區的流對其進行包裝。

public class MediaCopy {
	public static void main(String[] args) {
		long start= System.currentTimeMillis(); 
		
		BufferedInputStream bis= null; 
		BufferedOutputStream bos=null; 
		
		//初始化: 
		try {
			bis= new BufferedInputStream(new FileInputStream("C:/Users/Mrzhang/javaEE/HTML-06/CSS-01/(一)css樣式表.wmv"));
	        bos= new BufferedOutputStream(new FileOutputStream("C:/Users/Mrzhang/javaEE/javaSE-07/javaSE-32/copy.wmv"));
	        
	        int num=0; 
	        while((num=bis.read())!=-1){
	        	bos.write(num); 
	        }
	        
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			if(bis!=null){
				try {
					bis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(bos!=null){
				try {
					bos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		long end= System.currentTimeMillis(); 
		System.out.println("消耗的時間:"+(end-start));// 86,612,0 82.5
		
		
		
	}
}

視訊都等多媒體檔案 的讀取用位元組流


轉換流的使用

nputStreamReader  

       作用: 可以將一個位元組流轉換成一個字元流。 
       構造器: 
        new InputStreamReader(InputStream in ); 將一個位元組流轉換成一個字元流。 
        new InputStreamReader(InputStream in, String charsetName) 流進行轉換的時候,可以指定字符集。。
    
   OutputStreamWriter: 
           作用: 將一個位元組輸出流轉換成一個字元輸出流
        new OutputStreamWriter(OutputStream out ); 將一個位元組流轉換成一個字元流。 
        new OutputStreamWriter(OutputStream in, String charsetName) 流進行轉換的時候,可以指定字符集。

import java.io.IOException;
import java.io.InputStream;

/*
 * 演示System.in
 * 模擬了鍵盤錄入: 
 *   每次可以讀取一行的資料。  
 *   當讀取到換行符號的時候, 這一行返回。 
 *   定義一個結束標誌。  當錄入over的時候,鍵盤錄入結束。 
 *   
 *   一次讀取一個位元組。 
 *  -------
 *   一次讀取一行資料。   BufferedReader 類: (1)帶有緩衝區。 (2)提供了一個新的方法: readLine(); 一次讀取一行資料。  
 *   
 */
public class ReadIn {
	public static void main(String[] args) throws IOException {
		InputStream in= System.in; 
		
		// 呼叫方法: 
		//int num= in.read(); //一次讀取一個位元組。-1
		
	    //定義一個容器: 
		StringBuilder sb= new StringBuilder(); 
		while(true){
			int ch= in.read();
			if(ch==13){
				continue; 
			}
			if(ch==10){
				String s= sb.toString(); //sb當中的內容轉換成字串。 
				
				//定義一個結束標誌: 
				if("over".equals(s)){
					break; 
				}
				
				System.out.println(s.toUpperCase());//讀取完成一行,將一行的資料 轉換成大寫。 
				
//				sb= new StringBuilder(); //建立很多物件。 
				sb.delete(0, sb.length()); 
				
			}else
			   sb.append((char)ch); 
		}
		
		
		
		/*int num1= in.read();
		int num2= in.read();
		int num3= in.read();
		int num4= in.read();
		
		
		System.out.println((char)num);
		System.out.println((char)num1);
		System.out.println(num2);// 13 /r
		System.out.println(num3);// 10 /n 
*/	
	}
}	


           最下面的部分是一般低效的方法

上面程式碼是預設的來源目的(鍵盤和顯示屏)

下面示例 用system方法改變來源和目的

public class ReadIn02 {
	public static void main(String[] args) throws IOException {
//		method_01(); 
		
		//鍵盤錄入的方式二: 
		BufferedReader bufr= new BufferedReader(new InputStreamReader(System.in));
		String str= bufr.readLine();
		
		
		// System.out.println(str.toUpperCase());
		
//		模擬了鍵盤輸出。 
		OutputStream out = System.out; // PrintStream ----》OutputStream 
//		out.writer(); 寫的位元組  向控制檯輸出的內容都是字元。 
		
		//將位元組流-0--->字元流輸出。 
		/*OutputStreamWriter  osw= new OutputStreamWriter(out); //將一個位元組輸出流轉換成一個字元輸出流。  
		
		osw.write(str); 
		osw.flush(); 
		osw.close(); */
		
		
		PrintStream ps= System.out; //列印流。 
		ps.println(str); //換行。
		
	}

	public static void method_01() throws IOException {
		// 一次讀取一行資料。   BufferedReader 類: (1)帶有緩衝區。 (2)提供了一個新的方法: readLine(); 一次讀取一行資料。  
		  
		InputStream in = System.in; // 一個位元組流。 
		
		//能否將一個位元組流 ---->字元流?  
		// 轉換流: 橋接流: 
		InputStreamReader isr= new InputStreamReader(in); 
		
		
		BufferedReader  bufr= new  BufferedReader(isr); 
		
		//bufr物件存在。 readLine方法。 
		String line= null; 
		while((line=bufr.readLine())!=null){
			if("886".equals(line)){
				break; 
			}
			System.out.println(line.toUpperCase());
			
		}
		
		bufr.close();
	}
	
	
}

一:System類當中的方法: 
    System.in;  標準的輸入流: 預設是鍵盤錄入
    System.out; 標準的輸出流: 預設是輸出到控制檯。 
  
    System.setIn(InputStream in); 改變來源。 
    System.setOut(PrintStream ps);  改變目的
    
    補充: 列印流:           
   PrintStream  構造器: 
   new PrintStream(String fileName);
   new PrintStream(OutputStream out); 
   
  PrintStream: 列印流(補充)

  特點: 
   (1)能夠列印基本資料型別的值。 
   (2)PrintStream 永遠不會丟擲 IOException;
   (3)寫入 byte 陣列之後自動呼叫 flush 方法。自動重新整理。
   (4)println(); 提供了換行的方法。 
  構造器: 
    PrintStream(File file) 
          建立具有指定檔案且不帶自動行重新整理的新列印流。 
    PrintStream(File file, String csn)  
  
   PrintStream(OutputStream out) ; 
   PrintStream(OutputStream out, boolean autoFlush) ;自動重新整理。 
   PrintStream(String fileName) 
   
 //使用PrintStream類,將異常資訊列印在外部檔案當中。 

2018年7月22日18:01:56 於易動

部落格寫太長的話一定要記得儲存
不然今天下午寫了一下午的部落格  哎  又重寫了一遍

遠遠沒有第一遍寫一邊執行一遍寫的流暢 +  註釋詳細

吸取教訓~~!!!!!!!

相關推薦

思維-------java-IO知識結構梳理

基類檔案流 的使用 開始   2018年8月10日16:37:41 結束   2018年8月10日18:24:19 package 面向物件; import java.io.FileInputStream; import java.io.FileNotFoundE

[思維]Java中異常的分類整理

父類:Throwable Throwable是所有異常的父類,位於:java.lang.Throwable Java的異常(包括Exception和Error)分為可查的異常(ch

Java IO知識總結

一、IO流的三種分類方式: 1.按照流向來分: 輸入流:只能從中讀取位元組資料,不能向其寫出資料 輸出流:只能向其寫入位元組資料,不能從中讀取資料 2.按照流所處理的資料型別劃分:可分為: 位元組流

Java基礎知識思維

-a log 思維 data box csdn disable clas ava Java基礎知識思維導圖

淺談Java學習知識要點—Java知識思維

Java是一種可以撰寫跨平臺應用程式的面向物件的程式設計語言。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於PC、資料中心、遊戲控制檯、科學超級計算機、行動電話和網際網路,同時擁有全球最大的開發者專業社群。 Java 程式語言的風格十分接近C、C++語言。Java是一個純的面

集合、IO部分思維框架梳理

○ 種一棵樹最好的時間是十年前,其次是現在 ○ 堅持輸出,堅持書寫,才可以持續成長 ○ 所有美好事物的成長都是緩慢的 ○ 既往不戀,未來不迎,當下不雜 ○ 業精於勤,荒於嬉,行成於思,毀於隨 ○將軍趕路 不追小兔 ○不要拘泥於語言,同樣也不要拘泥於行業,眼光放遠一點

思維結構梳理Java進階方向

寫在前面 公眾號的後臺有讀者給我留言說,對java每一階段應該會什麼技術感到迷茫。有個幾年經驗的爪娃們都經歷過成長的階段,但每個人成長階段接觸到的技術不盡相同。作為java思維導圖的作者,我當然就想這用思維導圖的方式結構化、視覺化地每階段的成長與技術串聯起來。同時歡迎關注我的公眾號【java思維導圖】哈

思維結構梳理java

如果你還只是個什麼都不懂的小白 這一時期是你最困難的時候,你什麼都不懂,想要入門學習java,你面臨著兩個選擇,一自學,二報培訓班,這是常見的兩個選擇。 小白自學與報培訓班.png 自學需要很大的毅力,特別是對於一個沒有任何基礎,剛踏入一個全新的行業的朋友來說,

java各部分知識點詳細知識思維

基礎知識:面向物件 : 多執行緒 : 集合 : IO流 : 網路程式設計 : 因為思維導圖中內容的確是多,所有導致圖片中有些內容是未展開的,如果大家想要源思維導圖,請加群 : 374136223  ,直

黑馬程式設計師--Java學習日記之基礎知識(思維&基礎概念)

------- android培訓、java培訓、期待與您交流! ---------- 什麼是常量      在程式執行的過程中其值不可以發生改變  Java中常量的分類    

Java知識思維

                        2、圖形介面程式設計(GUI)(4)                        3、資料庫程式設計(6)                        5、網路程式設計(4)                        2

最全的JAVA知識匯總(附講解和思維

++ 對齊 導致 val 閾值 運算 描述 觸發 linux內核 jvm 一行代碼是怎麽運行的首先,java代碼會被編譯成字節碼,字節碼就是java虛擬機定義的一種編碼格式,需要java虛擬機才能夠解析,java虛擬機需要將字節碼轉換成機器碼才能在cpu上執行。 我們可以用

java基礎思維

文件 alt java 基礎 ringbuf 數組 -a java運算 upload amp 1、Java 簡介.png 2、java主要特性.png 3、java發展歷史.png 4、java 開發環境配置.png 5、jav

python基礎知識思維1

python本文出自 “13122425” 博客,請務必保留此出處http://13132425.blog.51cto.com/13122425/1959186python基礎知識思維導圖1

JAVA基礎-思維

blog java 導圖 bsp alt .com images es2017 技術 JAVA基礎-思維導圖

全面的JAVA EE基礎體系思維

bubuko 引用 png image bsp log img ava detail 第一級展開圖 第二級展開圖 第三級展開圖 引用地址:http://blog.csdn.net/g290095142/article/details/78743971 全面的JAVA

Java EE 課程作業(third)- 關於 Java EE的思維

png http class BE www. image target www blog 所用到的軟件:Xmind 所參考的思維導圖:http://www.codeweblog.com/j2ee%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB%E6%

數據結構與算法知識點梳理思維

數據結構與算法數據結構與算法是學習編程者的必修課,下面是我學習完之後的知識點梳理與總結。本來用xmind做的時候把重要知識點都附了博客鏈接,但是xmind導出來後打不開了。不用擔心我把相關內容放在了數據結構專欄裏。#專欄地址:http://blog.csdn.net/column/details/20027.

Java工程師成神之路思維

思維 ava inf png 更新 時間 nbsp 微信 bubuko   前面看Hollis的微信公眾號更新了Java工程師成神之路的文檔,想著有時間把它畫下來,畫下來之後分享出來: 主要內容: 基礎篇: 進階篇: 高級篇: 推薦書籍:

數據結構與算法:概述+思維

www. list HA 復雜 jpg 邏輯結構 -i 存儲器 線性結構 尊重原創 --> 原文鏈接 --> 侵權刪 還記得這個經典公式嗎? 程序=數據結構+算法 可見數據結構和算法對於程序的重要性。 一.數據結構的基本概念 數據結構