从JButton上的文件中读取

Sco*_*cos 0 java swing file readline

我的java项目有问题.我通过搜索和阅读完成了我的作业,似乎无法找到我需要的东西.我需要做的是每次单击一个按钮,从文本文件中读取一行并将其输入到文本字段.我认为,只要我对第一部分有所了解,后一部分就不会那么困难.我知道如何在点击时从整个文件中读取,但每次都是让我卡住的一行一行.

我正在使用这个位来查看每行的数据是否是我正在寻找的:

 private boolean validRecord( String line )
 {
    /** Local Variables **/

    boolean validRecord = true; // Assumes Good Data
    int     counter     = 0;

    for ( int i = 0; i < line; i++ )
    {
        if ( line.charAt( i ).isDigit )
           counter++;

        if ( !line.charAt( i ).isDigit )
           validRecord = false;
    }

    if ( counter != fieldArray.length )
       validRecord = false;

    return validRecord;
 }
Run Code Online (Sandbox Code Playgroud)

如果有人可以提供帮助,我会很感激它,我确信我会遗漏一些明显的东西,因为这是我第一次处理文件阅读.谢谢.为了进一步说明,我想在每次单击时读取第一行的第一行和下一行,直到文件一直被搜索完毕.

public void fileReader( String inputFile )
{
    /** Local Constants **/

    final String ERROR = "File Error!";

    /** Local Variables **/

    BufferedReader inStream = null;
    Scanner        in;
    String         line;

    if ( isReadableFile( inputFile ) )
    {
       try
       {
         in = new Scanner( new File( inputFile ) );

         line = in.next();

         while ( in.hasNextLine() )
         {
            line  = in.nextLine();
            int j = 0;

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

            else
               System.out.println( "Invalid Record" );
          }

          in.close();
        }

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

    else
       System.out.println( "File not readable" );
}


public void actionPerformed( ActionEvent e )
{
    if ( e.getSource()      == btnClear )
       clearTextFields();

    else if ( e.getSource() == btnExit )
       System.exit( 0 );

   else if ( e.getSource() == btnCheck )
   {
        testMagicSquare();
        jtaOutput.setLineWrap ( true );
    }

   else if ( e.getSource() == btnFileInput )
      fileReader( jtfFileInput.getText() );
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 5

这就是我的教授希望它完成的方式.

很公平.

  • 使用扫描仪对象,
  • 呼叫 if (myScanner.hasNextLine())
  • 如果是真的,请通过line = myScanner.nextLine().
  • 一定要关闭扫描对象,当你通过调用用它做close()检查,以确保它不为空.

编辑
我不能说我还没有理解你的代码,但是我担心你把所有的文件阅读代码全部放在一个地方while (scanner.hasNextLine()),我不认为这会有效.我想你将不得不......

  • 创建一个Scanner对象来读取File并确保它已在类级别声明.那就是创建一个私有类Scanner字段.
  • 在程序开始时使用扫描仪打开文件,可能在类的构造函数中.
  • 然后不要读它.直到按下按钮.
  • 在您的阅读按钮的actionPerformed方法中,检查扫描仪一次以查看它是否hasnextLine(),如果是,则nextLine()仅在其上调用一次.这里没有涉及循环.
  • 仅在hasNextLine()返回false 时关闭扫描仪.