Java的基础知识5——流
2016-07-30 09:54
573 查看
1、流的分类:
按数据流的方向不同可以分为输入流和输出流
按处理数据单位不同可以分为字节流和字符流
按功能不同可以分为节点流和处理流
2、
在Java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使OutputStream完成,输入使用的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。这四个都是抽象类。
3、DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的结点流上。DataInputStream 和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:int,double等)的方法。
4、PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
PrintWriter和PrintStream有自动flush功能。
下面是一些简单的示例。
FileInputStream、FileOutputStream
FileReader、FileWriter
BufferedWriter、BufferedReader
OutputStreamWriter、InputStreamReader
ByteArrayOutputStream、ByteArrayInputStream、DataOutputStream、DataInputStream
PrintStream
PrintWriter
ObjectOutputStream、ObjectInputStream
如果要往文件中存储和读取多个对象的时候,可以使用下面的方法。(将多个对象存入数组中)
按数据流的方向不同可以分为输入流和输出流
按处理数据单位不同可以分为字节流和字符流
按功能不同可以分为节点流和处理流
2、
\ | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
3、DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的结点流上。DataInputStream 和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:int,double等)的方法。
4、PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
PrintWriter和PrintStream有自动flush功能。
下面是一些简单的示例。
FileInputStream、FileOutputStream
import java.io.*; public class Test{ public static void main(String args[]){ FileInputStream in = null; FileOutputStream out = null; int b; try{ in = new FileInputStream("e:\\java\\Input.java"); out = new FileOutputStream("e:/java/Output.java"); }catch(FileNotFoundException e){ System.out.println("文件没有找到!"); System.exit(-1); } try{ while((b = in.read()) != -1){ out.write(b); } in.close(); out.close(); }catch(IOException e){ System.out.println("文件复制失败!"); System.exit(-1); } System.out.println("文件已复制。"); } }
FileReader、FileWriter
import java.io.*; public class Test { public static void main(String args[]) { FileReader in = null; FileWriter out = null; int b; try { in = new FileReader("e:\\java\\Input.java"); out = new FileWriter("e:/java/Output.java"); while ((b = in.read()) != -1) { out.write(b); } in.close(); out.close(); } catch (FileNotFoundException e) { System.out.println("文件没有找到!"); System.exit(-1); } catch (IOException e) { System.out.println("文件复制失败!"); System.exit(-1); } System.out.println("文件已复制。"); } }
BufferedWriter、BufferedReader
import java.io.*; public class Test { public static void main(String args[]) { try { String s = null; BufferedWriter bw = new BufferedWriter(new FileWriter("e:/java/Output.java")); BufferedReader br = new BufferedReader(new FileReader("e:/java/Output.java")); for(int i=0;i<10;i++){ bw.write(String.valueOf(Math.random())); bw.newLine(); } bw.flush(); while((s = br.readLine()) != null){ System.out.println(s); } bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } }
OutputStreamWriter、InputStreamReader
import java.io.*; public class Test { public static void main(String args[]) { OutputStreamWriter osw = null; InputStreamReader isr = null; BufferedReader br = null; int b = 0; String s = null; try { osw = new OutputStreamWriter(new FileOutputStream("e:/java/Output.java")); osw.write("Fern"); System.out.println(osw.getEncoding()); osw.flush(); osw = new OutputStreamWriter(new FileOutputStream("e:/java/Output.java",true),"ISO8859_1"); osw.write("\ngood girl"); System.out.println(osw.getEncoding()); osw.flush(); osw.close(); isr = new InputStreamReader(new FileInputStream("e:/java/Output.java")); while((b = isr.read()) != -1){ System.out.print((char)b); } isr = new InputStreamReader(System.in); br = new BufferedReader(isr); s = br.readLine(); while(s != null){ if(s.equalsIgnoreCase("exit")){ System.out.println("退出程序。"); break; } System.out.println(s.toUpperCase()); s = br.readLine(); } br.close(); } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println("文件没有找到。"); } catch (IOException e) { e.printStackTrace(); } } }
ByteArrayOutputStream、ByteArrayInputStream、DataOutputStream、DataInputStream
import java.io.*; public class Test { public s d9fe tatic void main(String args[]) { ByteArrayOutputStream baos = null; DataOutputStream dos = null; ByteArrayInputStream bais = null; DataInputStream dis = null; try { baos = new ByteArrayOutputStream(); dos = new DataOutputStream(baos); dos.writeDouble(Math.random()); dos.writeBoolean(false); dos.writeChar(65); dos.flush(); bais = new ByteArrayInputStream(baos.toByteArray()); dis = new DataInputStream(bais); System.out.println(dis.available()); System.out.println(dis.readDouble()); System.out.println(dis.readBoolean()); System.out.println(dis.readChar()); dos.close(); dis.close(); } catch (IOException e) { e.printStackTrace(); } } }
PrintStream
import java.io.*; public class Test { public static void main(String args[]) { FileOutputStream fos = null; PrintStream ps = null; try { fos = new FileOutputStream("e:/java/Output.java"); ps = new PrintStream(fos); if(ps != null){ System.setOut(ps); } for(int i=1;i<=100;i++){ System.out.print(i + " "); if(i%20 == 0){ System.out.println(); } } } catch (FileNotFoundException e) { e.printStackTrace(); } } }
PrintWriter
import java.io.*; import java.util.Date; public class Test { public static void main(String args[]) { InputStreamReader isr = null; BufferedReader br = null; String s = null; FileWriter fw = null; PrintWriter pw = null; try { isr = new InputStreamReader(System.in); br = new BufferedReader(isr); br = new BufferedReader(isr); fw = new FileWriter("e:/java/Output.java",true); pw = new PrintWriter(fw); while((s=br.readLine()) != null){ if(s.equalsIgnoreCase("exit")){ break; } pw.write(s); pw.println(); } pw.write("------"+new Date()+"------"); br.close(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } }
ObjectOutputStream、ObjectInputStream
import java.io.*; public class Test { public static void main(String args[]) { FileOutputStream fos = null; ObjectOutputStream oos = null; FileInputStream fis = null; ObjectInputStream ois = null; try { Student s = new Student(110,"小蝶",18,'女'); fos = new FileOutputStream("e:/java/Output.java"); oos = new ObjectOutputStream(fos); oos.writeObject(s); oos.flush(); oos.close(); fis = new FileInputStream("e:/java/Output.java"); ois = new ObjectInputStream(fis); s = (Student)ois.readObject(); System.out.println("学号:"+s.id+"\n姓名:"+s.name+"\n年龄:"+s.age+"\n性别:"+s.sex); ois.close(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); } } } class Student implements Serializable{ int id; String name; int age; char sex; public Student(int id,String name,int age,char sex){ this.id = id; this.name = name; this.age = age; this.sex = sex; } }
如果要往文件中存储和读取多个对象的时候,可以使用下面的方法。(将多个对象存入数组中)
import java.io.*; import java.util.ArrayList; import java.util.Iterator; public class Test5 { public static void main(String args[]) { try { ArrayList<Student> arrayOut = new ArrayList<Student>(); arrayOut.add(new Student(110,"Fern",18)); arrayOut.add(new Student(111,"Mike",29)); arrayOut.add(new Student(112,"Jack",78)); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e:/java/Output.java")); oos.writeObject(arrayOut); oos.flush(); oos.close(); ArrayList<Student> arrayIn = null; ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e:/java/Output.java")); arrayIn = (ArrayList<Student>)ois.readObject(); ois.close(); Iterator<Student> i = arrayIn.iterator(); Student temp = null; while(i.hasNext()){ temp = i.next(); System.out.println(temp); } System.out.println("\n第二种打印的方式(增强的for循环).\n"); for(Student s:arrayIn){ System.out.println(s); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } class Student implements Serializable{ int id; String name; int age; Student(int id,String name,int age){ this.id = id; this.name = name; this.age = age; } public String toString(){ return("学号:"+this.id+" 姓名:"+this.name+" 年龄:"+this.age); } }
相关文章推荐
- JAVA相关基础知识(1)
- JAVA相关基础知识(3)
- JAVA相关基础知识(6)
- JAVA基础知识(2)
- JAVA基础知识(3)
- JAVA基础知识(1)
- Java 应了解的基础知识(转载)
- JAVA基础知识(5)
- J2ME中需要的Java基础知识
- JAVA基础知识(4)
- JAVA相关基础知识_mxf
- JAVA相关基础知识(2)
- JAVA相关基础知识 选择自fanlitcn 的Blog
- JAVA相关基础知识(一)(转贴)
- JAVA相关基础知识(3)
- JAVA相关基础知识(2)
- 既然开始从头复习Java基础知识,好歹来本参考书吧!
- JAVA基础知识精华总结
- JAVA相关基础知识(二)(转贴)
- 第二讲 Java语言基础知识