源:鍵盤錄入蜂奸。
目的:控制臺。
需求:想把鍵盤錄入的數(shù)據(jù)存儲到一個文件中硬萍。
源:鍵盤扩所。
目的:文件。
需求:想要將一個文件的數(shù)據(jù)打印在控制臺上朴乖。
源:文件
目的:控制臺拴还。
流操作的基本規(guī)律:
最痛苦的就是流對象有很多号坡,不知道該用哪一個语御。
通過三個明確來完成柄慰。
- 1.明確源和目的。
源:輸入流哩都。InputStream Reader
目的:輸出流。OutputStream Writer- 2.操作的數(shù)據(jù)是否是純文本婉徘。
是:字符流漠嵌。
不是:字節(jié)流。- 3.當(dāng)體系明確后盖呼,再明確要使用哪個具體的對象儒鹿。
通過設(shè)備來進(jìn)行區(qū)分:
源設(shè)備:內(nèi)存,硬盤几晤,鍵盤
目的設(shè)備:內(nèi)存约炎,硬盤,控制臺蟹瘾。
將一個文本文件中數(shù)據(jù)存儲到另一個文件中圾浅,復(fù)制文件。
源:因為是源憾朴,所以使用讀取流狸捕。InputStream Reader是不是操作文本文件。
是众雷!這時就可以選擇Reader灸拍,這樣體系就明確了做祝。
接下來明確要使用該體系中的哪個對象。
明確設(shè)備:硬盤鸡岗。上一個文件混槐。
Reader體系中可以操作文件的對象是FileReader
是否需要提高效率:是!加入Reader體系中緩沖區(qū) BufferedReader轩性。
FileReader fr = new FileReader("a.txt");
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream Writer
是否是純文本声登。
是!Writer炮姨。
設(shè)備:硬盤捌刮,一個文件。
Writer體系中可以操作文件的對象FileWriter舒岸。
是否需要提高效率:是绅作!。加入Writer體系中緩沖區(qū)BufferedWriter蛾派。
FileWriter fw = new FileWriter("b.txt");
BufferedWriter bufw = new BufferedWriter(fw);
練習(xí):將一個圖片文件數(shù)據(jù)存儲到另一個文件中俄认。復(fù)制文件,要按照以上格式自己完成三個明確洪乍。
需求:將鍵盤錄入的數(shù)據(jù)保存到一個文件中眯杏。這個需求中有源和目的都存在。
那么分析分析
源:InputStream Reader
是不是純文本壳澳?是岂贩!Reader
設(shè)備:鍵盤。對應(yīng)的對象是System.in巷波。
不是選擇Reader嗎萎津?System.in對應(yīng)的不是字節(jié)流嗎?
為了操作鍵盤的文本數(shù)據(jù)方便抹镊。轉(zhuǎn)成字符流按照字符串操作是最方便的锉屈。
所以既然明確了Reader,那么就將System.in轉(zhuǎn)換成Reader垮耳。
用了Reader體系中轉(zhuǎn)換流颈渊,InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
需要提高效率嗎?需要!BufferedReader
BufferedReader bufr = new BufferedReader(isr);
目的:OutputStream Writer
是否是純文本终佛?是俊嗽!Writer。
設(shè)備:硬盤铃彰。一個文件乌询。使用FileWriter。
FileWriter fw = new FileWriter("c.txt");
需要提高效率嗎豌研?需要妹田。
BufferedWriter bufw = new BufferedWriter(fw);
擴(kuò)展一下唬党,想要把錄入的數(shù)據(jù)按照指定的編碼表(utf-8),將數(shù)據(jù)存到文件中。
目的:OutputStream Writer
是否是純文本鬼佣?是驶拱!Writer。
設(shè)備:硬盤晶衷。一個文件蓝纲。使用FileWriter。
但是FileWriter是使用的默認(rèn)編碼表晌纫。GBK税迷。
但是存儲時,需要加入指定編碼表utf-8锹漱。而指定的編碼表只有轉(zhuǎn)換流可以指定箭养。
所以要使用的對象是OutputStreamWriter。
而該轉(zhuǎn)換流對象要接收一個字節(jié)輸出流哥牍。而且還可以操作的文件的字節(jié)輸出流毕泌。FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
需要提高效率嗎?需要嗅辣。
BufferedWriter bufw = new BufferedWriter(osw);
所以撼泛,記住。轉(zhuǎn)換流什么時候使用澡谭。字符和字節(jié)之間的橋梁愿题,通常,涉及到字符編碼轉(zhuǎn)換時蛙奖,需要用到轉(zhuǎn)換流潘酗。
import java.io.*;
public class TransStreamDemo2 {
public static void main(String[] args) throws IOException
{
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d.txt")));
String line = null;
while ((line = bufr.readLine())!=null)
{
if ("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
添加參數(shù)"GBK","UTF-8"分別運(yùn)行外永。得到d1.txt,d2.txt文件崎脉。發(fā)現(xiàn)不添加參數(shù)和添加參數(shù)UTF-8得到的文件大小一致拧咳,所以得出默認(rèn)是UTF-8編碼伯顶。通過Properties getProperties();得出sun.jnu.encoding::UTF-8。
import java.io.*;
public class TransStreamDemo2 {
public static void main(String[] args) throws IOException
{
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d1.txt"),"GBK"));
String line = null;
while ((line = bufr.readLine())!=null)
{
if ("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
import java.io.*;
public class TransStreamDemo2 {
public static void main(String[] args) throws IOException
{
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d2.txt"),"UTF-8"));
String line = null;
while ((line = bufr.readLine())!=null)
{
if ("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
練習(xí):將一個文本數(shù)據(jù)打印在控制臺上骆膝,要按照以上格式自己完成三個明確祭衩。
改變標(biāo)準(zhǔn)輸入輸出設(shè)備
import java.io.*;
public class TransStreamDemo3 {
public static void main(String[] args) throws IOException
{
System.setIn(new FileInputStream("DateDemo.java"));
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while ((line = bufr.readLine())!=null)
{
if ("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
//輸出
IMPORT JAVA.TEXT.SIMPLEDATEFORMAT;
IMPORT JAVA.UTIL.DATE;
PUBLIC CLASS DATEDEMO {
PUBLIC STATIC VOID MAIN(STRING[] ARGS) {
DATE D = NEW DATE();
SYSTEM.OUT.PRINTLN(D);//打印的時間看不懂,希望有些格式
//將模式封裝到SIMPLEDATEFORMAT對象中
SIMPLEDATEFORMAT SDF = NEW SIMPLEDATEFORMAT("YYYY年MM月DD日E HH:MM:SS");
//調(diào)用FORMAT方法讓模式格式化指定DATE對象
STRING TIME = SDF.FORMAT(D);
SYSTEM.OUT.PRINTLN("TIME="+TIME);
}
}
import java.io.*;
public class TransStreamDemo4 {
public static void main(String[] args) throws IOException
{
// System.setIn(new FileInputStream("DateDemo.java"));
System.setOut(new PrintStream("zz.txt"));
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while ((line = bufr.readLine())!=null)
{
if ("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
異常的日志信息
import java.io.IOException;
import java.io.PrintStream;
public class ExceptionInfo {
public static void main(String[] args) throws IOException
{
try
{
int[] arr = new int[2];
System.out.println(arr[3]);
}catch (Exception e)
{
e.printStackTrace(new PrintStream("a.txt"));
}
}
}
import java.io.IOException;
import java.io.PrintStream;
public class ExceptionInfo {
public static void main(String[] args) throws IOException
{
try
{
int[] arr = new int[2];
System.out.println(arr[3]);
}catch (Exception e)
{
System.setOut(new PrintStream("exception.log"));
e.printStackTrace(System.out);
}
}
}
import java.io.IOException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionInfo {
public static void main(String[] args) throws IOException
{
try
{
int[] arr = new int[2];
System.out.println(arr[3]);
}catch (Exception e)
{
try
{
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd HH:mm:ss");
String s = sdf.format(d);
PrintStream ps = new PrintStream("exception.log");
ps.println(s);
System.setOut(ps);
}catch (IOException ex)
{
throw new RuntimeException("日志文件創(chuàng)建失敗");
}
e.printStackTrace(System.out);
}
}
}
輸出系統(tǒng)信息
import java.io.IOException;
import java.io.PrintStream;
import java.util.Properties;
public class SystemInfo {
public static void main(String[] args) throws IOException
{
Properties prop = System.getProperties();
//System.out.println(prop);
prop.list(new PrintStream("sysinfo.txt"));
}
}