流操作的基本规律:
通过三个明确来完成。
1.明确源和目的
源:输入流 。 InputStream Reader
目的:输出流 OutputStream Writer.
源:输入流 。 InputStream Reader
目的:输出流 OutputStream Writer.
2.操作数据是否是纯文本
是:字符流
不是:字节流
是:字符流
不是:字节流
3.当体系明确后,在明确要使用那个具体的对象
通过设备来区分:
源设备:内出,硬盘,键盘
目的设备:内存,硬盘,控制台
通过设备来区分:
源设备:内出,硬盘,键盘
目的设备:内存,硬盘,控制台
需求:
1.将一个文本文件中的数据存储到另一个文件中---复制文件。
源:因为是源,所以使用读取流。InputStream Reader
是不是操作文本文件?
是:这是选择Reader
这样体系就明确了。
源:因为是源,所以使用读取流。InputStream Reader
是不是操作文本文件?
是:这是选择Reader
这样体系就明确了。
接下来要明确使用该体系中的那个对象。
明确设备:硬盘。上的一个文件。
reader体系中可以操作文件的对象是FileReader
明确设备:硬盘。上的一个文件。
reader体系中可以操作文件的对象是FileReader
是否需要提高效率:是:加入Reader体系中的缓冲区 BufferedReader
FileReader fr=new FileReader("a.txt");
BufferedReader bufr=new BufferedReader(fr);
FileReader fr=new FileReader("a.txt");
BufferedReader bufr=new BufferedReader(fr);
目的:OutputStream Writer
是否是纯文本的。
是!Writer
设备:硬盘,一个文件
Writer体系总可以操作文件的对象FileWriter
是否需要提高效率:是:加入Writer体系中的缓冲区 BufferedWriter
FileWriter fw=new FileWriter("b.txt");
BufferedWriter bufw=new BufferedWriter(fw);
是否是纯文本的。
是!Writer
设备:硬盘,一个文件
Writer体系总可以操作文件的对象FileWriter
是否需要提高效率:是:加入Writer体系中的缓冲区 BufferedWriter
FileWriter fw=new FileWriter("b.txt");
BufferedWriter bufw=new BufferedWriter(fw);
FileReader fr=new FileReader("a.txt");
BufferedReader bufr=new BufferedReader(fr);
FileWriter fw=new FileWriter("b.txt");
BufferedWriter bufw=new BufferedWriter(fw);
String line=null;
while((line=bufr.readLine())!=null)
{
bufw.write(line);
bufw.flush();
}
bufr.close();
bufw.close();
需求:
将键盘录入的数据保存到一个文件中
这个需求中有源和目的都存在
那么分别分析
源:InputStream Reader
是不是纯文本?是!Reader
那么分别分析
源:InputStream Reader
是不是纯文本?是!Reader
设备:键盘。对应的对象是System.in
不是选择Reader么?System.in对应的不是字节流么?
为了操作键盘的文本数据方便。转成字符流按照字符串操作时最方便的。
所以既然明确了Reader,那么就将System.in转成Reader
用了Reader体系中的转换流。InputStreamReader
不是选择Reader么?System.in对应的不是字节流么?
为了操作键盘的文本数据方便。转成字符流按照字符串操作时最方便的。
所以既然明确了Reader,那么就将System.in转成Reader
用了Reader体系中的转换流。InputStreamReader
InputStreamReader isr=new InputStreamReader(System.in);
需要提高效率么?需要:BufferedReader
BufferedReader bufr=new BufferedReader(isr);
BufferedReader bufr=new BufferedReader(isr);
目的:OutputStream Writer
是否是纯文本?是!Writer
设备:硬盘,一个文件。使用FileWriter.
FileWriter fw=new FileWriter("a.txt");
需要提高效率么?需要:
BufferedWriter bufw=new BufferedWriter(fw);
是否是纯文本?是!Writer
设备:硬盘,一个文件。使用FileWriter.
FileWriter fw=new FileWriter("a.txt");
需要提高效率么?需要:
BufferedWriter bufw=new BufferedWriter(fw);
//键盘录入对象
InputStream ps=System.in;
//为了操作键盘的文本数据方便。转成字符流按照字符串操作时最方便的
InputStreamReader isr=new InputStreamReader(ps);
//提交效率
BufferedReader bufr=new BufferedReader(isr);
//提高效率
BufferedWriter bufw=new BufferedWriter(new FileWriter("D:\\b\\input11111.txt"));
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();
扩展:
把录入的数据按照指定的编码表,将数据存到文件中
目的:OutputStream Writer
是否是纯文本?是!Writer
设备:硬盘,一个文件。使用FileWriter.
但是FileWriter是使用的默认编码表。gbk
但是存储时,需要加入指定的编码表,而指定的编码表只有转化流可以指定。
所以要使用的对象是OutputStreamWriter.
而该转化流对象要接收一个字节输出流。而且还可以操作的文件的字节输出流。FileOutputStream
所以要使用的对象是OutputStreamWriter.
而该转化流对象要接收一个字节输出流。而且还可以操作的文件的字节输出流。FileOutputStream
OutputStreamWriter osw=new OutputStreamWrieter(new FileOutstream("d.txt"),utf-8));
需要高效么?需要:
BufferedWriter bufw=new BufferedWriter(osw);
BufferedWriter bufw=new BufferedWriter(osw);
所以,记住,转换流什么时候使用?字符和字节的桥梁。通常,涉及到字符编码转换时,需要用到转换流
//键盘录入对象
InputStream ps=System.in;
//为了操作键盘的文本数据方便。转成字符流按照字符串操作时最方便的
InputStreamReader isr=new InputStreamReader(ps);
//提交效率
BufferedReader bufr=new BufferedReader(isr);
//存储时,需要加入指定的编码表,而指定的编码表只有转化流可以指定
OutputStreamWriter isw=new OutputStreamWriter(new FileOutputStream("D:\\b\\input11111.txt"),"utf-8");
//提高效率
BufferedWriter bufw=new BufferedWriter(isw);
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();
将异常信息输入到文件中并附加上日期:
import java.io.IOException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
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("D:\\b\\datelog.log");
ps.println(s);
System.setOut(ps);
} catch (Exception e2) {
throw new RuntimeException("日志文件异常");
}
e.printStackTrace(System.out);
}
}
}