解析后重置Java BufferedReader

时间:2013-05-20 01:16:29

标签: java bufferedreader

我知道这是用mark()和reset()完成的。但是我对阅读文件非常新,而且我的代码不起作用,我知道我的错误可能非常明显而且很愚蠢我无法理解。我已经尝试过移动它只是没有解决。我的代码的目标是在第一次找到空行时弹出一个joption窗格(我还没有得到它)​​,然后返回到文件的顶部。这可能是一个愚蠢的问题,但如果有人可以帮助我,我真的很感激。顺便说一下,问题是在读取最后一行之后抛出IOException(每次单击一个jbutton时都会执行此方法)。

public static void fileReader( String inputFile , JTextField array[] )
{
    /** Local Constants **/

    final String NOT_READABLE = "File not readable!!";
    final String IO_ERROR     = "Input/Output Error!!";

    /** Local Variables **/

    String line;

    if ( inStream == null )
    {
        fileOpen( inputFile );
    }

    if ( isReadableFile( inputFile ) )
    {
       try
       { 

         line = inStream.readLine();
         inStream.mark( 64 );

         if ( line != null )
         {
            int j = 0;

            for ( int i = 0; i < line.length(); i++ )
            {
                if ( Character.isDigit( line.charAt( i ) ) )
                {
                    if ( j < array.length )
                       array[ j ].setText( line.charAt( i ) +
                                           MagicSquareGUI.BLANK );

                    j++;
                }
            }
         }

         else
         {
            inStream.close();
            inStream.reset();
         }
     }

     catch ( IOException e )
     {
        System.out.println( IO_ERROR );
     }

     catch ( Exception e )
     {
        System.out.println( ERROR );
     }
  }

  else
     System.out.println( NOT_READABLE );

}

3 个答案:

答案 0 :(得分:1)

尝试重置IOException后,您收到此错误stream

<强>可能性:

1)可能不支持您在reset上呼叫的type of stream class。所有类型的流都不支持Reset

2)您已经读过字节了。在这种情况下,Reset将失败。仅当字节的读取次数不超过 标记 限制时,才支持Reset。如果您已经读取了字节,请检查line变量及其长度。

答案已更新:

1)在开始阅读之前,您需要mark。它应该是这样的:

     inStream.mark( 64 );
     line = inStream.readLine();

2)除非您已完成,否则请勿关闭。关闭stream然后使用Reset是错误的。

此行inStream.close()需要从当前else中删除,并将放在该函数的最后中,可能是在 last {{ 1}}。

3)我想要指出的另一件事是你只是在文本文件中阅读第一行。您的流阅读器不在循环中。

我使用上述更改成功测试了您的功能。

答案 1 :(得分:0)

关闭后无法重置流或Reader。保持开放状态。

答案 2 :(得分:0)

问题解决了。我将mark()移动到上面方法中调用的fileOpen()方法中。它现在标记正确,并重置它应该的方式。