我现在正在做一个项目,它需要我设置一个分布式网络模拟器,我让它从一个文件中获取输出,并使用缓冲读取器解析每一行,如下所示,但我现在想使用一个预定义的数组,并让我的bufferedReader从中获取输入。我已经在网上查找了一些解决方案,以帮助我将这个数组放到缓冲读取器中,但似乎没有一个有效。
在运行和终止代码时,我没有得到任何错误,但在某些时候似乎陷入了一个无尽的循环中,我假设它是使用数组的新的缓冲读取器段。这背后的想法是让这个过程比重写许多段来适应数组解析更简单,而不是通过将数组放在buffered Reader中来找到一种更简单的方法,但事实证明这很困难,我可能不得不求助于更改。我已经测试了数组是否被正确初始化,这不是问题所在,所以需要考虑的事情少了一件。
**Previous code:**
private void parseFile(String fileName) throws IOException {
System.out.println("Parsing Array");
Path path = Paths.get(fileName);
try (BufferedReader br = Files.newBufferedReader(path)) {
String line = null;
line = br.readLine(); // Skip first line
while ((line = br.readLine()) != null) {
parseLine(line);
}
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
}
}网上的建议是使用带有缓冲阅读器的输入流,但这似乎根本不起作用,因为它覆盖了数组,任何关于我可以用于缓冲阅读器部分的建议都将是很棒的。
上面的Array方法只是一个空的创建数组的方法,它是在方法之前调用的,所以我想数组应该是初始化的,如果有人可以看一下,可能会让我知道我哪里出了问题,如果没有,我很感谢你花时间阅读这篇文章,谢谢你的时间。
New Code Attempt:
//Creating array to parse.
private void createArray(){
myStringArray[0] = "Node_id Neighbours";
myStringArray[1] = "1 2 10";
myStringArray[2] = "2 3 1";
myStringArray[3] = "3 4 2";
myStringArray[4] = "4 5 3";
myStringArray[5] = "5 6 4";
myStringArray[6] = "6 7 5";
myStringArray[7] = "7 8 6";
myStringArray[8] = "8 9 7";
myStringArray[9] = "9 10 8";
myStringArray[10] = "10 1 9";
myStringArray[11] = "ELECT 1 2 3 4 5 6 7 8 9";
}
private void parseArray() throws IOException {
//InputStreamReader isr = new InputStreamReader(System.in);
System.out.println("Parsing Array");
// try (BufferedReader br = Files.newBufferedReader(path))
try (BufferedReader br = new BufferedReader(isr)) {
for(int i=0;i<12;i++)
{
String line = null;
line = br.readLine(); // Skip first line
while ((myStringArray[i] = br.readLine()) != null) {
parseLine(line);
}
}
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
}
}答:使用缓冲阅读器不能做到这一点。如果这对任何人有任何用处,我就像这样修复它。非常感谢@L.Spillner的解释和回答。
代码修复:
private void parseArray() throws IOException {
System.out.println("Parsing Array");
for(int i=1;i<12;i++) //First row ignored.
{
String line = null;
line = myStringArray[i];
//Begin parsing process of each entity.
parseLine(line);
}
}发布于 2018-03-22 17:20:24
让我们从这个问题的准确答案开始吧。
你不能直接把任何东西放入一个 BufferedReader 中。,特别是当它是像数组这样的数据结构的时候。
BufferedReader的目的是处理I/O操作,更准确地说是输入操作。根据javadoc的说法,BufferedReader接受Reader作为参数。Reader是一个抽象类,其中包含处理字符InputStreams的“工具”。
BufferedReader的readLine()方法的工作方式是:到达InputStream的任何字符都被存储在缓冲区中,直到\n (换行符/换行符)或\r (回车)到达,当这两个特殊字符中的一个出现时,缓冲区被解释为字符串并返回给调用。
发布于 2018-03-22 17:19:23
答案是你不能。谢谢大家的反馈,只是通过循环数组并将每一项分配到行来使其正常工作。
https://stackoverflow.com/questions/49424070
复制相似问题