使用Java将.dat文件读入数组

时间:2014-04-17 19:30:55

标签: java arrays datainputstream dataoutputstream

我写的代码有两个类:writeInts和readInts。我写了writeInts来随机生成0到1000之间的100个数字,并将它们输出到data.dat文件。

readInts应该打开一个DataInputStream对象并读入" raw" data.dat文件中的数据,并将100个整数存储在一个数组中。我的问题是我似乎无法正确读取数据。任何有关这方面的帮助将不胜感激。谢谢!

writeInts:

import java.io.*;


public class WriteInts {
    public static void main(String[] args) throws IOException {
        DataOutputStream output = new DataOutputStream(new FileOutputStream("data.dat"));
        int num = 0 + (int)(Math.random());
        int[] counts = new int[100];
        for(int i=0; i<100; i++) {
            output.writeInt(num);
            counts[i] += num;

            System.out.println(num);
        }
        output.close();
    }

}

readInts:

import java.io.*;
import java.util.*;

public class ReadInts {
    public static void main(String[] args) throws IOException {

        // call the file to read
        Scanner scanner = new Scanner(new File("data.dat"));
        int[] data = new int[100];
        int i = 0;
        while (scanner.hasNextInt()) {
            data[i++] = scanner.nextInt();

            System.out.println(data[i]);

            scanner.close();
        }

    }

}

3 个答案:

答案 0 :(得分:3)

如果要编写二进制数据,请使用 DataInputStream / DataOutputStream 扫描程序用于文本数据,您无法将其混合。

WriteInts:

import java.io.*;

public class WriteInts {
    public static void main(String[] args) throws IOException {
        DataOutputStream output = new DataOutputStream(new FileOutputStream(
                "data.dat"));

        for (int i = 0; i < 100; i++) {
            output.writeInt(i);
            System.out.println(i);
        }

        output.close();
    }

}

ReadInts:

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class ReadInts {
    public static void main(String[] args) throws IOException {
        DataInputStream input = new DataInputStream(new FileInputStream(
                "data.dat"));

        while (input.available() > 0) {
            int x = input.readInt();
            System.out.println(x);
        }

        input.close();
    }

}

答案 1 :(得分:1)

更多。如果要生成0到1000(包括两者)范围内的随机数,请使用以下语句:

int rndNum = (int) (Math.random() * 1001);

它的工作原理如下: Math.random()生成一个从0到1(不包括)的双精度型,然后您应该映射到整数范围和楼层。如果您希望最大值为1000,则将其乘以1001 - 排除1001本身。

是的,就像那样:

import java.io.*;

public class WriteRandomInts {
    public static void main(String[] args) throws IOException {
        DataOutputStream output = new DataOutputStream(new FileOutputStream(
                "data.dat"));

        for (int i = 0; i < 100; i++) {
            int rndNum = (int) (Math.random() * 1001);
            output.writeInt(rndNum);
            System.out.println(rndNum);
        }

        output.close();
    }
}

答案 2 :(得分:0)

我建议您放弃DataInputStreamDataOutputStream

使用FileWriter将一个整数写入一行,并使用BufferedReader读取它们,每行一个。这是一个简单的问题。