------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
java学记笔记之流对象的选择与使用方法
由于流对象有很多个,writer,reader,InputStream,OutputStream,应用时不知道具体该用哪一个,给我们带来困惑。
其实流对象的选择十分简单只要明确一下三点即可:
1、明确源和目的
源:输入流 可选InputStream、reader 体系
目的:输出路 可选 OutputStream、writer 体系
2、操作的数据是否是纯文本
是:使用字符流
否:使用字节流
3、当体系明确后,再明确要具体使用那个具体的对象
通过设备来进行区分:
源:内存,硬盘,键盘
目的:内存,硬盘,控制台
例一、将个文本数据存储到另一个文件中,复制文件
分析:源:纯文本文件 InputStream,Reader可选,因为是源所以使用读取流是不是操作文本文件,是!选Reader
体系就明确了。
接下来要使用该体系中的哪个对象?
明确设备:硬盘。Reader体系中的可以操作文件的FileReader
FileReader fr = new FileReader("a.txt");
文件是否较大需要使用缓冲区提高效率?是!
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream Writer
是否纯文本?是!Writer 设备:硬盘
Writer体系中可以操作文件的对象FileWriter
FileWriter fw = new FileWriter("b.txt");
文件是否较大需要提高效率?是!
BufferedWriter bufw = new BufferedWriter(fw);
具体代码如下:
public class Copy_file(){
public static void main(String[] args) throws IOException
{
FileReader fr = null;
FileWriter fw = null;
fr = new FileReader("a.txt");//初始化流对象
fw = new FileWriter("b.txt");
int ch = 0;
while((ch=fr.read())!=-1)
{
fw.write(ch);
}
if(fr!=null) fr.close();
if(fw!=null)fw.close();//关闭资源
}
}//这段代码没加缓冲区,大家自己试试加上缓冲区
例二、将一个图片文件数据存储到另一个文件中,文件复制
分析:
1、源:图片文件 InputStream Reader 操作的是图片文件
选 InputStream 体系明确
接下来明确体系中的那个对象:
设备:硬盘,图片文件
选用InputStream中可以操作文件FileInputStream
FileInputStream fis = new FileInputStream(“a.jpg”);
目的:OutputStream Writer
是否存在文本 否!OutputStream 设备:硬盘,一个图片
OutputStream中的 FileOutputStream
FileOutputStream fos = new FileOutputStream("b.txt");
代码如下
public class Pic_copy
{
public static void main(String[] args) throws IOException
{
FileInputStream fis = null;
FileOutputStream fos = null;
fis = new FileInputStream("a.jpg");
fos = new FileOutputStream("b.jpg");
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf))!=-1){
fos.write(buf,0,len);
}
if(fis!=null) fis.close();
if(fos!=null)fos.close();
}
}
另外涉及到键盘输入时要用到转换流InputStreamReader
InputStream in = System.in;
InputStreamReader isr = new InputStreamReader(isr);
BufferedReader br = new BufferedReader(isr);
键盘录入的简写:BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
另涉及到想要将录入数据按照指定的编码表(utf-8),将数据存储到文件中。或则将指定编码表中的文件读出来。
因FileWriter 用的是默认码表 FileInputStream用到的也是默认码表
只有OutputStreamWriter转换流才可以指定编码表
OutputStreamWriter osw = new OutputStreamWriter((new FileWriter("a.txt")),"UTF-8");
InputStreamReader isr = new InputSteamReader((new FileReader("a.txt")),"UTF-8");
以上是我学些流操作的心得,如有不周,万望指正