三组数据如下:
{19.99 , 9.99 , 15.99 , 3.99 , 4.99}
{12 , 8 , 13 ,29 ,50}
{"Java T-shirt" , "Java Mug" , "Duke Juggling Dolls" , "Java Pin" , "Java Key Chain"}
主要考查难点就是题目限制了只能用这两个类.
由于数据是三个不同类型的数组,而DataInputStream的读取方法都一次只能读取一个,像这种数组就得另想办法.
1 import java.io.DataInputStream; 2 import java.io.DataOutputStream; 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 /*将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出*/ 8 public class Test3_2 { 9 public static void main(String[] args) throws IOException{ 10 File f= new File("d:\\test.txt"); 11 FileOutputStream fos=new FileOutputStream(f); 12 DataOutputStream dos=new DataOutputStream(fos); 13 FileInputStream fis=new FileInputStream(f); 14 DataInputStream dis=new DataInputStream(fis); 15 double[] d={19.99,9.99,15.99,3.99,4.99}; 16 int[] in={12,8,13,29,50}; 17 String[] s={"Java T-shirt","Java Mug","Duke Juggling Dolls","Java Pin","Java Key Chain"}; 18 19 double d1[]=new double[5]; 20 int i1[]=new int[5]; 21 String s1[]=new String[5];//用于显示到控制台时控制输出 22 23 for(int i=0;i<5;i++){ 24 dos.writeDouble(d[i]); 25 dos.writeInt(in[i]); 26 dos.writeUTF(s[i]); 27 }//写入到文件 28 fos.close(); 29 dos.close();//关闭流 30 for(int i=0;i<5;i++){ 31 d1[i]=dis.readDouble(); 32 i1[i]=dis.readInt(); 33 s1[i]=dis.readUTF(); 34 }//从文件中读取,因为DataInputStream只有这种方法,依次只能读一个,所以依次存放到数组中 35 for(int i=0;i<5;i++) 36 System.out.print(d1[i]+" "); 37 System.out.println(); 38 for(int i=0;i<5;i++) 39 System.out.print(i1[i]+" "); 40 System.out.println(); 41 for(int i=0;i<5;i++) 42 System.out.print(s1[i]+" "); 43 System.out.println();//控制输出格式 44 45 } 46 }
可能是文件写入那一部分让我形成了惯性思维.因为它是以数组依次循环读入,所以我希望最好可以以数组的形式依次循环读出.
而如上所述,在题目所限制的类中没有这种方法.
既然只有一次只能读一个的方法,所以我想它每读取一个,我就把它放到数组中再print出来.
另外,字符串数组的读取,遇到了麻烦,我百度了一个方法,如下:
1 char c; 2 while((c=inDat.readChar())!='\0'){ 3 System.out.print("读出成功"); 4 }
一度想把char强制转换为String????终究发现行不通
那用readUTF()方法,但是莫名其妙的有问题,我也不知道问题在哪儿,直到我看到DataOutputStream类的writeUTF方法,突然想到或许可以与其配对使用,而之前智障的我读取字符串时使用的是writeChars方法,从而导致读写时对文件的编码不一致.运行时总是乱码