疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java关于数据的存放和读取


 

  在原始数据流中可以用其本身的方法方便的将对象stu的基本数据类型保存和读取。

  但是对于字符串string,写入文件的时候只有一个writeChars(String s)方法,而且这个方法是将一个字符串分解成一个个的字符写入文件,这样在读取的时候便不能直接读出字符串了。

  想到的方法是在保存对象stu的时候,一遇到字符串型的属性,便先保存一个byte,这个byte中存放之后要保存的字符串中字符的个数,这样的话在读取的时候我们先读取出了字符串的个数,就可以再后面的读取中用一个for循环将这一个字符串中的字符挨个读取,并且将他们拼接起来,还原成一个字符串。

  这样就可以做到保存和读取一个含有字符串属性的对象了

  以下是代码:

  学生类:Student.java

  package NE524;

  public class Student {

  public Student(String name,byte age,float score,String disc) {

  this.name = name;

  this.age = age;

  this.score = score;

  this.disc = disc;

  }

  String name;

  byte age;

  float score;

  String disc;

  }

  学生操作类:StudentOption.java

  package NE524;

  import java.io.DataInputStream;

  import java.io.DataOutputStream;

  import java.io.File;

  import java.io.FileInputStream;

  import java.io.FileNotFoundException;

  import java.io.FileOutputStream;

  public class StudentOption {

  /**

  * 主函数

  * @param args

  */

  public static void main(String[] args) {

  File f = new File("E:\11\11\c.txt");

  Student stu = new Student("张三",(byte)10,60.0f,"小学生");

  StudentOption so = new StudentOption();

  so.saveStudent(f, stu);//将stu这个对象保存在文件f中

  so.readStudent(f);//将保存在文件f中的对象stu读取出来

  }

  /**

  * 将一个对象保存在一个文件中

  * @param f 保存对象的文件

  * @param stu 要保存的对象

  */

  public void saveStudent(File f,Student stu){

  try {

  FileOutputStream fos = new FileOutputStream(f);

  //包装成可写基本数据类型的输出流

  DataOutputStream dos = new DataOutputStream(fos);

  dos.writeByte(stu.name.length());//将学生姓名的字符个数保存下来,在读取时方便调用

  dos.writeChars(stu.name);

  dos.writeByte(stu.age);

  dos.writeFloat(stu.score);

  dos.writeByte(stu.disc.length());//将学生的描述的字符个数保存下来,在读取时方便调用

  dos.writeChars(stu.disc);

  dos.flush();

  dos.close();

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  /**

  * 将一个对象从文件中读取出来

  * @param f 要从中读取对象的文件

  */

  public void readStudent(File f){

  try {

  FileInputStream fis = new FileInputStream(f);

  DataInputStream dis = new DataInputStream(fis);

  String name = "";//定义一个空字符串用来保存学生的名字

  int i = dis.readByte();

  for(;i>0;i--){//通过调用保存的学生名字字符数量,来将保存的字符一个一个拼接起来成为一个字符串

  name+=dis.readChar();

  }

  System.out.println(name);//输出保存的学生名字

  System.out.println(dis.readByte());//输出保存的学生年龄

  System.out.println(dis.readFloat());//输出保存的学生分数

  String disc = "";//定义一个空字符串来保存学生的描述

  i = dis.readByte();

  for(;i>0;i--){//通过调用保存的学生描述字符数量,来将保存的字符一个一个拼接起来成为一个字符串

  disc+=dis.readChar();

  }

  System.out.println(disc);

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }