我想做的是,加载一个文本文件,然后从每一行中获取值并将它们分配给程序中的变量。每两行,我将它们插入到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);
}