緩衝流,轉換流,標準輸入輸出流
宣告:由於學習所用環境為JDK1.8,所有java程式碼均在JDK1.8環境中測試通過,如果環境發生變化,可能會有錯誤發生!
一.緩衝流
緩衝流是處理流的一種,建立在相應的節點流之上,對讀寫的資料提供了緩衝的功能,提高了讀寫的效率,還增加了一些新的方法
JDK提供四種緩衝流
BufferedInputStream 可以對任何的InputStream流進行包裝
BufferedOutputStream 可以對任何的OutputStream流進行包裝
BufferedReader 可以對任何的Reader流進行包裝
新增了readLine()方法用於一次讀取一行字串
package buffer; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.Reader; public class BufferedReaderDemo { public static void main(String[] args) { File f=new File("c:"+File.separator+"test.txt"); Reader r=null; BufferedReader br=null; try { r=new FileReader(f); br=new BufferedReader(r); String line=""; while((line=br.readLine())!=null){ System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } }
BufferedWriter 可以對任何的Writer流進行包裝
新增了newLine()方法用於寫出一個行分隔符
package buffer; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.Writer; public class BufferedWriterDemo { public static void main(String[] args) { File f=new File("c:"+File.separator+"test1.txt"); Writer w=null; BufferedWriter bw=null; try { w=new FileWriter(f); bw=new BufferedWriter(w); bw.write("床前明月光"); bw.newLine(); bw.write("疑是地上霜"); bw.newLine(); bw.write("舉頭望明月"); bw.newLine(); bw.write("低頭思故鄉"); bw.flush(); System.out.println("寫入成功"); } catch (Exception e) { e.printStackTrace(); } } }
對於緩衝輸出流,寫出的資料會先快取在記憶體緩衝區中,關閉此流前要用flush()方法將快取區的資料立刻寫出。
關閉緩衝流時,會自動關閉緩衝流所包裝的所有底層流。
課堂練習:複製圖片
二.轉換流package buffer; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; public class CopyImage { public static void main(String[] args) { File srcFile=new File("e:"+File.separator+"picture"+File.separator+"6.jpg"); File destFile=new File("c:"+File.separator+srcFile.getName()); InputStream input=null; BufferedInputStream bis=null; OutputStream output=null; BufferedOutputStream bos=null; try { input=new FileInputStream(srcFile); bis=new BufferedInputStream(input); output=new FileOutputStream(destFile); bos=new BufferedOutputStream(output); int len=0; while((len=bis.read())!=-1){ bos.write(len); } System.out.println("複製完成!"); } catch (Exception e) { e.printStackTrace(); } } }
1、在IO包中,實際上只有位元組流,字元流是在位元組流的基礎上轉換出來的。
轉換流用於在位元組流和字元流之間轉換。
JDK提供了兩種轉換流
InputStreamReader:
是Reader的子類,將輸入的位元組流變為字元流,即:將一個位元組流的輸入物件變為字元流的輸入物件。
InputStreamReader需要和InputStream“套接”,它可以將位元組流中讀入的位元組解碼成字元
OutputStreamWriter:
是Writer的子類,將輸出的字元流變為位元組流,即:將一個字元流的輸出物件變為位元組流的輸出物件。
OutputStreamWriter需要和OutputStream“套接”,它可以將要寫入位元組流的字元編碼成位元組
2、轉換步驟
package convert;
import java.io.*;
public class InputStreamReaderDemo {
public static void main(String[] args) {
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
System.out.println("請輸入:");
try {
String content=br.readLine();
System.out.println("輸入的內容是:"+content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package convert;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class OutputStreamWriterDemo {
public static void main(String[] args){
OutputStream out=null;
OutputStreamWriter osw=null;
BufferedWriter bw=null;
try {
out=new FileOutputStream("c:"+File.separator+"test.txt");
osw= new OutputStreamWriter(out);
bw=new BufferedWriter(osw);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
課堂練習:模擬記錄使用者登入日誌(採用追加方式記錄),從控制檯接收使用者輸入的使用者名稱和密碼,在檔案中記錄使用者名稱和密碼以及登入時間, 格式如下: name=zhangsan,pwd=123456,時間=2014-06-05 18:22:33
package convert;
import java.io.*;
import java.util.Date;
import java.util.Properties;
import java.text.SimpleDateFormat;
public class Exercise {
public static void main(String[] args) {
Properties pro=new Properties();
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
OutputStream out=null;
OutputStreamWriter osw=null;
BufferedWriter bw=null;
try {
System.out.println("請輸入使用者名稱:");
pro.setProperty("name", br.readLine());
System.out.println("請輸入密碼:");
pro.setProperty("password", br.readLine());
out=new FileOutputStream("c:"+File.separator+"test.properties",true);
osw=new OutputStreamWriter(out);
bw=new BufferedWriter(osw);
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd:HH-mm-ss");
pro.setProperty("time", sdf.format(date));
pro.store(out, "this is information");
System.out.println("寫入成功!");
bw.newLine();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
三.標準輸入、輸出流
1. System.in 標準輸入流
2. System.out標準輸出流
3. System.err“標準”錯誤輸出流
四.擴充套件(Properties類--Hashtable的子類)
一般用於配置屬性檔案
package properties;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesLoad {
public static void main(String[] args) {
Properties pro=new Properties();
InputStream input=null;
try {
input=new FileInputStream("c:"+File.separator+"test1.txt");
pro.load(input);
System.out.println(pro.getProperty("name"));
System.out.println(pro.getProperty("sex"));
System.out.println(pro.getProperty("hobby"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
package properties;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
public class PropertityStore {
public static void main(String[] args) {
Properties pro=new Properties();
pro.setProperty("name", "lily");
pro.setProperty("sex", "female");
pro.setProperty("hobby", "code");
OutputStream out=null;
try {
out=new FileOutputStream("c:"+File.separator+"test1.txt");
pro.store(out, "this is information");
System.out.println("屬性檔案寫入成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
相關推薦
緩衝流,轉換流,標準輸入輸出流
宣告:由於學習所用環境為JDK1.8,所有java程式碼均在JDK1.8環境中測試通過,如果環境發生變化,可能會有錯誤發生!一.緩衝流緩衝流是處理流的一種,建立在相應的節點流之上,對讀寫的資料提供了緩衝的功能,提高了讀寫的效率,還增加了一些新的方法JDK提供四種緩衝流Buff
vector,string,標準輸入輸出流,檔案輸入輸出流01(C++)
按要求編寫程式。 a) 定義一個結構體型別 Student,如下所示: struct Student { int ID; //學號 string name; //姓名 float score[3]; //三門課程成績 }; b) 編寫一個函式,按照上述結構體定義,依次從鍵盤輸
標準輸入輸出流,string 亦可使用01(C++)
從鍵盤輸入一個不包括空格的僅由英文字母組成的字串,長度不超過 200 個字元。統計 26 個英文字母的使用頻率(出現的 次數),不區分大小寫。最後按使用頻率從大到小的順序輸出字母(小寫字母)及其使用頻率,沒有出現的字母不輸出 /*==================
20180119:緩衝流、轉換流、標準輸入輸出流
今天重點學習瞭解了緩衝流和轉換流的內容,標準輸入輸出流並不複雜,較為容易理解 一、緩衝流 緩衝流是處理流的一種,建立在相應的節點流之上,對讀寫的資料提供了緩衝的功能,作用就是為了提高讀寫的效率,由於普通的輸入流在讀取檔案時效率較低,建立自定義的緩衝區也造成了記憶體的浪費;同
3.6 Java之轉換流和標準輸入輸出流
轉換流 轉換流(屬於處理流)作用在節點流之上 轉換流共兩種:輸入型和輸出型 輸入型轉換流:將輸入型位元組流轉換為輸入型字元流,使得以字元形式讀入,提高效率,輸出型同理 解碼:由位元組陣
標準輸入輸出流對象
com 包括 後繼 print 一個 定向 輸出流 ner 轉換 System類的靜態成員變量,包括 System.in:InputStream類型的,代表標準輸入流,默認狀態對應於鍵盤輸入。 System.out:PrintStream類型的,代表標註輸出流,默認狀態對應
Java 知識點整理-17.IO流 其他流 序列流+序列化+反序列化+記憶體輸出流+物件操作流+列印流+標準輸入輸出流+鍵盤錄入方式+隨機訪問流+資料輸入輸出流+Properties
目錄 序列流 記憶體輸出流 記憶體輸出流的面試題 物件操作流ObjectOutputStream 物件操作流ObjectInputStream 物件操作流優化 序列化加上id號 列印流的概述和特點 標準輸入輸出流概述和輸出語句 修改標準輸入輸出流拷貝圖片
_118_Java_標準輸入輸出流
---------------------------------- import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i
javaSE (三十三)其他流(序列流、記憶體輸出流、隨機訪問流、物件操作流、資料輸入輸出流、列印流、標準輸入輸出流、properties)
1、序列流(SequenceInputStream ): 序列流主要的作用就是整合位元組輸入流,將很多的進口整合成一個 這裡著重講一下多於兩個輸入流的整合: 步驟: 建立三個輸入流 建立vector集合存入這些輸入流 將這些輸入流變成列舉型別 Vector.e
java中標準輸入輸出流
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.i
標準輸入輸出流OutputStreamWriter:將位元組輸出流轉換為字元輸出流InputStreamReader:將位元組輸入流轉換為字元輸入流列印流新增輸出資料的功能ObjectInputStrea
1.1 標準輸入輸出流 public static final InputStream in:標準輸入流 public static final PrintStream out:標準輸出流 OutputStreamWriter:將位元組輸出流轉換為字元輸出流 publicc
Qt讀寫標準輸入/輸出流
答案:QFile和QTextSream QTextStream我沒嘗試過,可跳轉: https://blog.csdn.net/haha_mingg/article/details/6884883 QFile可行,具體例項,可見https://blog.csdn.net
Java中標準輸入輸出流的重定向
一、問題的引入: 一般情況下,System.in代表的是鍵盤、System.out是代表的控制檯(顯示器)。當程式通過System.in來獲取輸入的時候,預設情況下,是從鍵盤讀取輸入;當程式試圖通過System.out執行輸出時,程式總是輸出到顯示器。如果我們想對這樣的情況
Java之標準輸入輸出流以及標準錯誤輸出流的基本使用
標準輸入輸出流以及標準錯誤輸出流的基本使用: System.out 是一個特殊的 PrintStream "標準"輸出流 ==》 輸出結果到控制檯System.err 是一個特殊的 Print
python 標準輸入輸出流
python 中有三種標準輸入輸出流:sys.stdin、sys.stdout、sys.error >>> f = open("1.txt", "r") # fileno方法可返
Java中IO流,輸入輸出流概述與總結
ips 刪除一個文件 數據 長度 還要 都是 模式 方式 歌曲 轉自:https://www.cnblogs.com/biehongli/p/6074713.html 1:Java語言定義了許多類專門負責各種方式的輸入或者輸出,這些類都被放在java.io包中。其中, 所有
C++輸入輸出流加速器,關閉同步流,ios::sync_with_stdio(false)和 cin.tie(0)
bsp c++ 語句 leetcode return ios 使用 而不是 關閉 leetcode練習時,總會發現運行時間短的代碼都會有類似: static int x=[](){ std::ios::sync_with_stdio(false); cin
輸入輸出流讀取本機txt文件:不能將中文字元流轉化為char 因為char一個位元組,中文在UTF-8的情況下是三個位元組,會出現字元流擷取
package interview; import org.junit.Test; import java.io.*; public class TestInOrOutStream { class m { @Test void x(){ Sys
VS2010下編譯輸入輸出流cout和cin ,printf
printf是c中保留下來的,cout 和cin是c++的輸入輸出流,存在於檔案iostream檔案中,這個是C++自帶的標頭檔案 遇到問題,編譯cout時,提示,找不到cout,原因:沒有將iostream包含在VC++的庫中,解決方法:在屬性-VC++的附加包含目錄中新增include檔
【 unity3d 】輸入輸出流,Asset根目錄路徑
沙盒路徑 Asset根目錄路徑: Application.dataPath +”xxx”; 寫入操作 StreamWrite –sw.Write() 寫入文件 讀入操作 StreamReader – sr.ReadToEnd() 讀入文件 建立檔案,寫內