Java_log2000_IO2
来源:互联网 发布:灵族捏脸数据 编辑:程序博客网 时间:2024/05/20 03:38
IO篇entry2
关键词: 文件操作; 流的装配与串行化;
文件操作
File类
例 打开为文件
程序说明
本例每次从源程序文件OpenFile.java中读取512B,存储在缓冲区buffer中,再根据buffer中实际读到的字节数量将它们构造成字符串显示在屏幕上。
import java.io.*;public class OpenFile { public static void main(String args[]) throws IOException { try { //创建文件输入流对象 FileInputStream rf = new FileInputStream("OpenFile.java"); int n=512,c=0; byte buffer[] = new byte[n]; while ((c=rf.read(buffer,0,n))!=-1 ) //读取输入流 { System.out.print(new String(buffer,0,c)); } rf.close(); //关闭输入流 } catch (IOException ioe) { System.out.println(ioe);} catch (Exception e) { System.out.println(e);} }}
例 写入文件
程序说明
本例用System.in.read(buffer)从键盘输入一串字符,存储在缓冲区buffer中,再以FileOutStream的write(buffer)方法,将buffer中内容写入文件Write1.txt
中;写入文件时,有两种方式,一种是覆盖,一种是追加,在FileOutputStream的构造方法中指出。默认为false,即从头开始写。
import java.io.*;public class Write1 { public static void main(String args[]) { try { System.out.print("Input: "); int count,n=512; byte buffer[] = new byte[n]; count = System.in.read(buffer); //读取标准输入流 FileOutputStream wf = new FileOutputStream("Write1.txt"); //创建文件输出流对象 wf.write(buffer,0,count); //写入输出流 wf.close(); //关闭输出流 System.out.println("Save to Write1.txt!"); } catch (IOException ioe) { System.out.println(ioe);} catch (Exception e) { System.out.println(e);} }}
流的装配与串行化
import java.io.*; public class PrintScreen { public static void main(String[] args) throws Exception { PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out), true); out.println("Hello"); } }
对象串行化与持续性
对象串行化的含义 :对象的串行化(Serialization)是指通过写出描述自己状态的数值来记录自己的过程。
对象持续性的含义:指能够通过对象的串行化以便将来再生的能力。
程序说明
本例声明Student为序列化的类,该类Save方法创建对象输出流out,并以添加方式向文件直接写入当前对象。display方法中,创建对象输入流in,从文件中直接读取一个对象,获得该对象的类名、接口名等属性,并显示其中的域变量值。
u1.getClass().getName()是得到该对象类的类名;
u1.getClass().getInterfaces()[0])是得到该对象类的第一个实现接口
student
import java.io.*;public class Student implements Serializable //序列化{ int number=1; String name; Student(int number,String n1) { this.number = number; this.name = n1; } Student() { this(0,""); } void save(String fname) { try { FileOutputStream fout = new FileOutputStream(fname); ObjectOutputStream out = new ObjectOutputStream(fout); out.writeObject(this); //写入对象 out.close(); } catch (FileNotFoundException fe){} catch (IOException ioe){} } void display(String fname) { try { FileInputStream fin = new FileInputStream(fname); ObjectInputStream in = new ObjectInputStream(fin); Student u1 = (Student)in.readObject(); //读取对象 System.out.println(u1.getClass().getName()+" "+ u1.getClass().getInterfaces()[0]); System.out.println(" "+u1.number+" "+u1.name); in.close(); } catch (FileNotFoundException fe){} catch (IOException ioe){} catch (ClassNotFoundException ioe) {} } public static void main(String arg[]) { String fname = "Student.obj"; //文件名 Student s1 = new Student(1,"Wang"); s1.save(fname); s1.display(fname); }}
student2
import java.io.*;public class Student2 implements Serializable //序列化{ int number=1; String name; Student2(int number,String n1) { this.number = number; this.name = n1; } Student2() { this(0,""); } void save(String fname) { try { FileOutputStream fout = new FileOutputStream(fname); ObjectOutputStream out = new ObjectOutputStream(fout); out.writeObject(this); //写入对象 out.close(); } catch (FileNotFoundException fe){} catch (IOException ioe){} } void display(String fname) { try { FileInputStream fin = new FileInputStream(fname); ObjectInputStream in = new ObjectInputStream(fin); Student2 u1 = (Student2)in.readObject(); //读取对象 System.out.println(u1.getClass().getName()+" "+ u1.getClass().getInterfaces()[0]); System.out.println(" "+u1.number+" "+u1.name); in.close(); } catch (FileNotFoundException fe){} catch (IOException ioe){} catch (ClassNotFoundException ioe) {} } public static void main(String arg[]) { String fname = "student2.obj"; //文件名 Student2 s1 = new Student2(1,"Wang"); s1.save(fname); s1.display(fname); }}