因此,我正在编写程序,每次从文件中读取一个字符,然后对该字符进行操作,然后将输出写入另一个文件。
出于某种原因,当我对文件路径进行硬编码(这样做是为了避免在调试时不必继续键入文件)以及从命令行传递文件时,我得到了不同的结果。
当我从命令行传递文件时,有时会跳过输入行,因此,如果我有10行的文件,我可能只会处理8行。
我感觉输入行的末尾是否有空格有关,但我似乎无法弄清楚。任何帮助将非常感激。
[另外,当我对文件路径进行硬编码时,我正在使用NetBeans,而当我使用命令行参数时,则是从终端运行程序。我已经在下面粘贴了I / O代码。
while( ( i = buffRead.read() ) != -1 )
{
try
{
char c = (char) i;
if ( Character.isWhitespace(c) )
{
if(converter.getStackSize() > 1)
{
converter.resetConverter();
throw new IncorrectNumOfOperandsException();
}
buffRead.readLine();
converter.resetConverter();
writeOut.println();
}
else
{
converter.register( c );
}
}
catch (InvalidCharException j)
{
writeOut.println("Invalid Character Entered\n");
buffRead.readLine();
}
catch (IncorrectNumOfOperatorsException k)
{
writeOut.println("Too Many Operators for Number of Operands\n");
buffRead.readLine();
}
catch ( IncorrectNumOfOperandsException m)
{
writeOut.println("Too Many Operands for Number of Operators\n");
buffRead.readLine();
}
}
buffRead.close();
writeOut.close();
我想我看到了问题。
您测试c
以查看它是否为空格字符,如果是,则调用readLine()
。 readLine()
的作用是读取一个或多个字符,直到到达下一个行尾序列。
[c
包含换行符怎么办?
所以您(不小心)扔掉了完整的输入行。
解决方案...我会留给你。
当我从命令行传递文件时,有时会跳过输入行...
我怀疑您在键入输入时发生了相同的行为……但是您没有注意到它。但是,平台特定的线路终止序列可能会发生某些情况。
不幸的是,您提供的代码似乎与问题无关!获取文件的两种不同方式在哪里?
此外,请尝试使用try-with-resources语句。像这样的东西:
try(final Reader rdr = new InputStreamReader(System.in);
final BufferedReader brd = new BufferedReader (rdr))
{
/*
* Resources declared above will be automatically closed.
*/
brd.readLine();
}
...将确保关闭所有文件。