0

我的 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;
 }

如果有人可以提供帮助,我将不胜感激,我确信我遗漏了一些明显的东西,因为这是我第一次处理从文件中读取的问题。谢谢。为了进一步澄清,我想在第一次单击时阅读第一行,每次单击时都阅读下一行,直到文件一直被搜索到为止。

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() );
4

2 回答 2

5

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

很公平。

  • 使用 Scanner 对象,
  • 称呼if (myScanner.hasNextLine())
  • 如果属实,请通过line = myScanner.nextLine().
  • 完成后请务必关闭该 Scanner 对象,方法是在检查以确保它不为空close()调用它。

编辑
我不能说我还理解您的代码,但我担心您将所有文件读取代码都放在 a 中while (scanner.hasNextLine()),而且我认为这不会起作用。我认为你将不得不...

  • 创建一个用于读取文件的 Scanner 对象,并确保它已在类级别上声明。那就是创建一个私有类 Scanner 字段。
  • 当你开始你的程序时,用你的扫描仪打开文件,也许在类的构造函数中。
  • 然后不要从中读取。直到按下按钮。
  • 在您的阅读按钮的 actionPerformed 方法中,检查 Scanner一次以查看它是否存在,如果是,则仅对其hasnextLine()调用一次。这里不涉及while循环。nextLine()
  • hasNextLine()仅在返回 false时关闭 Scanner 。
于 2013-05-18T01:20:36.017 回答
0

I did a total switch and tried something else. With scanner I wasn't reading things into the textfields with any success. I decided just for the heck of it to switch to BufferedReader and that worked on the first try. As for dealing with getting line to line, I made bufferedreader a class variable and made another button to open the file, and the original to check each line on click.

That solved the problem of instantiating/opening the file on each click.

于 2013-05-19T16:50:15.010 回答