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 から削除して、関数の最後、おそらくlast のelse後に配置する必要があります。 else

3)もう 1 つ指摘しておきたいのは、テキスト ファイルの最初の行しか読んでいないということです。ストリーム リーダーがループしていません。

上記の変更により、機能を正常にテストしました。

于 2013-05-20T01:41:42.173 に答える
0

問題が解決しました。mark() を、上記のメソッド内で呼び出される fileOpen() メソッドに移動しました。適切にマークされ、本来の方法でリセットされるようになりました。

于 2013-05-21T04:01:58.850 に答える
0

ストリームまたはリーダーを閉じた後はリセットできません。開いたままにします。

于 2013-05-20T01:58:37.090 に答える