如何操作流对象,通过三个明确来完成。
1,明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer
2,操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3,当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。
例子一、
import java.io.*;
/*
* 需求:将一个图片文件中数据存储到另一个文件中。
*
源:使用读取流。InputStream 或 Reader
是不是操作文本文件?不是!这时就可以选择InputStream体系
明确设备:硬盘
InputStream体系中可以操作文件的对象是 FileInputStream
是否需要提高效率?是!BufferedInputStream
目的:OutputStream或Writer
是否是纯文本?不是!选择OutputStream体系
设备:硬盘
OutputStream体系中可以操作文件的对象FileOutputStream
是否需要提高效率:是!BufferedOutputStream
*/
class Test1
{
public static void main(String[] a)throws IOException
{
BufferedInputStream br=new BufferedInputStream(new FileInputStream("D:\\javafile\\day19\\src\\a.jpg"));
BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream("D:\\javafile\\day19\\src\\b.jpg"));
int s=0;
while((s=br.read())!=-1)
{
bw.write(s);
bw.flush();
}
br.close();
bw.close();
}
}
例子二、
import java.io.*;
/*
*练习:将一个文本数据打印在控制台上
源:InputStream或Reader
是不是纯文本?是!Reader
设备:硬盘
需要提高效率吗?需要!BufferedReader
目的:OutputStream或Writer
是否是纯文本?是!Writer
设备:控制台
需要提高效率吗?需要。
BufferedWriter bufw = new BufferedWriter(fw);
*/
class Test2
{
public static void main(String[] a)throws IOException
{
BufferedReader br=new BufferedReader(new FileReader("D:\\javafile\\day19\\src\\Test1.java"));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
String s =null;
while((s=br.readLine())!=null)
{
bw.write(s);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}
}
例子三、
/*
* 通过重新分配“标准”输入流和输出流来复制文件
* */
import java.io.*;
class Test3
{
public static void main(String[] a)throws IOException
{
System.setIn(new FileInputStream("D:\\javafile\\day19\\src\\b.jpg"));//定义标准输入流为源文件
System.setOut(new PrintStream("D:\\javafile\\day19\\src\\c.jpg"));//定义标准输出流为目标文件
BufferedInputStream br=new BufferedInputStream(System.in);
BufferedOutputStream bw=new BufferedOutputStream(System.out);
int s=0;
while((s=br.read())!=-1)
{
bw.write(s);
bw.flush();
}
br.close();
bw.close();
}
}