在 Java 中将 .dat 文件读入数组

问题描述 投票:0回答:4

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

readInts 应该打开一个 DataInputStream 对象并从 data.dat 文件中读取“原始”数据并将 100 个整数存储在数组中。我的问题是我似乎无法正确读取数据。任何对此的帮助将不胜感激。谢谢!

写入整数:

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();
    }

}

读取整数:

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();
        }

    }

}
java arrays datainputstream dataoutputstream
4个回答
4
投票

如果要写入二进制数据,请使用DataInputStream/DataOutputStream扫描仪用于文本数据,不能混合使用。

写入整数:

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();
    }

}

读取整数:

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
投票

更多。如果要生成 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();
    }
}

0
投票

我建议您放弃

DataInputStream
DataOutputStream

使用

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


0
投票

W 厘×÷„fˆ ð ,8›Í$̺–ä®+þ Ð×9 exŽà‚ 萨…XÓ³ âöpò7N¹ëÀrOÉÀ‘ cø™ª-{÷jé矒ЊÑ6´XËEëAi½½›¿: …r/-Îe[ÜÆÚÊýàÔ2aFN>Ø>叼Îvl7“¿ÁúРjgÎÓ€ª&ä¥Çpv™,3Ð@h6¥́¶%ñökÛnr=G¡V¶ý†ÅÆ2P*&…1I-ö;R

•C.
,üs•äÓ‡-{žä†ÉÀÚ"Z„,ü¿r°%ªSÈ ìK~B›½zïÔ}ݲ†f—³á³¶»c-pÌa ÇË $_Q³Ç V9?ôÁNž^́,i© L&l3Á/ã'¥ø£Q4YíH3Ç †o¥Íc̶̶jÑÝF'́xËC%Ë•Q²m ÆÎâ7òçˆe à佝rª2äg>: ý,±?HçÿíZ^Dþâ0“Œ ™%¯+ ÎÜLŒàd u·G HØ€r¤Î„ßÞW²=�gqbv-c�&Òš½rëTÁ„€{§+9É[Íô°ù)�{!j8 ùãRgÔ$}º >Ør°sÕ1á§Ôh“Õ©$¥6ÂsV´Ô— ê¿/툊 9Üì^œ[”Þ1— ®t Ô lÊ´ñ3ÙŒö Í{®uÛ?2-XÙ⁄°Y!l7±ô9·CCΰQJˆ4O (Z´f…yÈŽòÓ!yÚNÔóåG ãU·‡mõ_Ó™Þá7%m- úì4õ¸÷ÅuI~œªÑJØ"¸¼Ÿ|ú²ï)Z|dzMõsÐaÙ, D §6®P¡Œ'Øýâ뵺Mû+(Þ/‰‘ÈNGágˆÚKËvR¤”ä ě”Ñâ²Ý„ÅÔ?́Ñ"
˜SNà°«âPù®ÔbF ‘áö‚ÿ‡»€ø'™Ðu<­ø€Z[ ò-s”x’ɵ›žõw¿/ú¬¥~aˆ<TŸªòbõÑÀïõrý^pë7½ÔO˜¼1ƒ-Še(ú)lXǢŲæçê3$”=RA,Yœ’Þ”ªÎèësœ)ˆ„‹!Þ‡Ðõð8_úËKÂßà}J0© _¥j“lÂ%nÑ{x] šPZ3ŽòÛ  >#•ÁÓ×›è›Ë]Šì—¤·aœK6ÌŒÂÂ%ža·#    dŽÌx-ìÑ 2ôéÜà6}ØnašÈŠÄC]ûàᤠ€¹á 
Aì•7€„äò_²⁄ušßôc BeÇ›Qò<[ár‰A³ÛcQ¾¿ B3©ÈLoH¶’¨ßpÀuqumß´,%hŠ#ƒ$!wÃö ~×a†…ßYò_à¬ÔÏç§B|²‡nM0ü«6c€
LsåĦnž#%œDáú]Š–0qŸâ[ÒÇ1]¬"ÙH2Þ;bpÛíý‰Ó·  “´/ æäºý8(ÈίŠ1v™
´«›-~hÑ6´Ÿ'´Y¥E=“§hñ6'þÎ

© www.soinside.com 2019 - 2024. All rights reserved.