java第十九天_IO流2

裝飾設計模式:

當想要對已有的對象進行功能增強時,可以定義類,將已有對象傳入,基於已有的功能,並提供加強功能。那麼自定義的該類成爲裝飾類。裝飾類通常會通過構造方法接受被裝飾的對象。並基於被裝飾的對象的功能,提供更強的功能。

裝飾模式比繼承要靈活。避免了繼承體系臃腫。而且降低了類與類之間的關係。

裝飾類因爲增強已有對象,具備的功能和已有的是相同的,只不過提供了更強功能。所以裝飾類和被裝飾類通常都是屬於一個體系中的。

流操作的基本規律:最痛苦的就是流對象有很多,不知道該用哪一個。

通過三個明確來完成。

1.明確源和目的。

源:輸入流。InputStream  Reader

目的:輸出流。OutputStream  Writer

2.操作的數據是否是純文本。

是:字符流

否:字節流

3.當體系明確後,在明確要使用哪個具體的對象。

通過設備來進行區分:

源設備:內存,硬盤,鍵盤

目的設備:內存,硬盤,控制檯

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

public class SystemInDemo 
{
	/**
	 * 當錄入一行數據後,就將該行數據進行打印。
	 * 如果錄入的數據是over,那麼停止錄入。
	 */
	public static void main(String[] args)
	{
		InputStream is=System.in;
		StringBuilder sb=new StringBuilder();
		while(true)
		{
			try 
			{
				int num=is.read();
				if(num=='\r')
					continue;
				if(num=='\n')
				{
					String str=sb.toString();
					if(str.equals("over"))
						break;
					System.out.println(str);
					sb.delete(0, sb.length());
				}
				else
					sb.append((char)num);
			} 
			catch (IOException e) 
			{
				e.printStackTrace();
			}
		}
	}
}

想要把錄入的數據按照指定的編碼表(UTF-8),將數據存到文件中。

目的:Outputstream  Writer

是否是純文本?Writer

設備:硬盤,一個文件。使用FileWriter。

但是FileWriter是使用的默認編碼表。GBK。但存儲時,需要加入指定編碼表UTF-8。而指定的編碼表只有轉換流可以指定。所以要使用的對象是OutputStreamWriter。而該轉換流對象要就收一個字節輸出流。而且還可以操作的文件的字節輸出流,FileOutputStream。

OutputStreamWriter  osw  =  new  OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");

所以,記住。轉換流什麼時候使用。字符和字節之間的橋樑,通常,涉及到字符編碼轉換時,需要用到轉換流

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class BufferedSystemDemo
{
	/**
	 * 緩衝區錄入的常見寫法
	 */
	public static void main(String[] args)
	{
		try
		{
			BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
			BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("abc.txt"),"UTF-8"));
			String str=null;
			while((str=br.readLine())!=null)
			{
				if(str.equals("over"))
					break;
				bw.write(str);
				bw.newLine();	
			}
			br.close();
			bw.close();
		} 
		catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		} 
		catch (UnsupportedEncodingException e)
		{
			e.printStackTrace();
		} 
		catch (IOException e)
		{
			e.printStackTrace();
		}
		
	}
}
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

public class ExceptionInfo 
{
	/**
	 * 錯誤日誌文件
	 */
	public static void main(String[] args) 
	{
		/*try 
		{
			int[] arr = new int[3];
			System.out.println(arr[3]);
		} 
		catch (Exception e) 
		{
			Date d=new Date();
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 E HH:mm:ss");
			String time=sdf.format(d);
			try 
			{
				PrintStream ps=new PrintStream("abc.txt");
				ps.println(time);//將字符串打印到流中。
				System.setOut(ps);
			} 
			catch (FileNotFoundException e1) 
			{
				e1.printStackTrace();
			}
			e.printStackTrace(System.out);
		}*/
		Properties p=System.getProperties();
		try 
		{
			p.list(new PrintStream("abc.txt"));//將信息打印到目標文件。
		} 
		catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		}
	}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章