裝飾設計模式:
當想要對已有的對象進行功能增強時,可以定義類,將已有對象傳入,基於已有的功能,並提供加強功能。那麼自定義的該類成爲裝飾類。裝飾類通常會通過構造方法接受被裝飾的對象。並基於被裝飾的對象的功能,提供更強的功能。
裝飾模式比繼承要靈活。避免了繼承體系臃腫。而且降低了類與類之間的關係。
裝飾類因爲增強已有對象,具備的功能和已有的是相同的,只不過提供了更強功能。所以裝飾類和被裝飾類通常都是屬於一個體系中的。
流操作的基本規律:最痛苦的就是流對象有很多,不知道該用哪一個。
通過三個明確來完成。
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();
}
}