http://429564140.iteye.com/blog/2106060
1.输入流代表从外设流入到计算机内存的数据序列,输出流代表计算机内存向外设的数据序列。
根据数据类型不同,流分为两类:一种是字节流(Byte流),一次读写8位二进制数,InputStream和OutputStream设计成字节流;一种是字符流(Character流),一次读写16位二进制数,Reader和Writer为字符流设计。
2.FileInputStream和FileOutputStream是InputStream和OutputStream的直接子类,负责对本地磁盘文件的顺序读写工作;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- public class testFileInOutputStream {
- public static void main(String[] args) throws IOException {
- File file=new File("E:/test","file.txt");//文件对象
- FileInputStream fis=new FileInputStream(file);//文件输入流
- byte[]b=new byte[(int)file.length()];//定义一个字节数组
- fis.read(b);//文件输入流将内容写入到字节数组中
- File copyFile=file.createTempFile("CopyFile", ".txt",new File("E:/"));//在E:/test的路径下创建文件名CopyFile,扩展名.txt的临时文件
- FileOutputStream fos=new FileOutputStream(copyFile);//创建文件输出流
- fos.write(b);//将数组b中的内容写入到流中
- fos.close();//关闭
- fis.close();//关闭
- }
- }
结果在E:/test下产生了一个新的文件,内容跟原先的内容一样。但是后缀名改为doc后里面的内容是乱码,应该是编码的问题
3.InputStreamReader和OutputStreamWriter是由字节流转换成字符流的通道。使用方法跟FileInputStream类似。以下是一个关于流的简单输入和输出
- public class testStream {
- public static void main(String[] args) {
- int c;
- InputStreamReader in=new InputStreamReader(System.in);//创建输入流
- OutputStreamWriter out=new OutputStreamWriter(System.out);//创建输出流
- System.out.println("输入一行字符,回车结束!");
- try {
- while((c=in.read())!='\n')//c=in.read(),c就是从输入流中获得的值
- out.write(c);//将c写到输出流中
- out.close();//关闭输出流,若不关闭屏幕上什么也没有
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- System.out.println("输入流有误!");
- }
- }
- }
4.FileReader和FileWriter的使用
- System.out.println("请输入留言!");
- int n;
- InputStreamReader in=new InputStreamReader(System.in);
- File f=new File("E:/test","a.txt");
- FileReader fr=new FileReader(f);
- FileWriter fw=new FileWriter(f,true);//此处设置为true,向文件尾部追加内容,如果不加则是覆盖原先的内容
- while((n=in.read())!='\n'){
- fw.write(n);//将内容写入到文件输出流中
- }
- in.close();
- fw.close();
- char[]ch=new char[(int)f.length()];//查看文件中内容
- fr.read(ch);//将文件内容写入到ch中
- for(int i=0;i<ch.length;i++){
- System.out.println(ch[i]);
- }
- fr.close();
5.BufferedReader和BufferedWriter缓存字符流,可以提高字符流的处理效率
- //缓存System.in字符输入流
- BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
- //缓存FileWriter字符输出流
- BufferedWriter bfw=new BufferedWriter(new FileWriter(new File("E:/test","a.txt")));
- String input=null;
- //每读一行进行一次写入动作
- System.out.println("输入字符串,End结束");
- while(!(input=bfr.readLine()).equals("end")){
- bfw.write(input);//将读到的内容写到输出流中
- bfw.newLine();
- }
- bfr.close();
- bfw.close();
6.将一个文件中的内容一行一行读取的例子:
- //按行顺序第读取一个可读文件的内容
- String s;//声明一个变量
- FileInputStream is;//声明FileInputStream变量
- InputStreamReader ir;//声明InputStreamReader变量
- BufferedReader in;//声明BufferedReader变量
- try{
- is=new FileInputStream("E:\\test\\a.txt");//创建FileInputStream对象
- ir=new InputStreamReader(is);//创建InputStreamReader对象
- in=new BufferedReader(ir);//创建BufferedReader对象
- while((s=in.readLine())!=null){//判断下一行不为空
- System.out.println("Read:"+s);
- }
- }catch(FileNotFoundException e){//文件找不到异常
- System.out.println("File not found!");
- System.exit(-2);
- }catch(IOException e){
- System.out.println("error:"+e);
- System.exit(-3);
- }