我知道这是用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 );
}
答案 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()方法中。它现在标记正确,并重置它应该的方式。