我想做的是,加载一个文本文件,然后从每一行中获取值并将它们分配给程序中的变量。每两行,我将它们插入到LinkedHashMap中(成对)

缓冲读取器的问题是,我似乎只能做的是一次读取一行。

这是我当前的代码:

public static void receiver(String firstArg) {// Receives
                                                // Input
                                                // File
    String cipherText;
    String key;
    String inFile = new File(firstArg).getAbsolutePath();
    Path file = new File(inFile).toPath();

    // File in = new File(inFile);
    try (InputStream in = Files.newInputStream(file);
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(in))) {
        String line = null;

        while ((line = reader.readLine()) != null) {
            // System.out.println(line);
            String[] arrayLine = line.split("\n"); // here you are
                                                    // splitting
                                                    // with whitespace

            cipherText = arrayLine[0];
            // key = arrayLine[1];
            System.out.println(arrayLine[0] + " " + arrayLine[1]);

            cipherKeyPairs.put(arrayLine[0], arrayLine[1]);
        }
    } catch (IOException x) {
        System.err.println(x);
    }


问题是,它找不到arrayLine[1](出于明显的原因)。我需要它一次读取两行而数组不会超出范围。

任何想法如何执行此操作,这样我就可以一次将两行作为单独的值存储到我的LinkedHashMap中。

最佳答案

您可以通过每两行读取一次插入到列表中来解决此问题。
此代码的描述是:“粗体是正确的情况”


读取第一行(计数为0)

如果(secondLine为false)==>将行保存到CipherText变量中,则使secondLine = true
否则,如果(secondLine为true)==>添加到列表(CipherText,第1行),则将secondLine = false

读第二行(计数为1)

如果(secondLine为false)==>将行保存到CipherText变量中,则使secondLine = true
否则,如果(secondLine为true)==>添加到列表(CipherText,第1行),则将secondLine = false





String cipherText;
boolean secondLine = false;
String inFile = new File(firstArg).getAbsolutePath();
Path file = new File(inFile).toPath();

try {
    InputStream in = Files.newInputStream(file);
    BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {

    String line = null;

    while ((line = reader.readLine()) != null) {


        if (!secondLine) //first line reading
        {
            cipherText = line;
            secondLine = true;
        }
        else if (secondLine) //second line reading
        {
            cipherKeyPairs.put(cipherText, line);
            secondLine = false;
        }
    }
} catch (IOException x) {
    System.err.println(x);
}

07-27 14:38