0

我知道这是用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 );

}
4

3 回答 3

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()需要从 current 中删除else并将其放在函数的末尾,可能在last else之后。

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

通过上述更改成功测试了您的功能。

于 2013-05-20T01:41:42.173 回答
0

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

于 2013-05-21T04:01:58.850 回答
0

关闭流或阅读器后,您将无法重置它。让它打开。

于 2013-05-20T01:58:37.090 回答