摘要:本文主要讲解了Java中 IO流的使用,包括流的概念、流的分类及使用实例等
一、流的概念
- 流是用于连接程序和设备之间的”管道“,主要用于数据传输,这个“管道”上有很多的“按钮”,每个“按钮“皆可实现不同的功能。
二、流的分类
四个基本抽象流(输入输出流,字节字符流)
文件流、缓冲流、转换流、数据流、
Print流
、Object流
字符流
FileReader file=new FileReader("F:/java/Part2/src/cha07/L7_1.java");//字符流 int aa;//java规定了read()函数的返回值为整形 aa=file1.read();//读取一个字符 while(aa!=-1)//ASCII码是从0开始的数字,读取时没有则返回-1。 { System.out.print((char)aa); aa=file1.read(); } file1.close();
字节流与字符流
字节流有着广泛的使用范围,对大部分文件皆可读取传输,而字符流仅用作读取文本文件
演示音频文件的复制粘贴比较字节流与字符流用法
FileReader file=new FileReader("C:/Users/zha yongchun/Desktop/java笔记/material/shenhua.mp3");//字符流 FileInputStream file1=new FileInputStream("C:/Users/zha yongchun/Desktop/java笔记/material/shenhua.mp3");//字节流 FileWriter paste=new FileWriter("E:/p1.mp3"); FileOutputStream paste1=new FileOutputStream("E:/p2.mp3"); int aa;//java规定了read()函数的返回值为整形 int bb; aa=file.read();//读取一个字符 bb=file1.read(); System.out.println("Contents:"); while(aa!=-1)//ASCII码是从0开始的数字,读取时没有则返回-1。 { paste.write(aa); paste1.write(bb); aa=file.read(); bb=file1.read(); } paste.flush();//将流中残留内容全部输入或输出 paste1.flush(); file.close(); file1.close(); paste.close(); paste1.close();
虚拟内存与缓冲流
//缓冲流 BufferedInputStream hcfz=new BufferedInputStream(new FileInputStream("C:/Users/zha yongchun/Desktop/java笔记/material/shenhua.mp3")); BufferedOutputStream hczt=new BufferedOutputStream(new FileOutputStream("E:/hc.mp3")); byte hc[]=new byte[2048];//数字为缓冲区大小,单位为:字节 //注:其余的使用同字节字符流 //缓冲流的优势在于有着更快的速度 //缓冲字符流用于拷贝较大文本文件,用法类似缓冲字节流
数据流传输:主要用于网络数据的传输
//数据流传输 ByteArrayOutputStream zjszl=new ByteArrayOutputStream(); DataOutputStream sjl=new DataOutputStream(zjszl); long dd=123457890; sjl.writeLong(dd); byte[] zjsz=zjszl.toByteArray(); ByteArrayInputStream srl=new ByteArrayInputStream(zjsz); DataInputStream sjsr=new DataInputStream(srl); long ss; ss=sjsr.readLong(); System.out.println("ss="+ss)
转换流
String zfc=null; try { BufferedReader zhl=new BufferedReader(new InputStreamReader(System.in)); zfc=zhl.readLine();//若输入回车键,则输入的实质上是一个空字符串 System.out.println("字符串是: "+zfc); System.out.println(zfc.equals("")); } catch(Exception e){} //System.in是字节流,想要转换为字符流需要使用上面的方法。
print
流//print流 //注:DataOutputStream中的sjscl.writeLong()方法的结果是计算机识别的二进制文件 // PrintStream中的pl.println()方法的结果是字符串 DataOutputStream sjscl=new DataOutputStream(new FileOutputStream("E:/1.txt")); sjscl.writeLong(12345466); sjscl.close(); PrintStream pl=new PrintStream(new FileOutputStream("E:/2.txt")); pl.println(12345); pl.close(); System.out.println(12345); System.out.printf("%#X ",12345); //print流输出位置的设置 PrintStream p=new PrintStream("E:/3.txt"); System.setOut(p); System.out.println("1234"); //错误输出 PrintStream plzq=null; PrintStream plcw=null; Scanner sss=null; try //try要从创建流开始直到最后 { plzq=new PrintStream("e:/plzq.txt"); plcw=new PrintStream("e:/plcw.txt"); sss=new Scanner(System.in); int shuzi; System.setOut(plzq);//设定输出位置 System.setErr(plcw);//设定错误输出位置 while(true) { shuzi=sss.nextInt(); System.out.println(shuzi); } } catch(Exception e) { System.err.println("输入有误!"); }
Object
//Object:实现文件的安全传输 ObjectOutputStream osc=null; ObjectInputStream osr=null; Student stu1=new Student("wukong",12345,99); Student stu2=null; try { FileOutputStream wsc=new FileOutputStream("e:/5.txt"); osc=new ObjectOutputStream(wsc); osc.writeObject(stu1); osr=new ObjectInputStream(new FileInputStream("e:/5.txt")); stu2=(Student)osr.readObject(); System.out.println(stu2.xingming+" "+stu2.xuehao+" "+stu2.chengji); } catch(Exception e) { System.err.println("有错误"); } finally //其作用是善后 { try { osc.close(); osr.close(); System.exit(-1);//退出程序 } catch(Exception e) { System.exit(-1); } } //finally下面的try、catch都需写上起到退出作用的语句 } } class Student implements Serializable//接口是空的,起到标志作用 { String xingming=null; int xuehao=0; transient double chengji=0;//transient的作用是忽略,外界无法传进来数据 public Student(String xingming,int xuehao, double chengji) { this.xingming=xingming; this.xuehao=xuehao; this.chengji=chengji; } }
IO流
补充//IO流补充 File wj=new File("E:/wjj/5.txt"); File wjj=new File("e:/wjj"); if(!wjj.isDirectory()) { try { wjj.mkdir(); { if(wjj.isDirectory()) { File xianshi[]=wjj.listFiles();//显示文件 for(int i=0;i { System.out.println("文件名: "+xianshi[i].getName()); } } else wjj.mkdir();//创建文件夹 } { if(!wj.exists()) { try { wj.createNewFile();//创建文件 System.out.println("文件路径: "+wj.getAbsolutePath()); System.out.println("文件大小: "+wj.length()); System.out.println("文件是否可读: "+wj.canRead()); System.out.println("文件是否可写: "+wj.canWrite()); } catch(Exception e){} } else if(wj.exists()) { System.out.println("文件路径: "+wj.getAbsolutePath()); System.out.println("文件大小: "+wj.length()); System.out.println("文件是否可读: "+wj.canRead()); System.out.println("文件是否可写: "+wj.canWrite()); } } } catch(Exception e){} } else if(wjj.exists()) { { File xianshi[]=wjj.listFiles();//显示文件 for(int i=0;i { System.out.println("文件名: "+xianshi[i].getName()); } } { if(!wj.exists()) { try { wj.createNewFile();//创建文件 } catch(Exception e){} } else if(wj.exists()) { System.out.println("文件路径: "+wj.getAbsolutePath()); System.out.println("文件大小: "+wj.length()); System.out.println("文件是否可读: "+wj.canRead()); System.out.println("文件是否可写: "+wj.canWrite()); } } }