1. 程式人生 > >緩衝流,轉換流,標準輸入輸出流

緩衝流,轉換流,標準輸入輸出流

宣告:由於學習所用環境為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

vectorstring標準輸入輸出檔案輸入輸出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() 讀入文件 建立檔案,寫內