zoukankan      html  css  js  c++  java
  • 将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出

    三组数据如下:

    {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())!=''){
    3                 System.out.print("读出成功");
    4             }    

    一度想把char强制转换为String????终究发现行不通

    那用readUTF()方法,但是莫名其妙的有问题,我也不知道问题在哪儿,直到我看到DataOutputStream类的writeUTF方法,突然想到或许可以与其配对使用,而之前智障的我读取字符串时使用的是writeChars方法,从而导致读写时对文件的编码不一致.运行时总是乱码

  • 相关阅读:
    Gym 100553B Burrito King 无脑背包
    BestCoder Round #85 A B C
    poj 1687 Buggy Sat 简单计算几何
    HDU 1863 Kruskal求最小生成树
    记2016商大ACM省赛
    COMP9517 Week7 Tracking
    COMP9517 week7 Motion
    COMP9313 week7b Spark SQL
    COMP9313 Week 7 Product Quantization and K-Means Clustering
    COMP9517 lab3 image segementation
  • 原文地址:https://www.cnblogs.com/silenTJ/p/8012352.html
Copyright © 2011-2022 走看看