如何在二进制文件中序列化2个列表的数组?

时间:2016-12-19 18:52:32

标签: java arraylist random fileoutputstream

我正在创建一个Java程序,它读取两个文本文件,从每个文件中随机选择10个单词,并将它们存储在两个字符串列表的数组中。到目前为止,我已经创建了以下代码,但是这只会读取单词,而不会存储它们。我还需要在二进制文件中序列化2个列表的数组。如何才能做到这一点?对此有所帮助将不胜感激!

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

import static java.nio.file.StandardOpenOption.CREATE;

public class RandomWordGenerator {
    public static void main(String[] args) throws IOException {
        Path outputFile = Paths.get("output.txt");
        ArrayList<String> randomWords1 = randomWordsFromFile("input1.txt", 10);
        ArrayList<String> randomWords2 = randomWordsFromFile("input2.txt", 10);
        OutputStream outputStream = new BufferedOutputStream(Files.newOutputStream(outputFile, CREATE));
        System.out.println(randomWords1);
        System.out.println(randomWords2);
        outputStream.flush();
        for (int i = 0; i < randomWords1.size(); i++) {
            outputStream.write(randomWords1.get(i).getBytes());
        }
        for (int i = 0; i < randomWords2.size(); i++) {
            outputStream.write(randomWords2.get(i).getBytes());
        }
        outputStream.close();
    }

    private static ArrayList<String> randomWordsFromFile(String fileName, int count) throws FileNotFoundException {
        Scanner scanner = new Scanner(new File(fileName));
        ArrayList<String> words = new ArrayList<>();
        while (scanner.hasNext()) {
            words.add(scanner.next());
        }
        return randomFromWords(words, count);
    }

    static private ArrayList<String> randomFromWords(ArrayList<String> words, int count) {
        ArrayList<String> randomWords = new ArrayList<>();
        for (int i = 0; i < count; ) {
            int random = new Random().nextInt(words.size());
            if (randomWords.add(words.get(random))) {
                i++;
            }
        }
        return randomWords;
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码应该读取两个文件,从每个文件中选择十个随机单词,并将每个文件中的十个单词存储到两个列表中。这样做是否正确?如果没有,则在继续进行之前修复所有错误。您可以在这里询问您无法解决的具体错误。请务必解释您的代码要执行的操作,以及它为防止它执行此操作而产生的错误。

一切正常后,继续下一阶段。二进制序列化是否符合您的要求?如果没有,那么我会使用UTF-8中的一个简单的CSV文件,它也是一个二进制文件(就像所有文件一样)。如果需要实际的序列化,请阅读Serialization上的Javadocs和教程。写一些代码,如果你不能让它工作,就回到这里。