IO流时一个很重要的部分,它可以对文件,图片等做处理,可以复制,移动文件,可以通过键盘输入,再把数据存储到文档当中,总之用处很大。 先说说一些知识点。 InputStream:是表示字节输入流的所有类的超类。 FileInputStream:从文件系统中的某个文件中获得输入字节。FileInputStream 用于读取诸如图像数据之类的原始字节流。但是如果需要炒作文档一类的数据时,使用 FileReader,但是FileReader不能使用在图片和音频等上面,因为在操作过程中会发生数据变化,导致最后文档不可用。 FileInputStream:包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。 BufferedInputStream:该类实现缓冲的输入流,这个是一个缓冲器。 OutputStream:此抽象类是表示输出字节流的所有类的超类。 FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。 字节流复制文件演示例程: importjava.io.*;//导入包 publicclass CopyMovieTest{ publicstatic void main(String[] args) throws IOException //如果不做处理则抛出异常 { copyDemo(); } privatestatic void copyDemo() throws IOException{//如果不做处理则抛出异常 BufferedInputStreamin = new BufferedInputStream(new FileInputStream("F:\\Test1.java"));//源 BufferedOutputStreamout = new BufferedOutputStream(new FileOutputStream("D:\\Test1.java"));//目的 byte[]buf = new byte[1024];//定义缓冲区的大小 intlen =0; while((len = in.read(buf))!=-1){ out.write(buf,0,len);//写数据 out.flush();//刷新 } in.close();//关流 out.close(); ------------------------------------------------- 转换流: InputStreamReader:字节流转成字符流的桥梁。(可以通过指定的编码表将字节数据解码成对应字符) OutputStreamWriter:字符流转成字节流的桥梁。(可以通过指定的编码表将字符编码成对应的字节数据并写入目的中) 转换流特有功能:转换流可以将字节转成字符,原因在于,将获取到的字节通过查编码表获取到指定对应字符。 转换流练习: 1、使用转换流来完成键盘录入的数据打印在控制台上: import java.io.*; public class Demo002{ public static void main(String[] args) throws IOException { BufferedReader fr = new BufferedReader(new InputStreamReader(System.in));//确定输入为键盘输入 BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(System.out));//输出在控制台 String line = null; while((line = fr.readLine())!=null) { if("over".equals(line))//当键盘输入OVER则结束 break; fw.write(line.toUpperCase()); fw.newLine(); fw.flush(); } fw.close();//关流,一定要养成好习惯做完操作后关流 fr.close(); } } 2、将键盘录入的数据写到一个文件中。 import java.io.*; public class KeyReadDemo{ public static void main(String[] args) throws IOException { demo(); } public static void demo() throws IOException { BufferedReader fr = new BufferedReader(new InputStreamReader(System.in));//源,键盘输入 BufferedWriter fw = new BufferedWriter(new FileWriter("f:\\keydemo.txt"));//目的,f:\\keydemo.txt文件 String line = null; while((line = fr.readLine())!= null) { String str = line; if("over".equals(str))//还是OVER结束 break; fw.write(line); fw.newLine();//这个必须要换行,否则出来的东西没法看 fw.flush();//记得及时刷新 } fr.close(); fw.close(); } } 假如想要把一个文件打印在控制台上,只需要把源指向文件,目的指向控制台即可。流的操作有一些规律可循。在写代码之前需要先弄清楚以下几个问题。 1.明确源和目的: 2.明确数据是否是纯文本数据。 3.明确具体的设备。 4.是否需要其他额外功能: 然后我们再根据这4个问题来确定该用什么流来操作。
|