java.io操作 DataInputStream和DataOutputStream基本数据流
1,java中如果不保存整个对象,只保存类中的属性,那么我们可以使用本篇文章中的方法,如果要保存整个对象 先将类实例化 后面的文章将详细写到
2,DataInputStream 是java.io包中一个数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
3,DataOutputStream是java.io包中一个数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后, 应用程序可以使用数据输入流将数据读入。
4,DataInputStream和DataOutputStream主要是对java中的基本 数据的读写操作read()和write(); readBoolean(); readByte(); readcChar(); readShort(); readInt(); readFloat(); readDouble(); readLong();
上面的这些读基础数据的方法,他们都会有一个返回都是以字 节的形式返回的,JAVA的api中说的很清楚
5,下面将使用DataInputStream和DataOutputStream来写一个读写的程序;
分析;下面的程序不能可以将属性写入到文本,读取不到资源?
package File0524; import java.io.*; public class Date { public static void main(String[] args) { File file = new File("F:\\file1\\读取_Data.doc"); writer(file); reads(file); } public static void writer(File file){ try{ FileOutputStream fos = new FileOutputStream(file); DataOutputStream dos = new DataOutputStream(fos ); dos.writeChar('王'); dos.writeFloat(123.33F); dos.writeInt(2222); dos.flush(); fos.close(); }catch(Exception e){ e.printStackTrace(); } } public static void reads(File file){ try{ FileInputStream fis = new FileInputStream(file); DataInputStream dis = new DataInputStream(fis); //使用read来读取数据时,不要写要读取的数据 ,读的数据要和写/ //的数据顺序一样 char c =dis.readChar(); float f1=dis.readFloat(); int i = dis.readInt(); System.out.println("完成"); System.out.println(c); System.out.println(f1); System.out.println(i); }catch(Exception e){ e.printStackTrace(); } } }
运行结果 完成 王 123.33 2222
分析:
在本类中我们先创建一个写的方法,并创建一个“读取_Data.doc',当我们使用wps打开的时候,里面是:"s婤雳"这表明我们不能直接看到我们写进去的东西,我们在创建一个读的方法,在开发软件中会返回给我们读取到的结果
5,使用java.io中的基础数据流来保存属性
package File0524; public class Date1 { private String name; private int age; public Date1(String name,int age){ this.name= name; this.age = age; } public void setName(String name){ this.name = name; } public void setAge(int age){ this.age = age; } public String getName(){ return name; } public int getAge(){ return age; } }
package File0524; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; /** *定义Date1Test来保存Data1中的数据 * @author Administrator * */ public class Date1Test { public static void main(String[] args) { Date1[] d1 ={ new Date1("王佳1",10), new Date1("王佳2",20), new Date1("王佳3",30)}; try{ File file = new File("F:\\file1\\Data_File.txt"); File file1 = new File("F:\\file1\\Data_File1.txt"); // FileOutputStream fos = new FileOutputStream(file); // DataOutputStream dos = new DataOutputStream(fos); DataOutputStream dos = new DataOutputStream(new FileOutputStream(file)); //使用for循环将读取到的数据一个一个输出 for(Date1 date1 : d1){ dos.writeUTF(date1.getName()); dos.writeInt(date1.getAge()); System.out.println("写出的数据:" +date1.getName()+date1.getAge()); } dos.flush(); dos.close(); // //创建字节输入流 // FileInputStream fis = new FileInputStream(file1); // //创建java基础数据操作输入流 // DataInputStream dis = new DataInputStream(fis) ; DataInputStream dis = new DataInputStream(new FileInputStream(file1)) ; //使用for循环将读取到的数据一个一个的读取出来,保存在d1的数组中 for(int i =0;i<d1.length;i++){ //读取UTF的字符串 //String name = dis.readUTF(); String name = dis.readUTF(); //读取int数据 int age = dis.readInt(); System.out.printf("%s\t%d%n",name,age); //d1[i] = new Date1(name,age); } dis.close(); //显示还原后的数据 //将读取到的文件进行遍历 // for(Date1 Date1:d1){ //// System.out.println("获取到了对象,对其进行全部的打印输出:" //// + Date1.getName(),Date1.getAge()); // // System.out.printf("%s\t%d%n",Date1.getName(),Date1.getAge()); // } }catch(Exception e){ e.printStackTrace(); } } }
运行结果: 写出的数据:王佳110 写出的数据:王佳220 写出的数据:王佳330 java.io.EOFException at java.io.DataInputStream.readUnsignedShort(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at File0524.Date1Test.main(Date1Test.java:48)
下一篇: 将时间转化为几天几时几分几秒的格式