我正在研究一个项目,这需要我设置一个分布式网络模拟器,我让它从文件中获取输出并使用缓冲读取器解析每一行,如下所示,但我我想现在使用一个预定义的数组并让我的bufferedReader从中获取输入,而不是我在线查找了一些解决方案,以帮助我将这个数组放入缓冲的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方法只是创建在方法之前调用的数组的void,所以数组应该初始化我假设,如果任何人都可以查看并且可能让我知道我哪里出错了会出现问题如果不是,那就太棒了我感谢您的时间阅读本文,感谢您的时间。
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);
}
}
答案 0 :(得分:1)
让我们以问题的精确答案开始吧。
你不能直接将任何内容放入BufferedReader
。特别是当它是某种数据结构时,如数组。
BufferedReader
的目的是处理I / O操作,输入操作更精确。根据{{3}},BufferedReader
将Reader
作为参数。 Reader
是一个抽象类,包含处理字符InputStreams
的“工具”。
BufferedReader
的{{1}}方法的工作方式是:到达readLine()
的任何字符都会存储在缓冲区中,直到InputStream
(新行/换行)或\n
(回车)到达。当这两个特殊字符中的一个出现时,缓冲区被解释为String并返回到调用。
答案 1 :(得分:0)
答案是你不能。感谢大家的反馈,让它通过循环遍历数组并将每个项目分配到行。