硬编码文件路径和作为命令行参数传递之间的文件输出差异

问题描述 投票:0回答:2

因此,我正在编写程序,每次从文件中读取一个字符,然后对该字符进行操作,然后将输出写入另一个文件。

出于某种原因,当我对文件路径进行硬编码(这样做是为了避免在调试时不必继续键入文件)以及从命令行传递文件时,我得到了不同的结果。

当我从命令行传递文件时,有时会跳过输入行,因此,如果我有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();        
java io bufferedreader
2个回答
0
投票

我想我看到了问题。

您测试c以查看它是否为空格字符,如果是,则调用readLine()readLine()的作用是读取一个或多个字符,直到到达下一个行尾序列。

[c包含换行符怎么办?

  • 换行符是一个空白字符(查找它)
  • 所以您读了一行,从刚读的换行符后的第一个字符开始
  • 并丢弃该行。

所以您(不小心)扔掉了完整的输入行。

解决方案...我会留给你。

当我从命令行传递文件时,有时会跳过输入行...

我怀疑您在键入输入时发生了相同的行为……但是您没有注意到它。但是,平台特定的线路终止序列可能会发生某些情况。


0
投票

不幸的是,您提供的代码似乎与问题无关!获取文件的两种不同方式在哪里?

此外,请尝试使用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();
}

...将确保关闭所有文件。

© www.soinside.com 2019 - 2024. All rights reserved.