思維導圖-------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 存儲器 線性結構 尊重原創 --> 原文鏈接 --> 侵權刪 還記得這個經典公式嗎? 程序=數據結構+算法 可見數據結構和算法對於程序的重要性。 一.數據結構的基本概念 數據結構