0

ユーザーにファイル拡張子の指定を求めるプログラムを作成しようとしています。次に、その拡張子を持つ使用可能なすべてのファイルをtextarea. 以下のプログラムを作りました。ただし、コンパイラはendsWith()ステートメントにエラーを表示し、. なしでプログラムを実行すると、最初のファイル名のみが出力されますendsWith()

問題を特定するための助けをいただければ幸いです。前もって感謝します。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class search extends Thread implements ActionListener
{
JFrame f;
JButton bop,bser;
JTextField tf,text;
JTextArea ta;
JLabel lab,lab1;
String str;
JScrollPane scrol;
File fl;

search()
{
    f=new JFrame("Search box");
    f.setLayout(null);
    f.setSize(820,700);

    bop=new JButton("Open");
    bop.setBounds(50,600,180,30);
    bop.addActionListener(this);
    f.add(bop);

    lab=new JLabel("Extension");
    lab.setBounds(340,570,180,30);
    f.add(lab);


    bser=new JButton("Search");
    bser.setBounds(510,600,180,30);
    bser.addActionListener(this);
    f.add(bser);    

    text=new JTextField();
    text.setBounds(280,600,180,30);
    text.addActionListener(this);
    text.setHorizontalAlignment(JTextField.CENTER);
    f.add(text);

    tf=new JTextField();
    tf.setBounds(25,50,750,40);
    tf.setFont(new Font("Lucida Console",Font.BOLD,20));
    tf.setHorizontalAlignment(JTextField.CENTER);
    f.add(tf);

    ta=new JTextArea();
    scrol=new JScrollPane(ta);
    //JScrollPane.setPreferredSize(750,450);
    scrol.setBounds(25,100,750,450);

    f.add(scrol);



    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

public void actionPerformed(ActionEvent ae)
{
    if(ae.getActionCommand().equals("Open"))
    {
        FileDialog fd=new FileDialog(f,"Open Box",FileDialog.LOAD);
        fd.setSize(300,300);
        fd.setVisible(true);
        str=fd.getDirectory();
        tf.setText(str);                    
    }

    if(ae.getActionCommand().equals("Search"))
    {
        fl=new File(str);
        File[] flist=fl.listFiles();

        for (int i=0;i<flist.length;i++)
        {
            String newline = System.getProperty("line.separator");
            String nm=text.getText();
            if(flist[i].endsWith(nm))
            {
                if(flist[i].isFile())
                {
                    ta.setText(flist[i].getName()+newline);
                }       
            }
        }               
    }
}   

    public static void main(String args[])
    {
        new search();
    }

}

コンパイラはエラーを出していません。プログラムを実行してディレクトリパスを入力すると、検索を押すとすぐに、テキストエリアにファイル名が1つだけ表示されます...テキストフィールドに何も入力しなくても、条件が満たされない場合も同じことが起こります。

4

2 に答える 2

3

はありませんFile.endsWith()。ファイルの名前を取得する必要があります。

flist[i].getName().endsWith(nm)

念のため、(ディレクトリではなく) ファイルであることを確認することもできます。

于 2013-01-11T19:46:08.603 に答える
1

file.getName()。endsWith(suffix);と言う必要があります。

また、最初に[開く]を押さずに[検索]を押すと、「str」が定義されていないことに気付きました。ここでnullポインタ例外が発生します。あなたはそれをチェックしたいかもしれません。

編集 **

次のコードを試してください。動作するように変更しました。ただし、コードの記述方法に欠陥があり、その結果、欠陥が発生します。あなたはそれを見るでしょう私は確信しています。その欠陥を修正することはあなたにとってそれほど難しいことではないはずです。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Test extends Thread implements ActionListener
{
  JFrame f;

  JButton bop, bser;

  JTextField tf, text;

  JTextArea ta;

  JLabel lab, lab1;

  String str;

  JScrollPane scrol;

  File fl;

  Test()
{
    f = new JFrame( "Search box" );
    f.setLayout( null );
    f.setSize( 820, 700 );

    bop = new JButton( "Open" );
    bop.setBounds( 50, 600, 180, 30 );
    bop.addActionListener( this );
    f.add( bop );

    lab = new JLabel( "Extension" );
    lab.setBounds( 340, 570, 180, 30 );
    f.add( lab );


    bser = new JButton( "Search" );
    bser.setBounds( 510, 600, 180, 30 );
    bser.addActionListener( this );
    bser.setEnabled( false );
    f.add( bser );

    text = new JTextField();
    text.setBounds( 280, 600, 180, 30 );
    text.addActionListener( this );
    text.setHorizontalAlignment( JTextField.CENTER );
    f.add( text );

    tf = new JTextField();
    tf.setBounds( 25, 50, 750, 40 );
    tf.setFont( new Font( "Lucida Console", Font.BOLD, 20 ) );
    tf.setHorizontalAlignment( JTextField.CENTER );
    f.add( tf );

    ta = new JTextArea();
    scrol = new JScrollPane( ta );
    //JScrollPane.setPreferredSize(750,450);
    scrol.setBounds( 25, 100, 750, 450 );

    f.add( scrol );

    f.setVisible( true );
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );


  }

  public void actionPerformed( ActionEvent ae )
  {
    if ( ae.getActionCommand().equals( "Open" ) )
    {
      FileDialog fd = new FileDialog( f, "Open Box", FileDialog.LOAD );
      fd.setSize( 300, 300 );
      fd.setVisible( true );
      str = fd.getDirectory();

      if ( str != null && !str.trim().equals( "" ) )
      {
        tf.setText( str );

        // Enable the search button
        bser.setEnabled( true );
      }
      else
      {
        bser.setEnabled( false );
      }
    }

    if ( ae.getActionCommand().equals( "Search" ) )
    {
      fl = new File( str );
      File[] flist = fl.listFiles();

      for ( int i = 0; i < flist.length; i++ )
      {
        String newline = System.getProperty( "line.separator" );
        String nm = text.getText();
        if ( flist[i].getName().toLowerCase().endsWith( nm.toLowerCase() ) )
        {
          if ( flist[i].isFile() )
          {
            ta.setText( flist[i].getName() + newline );
          }
        }
      }
    }
  }

  public static void main( String args[] )
  {
    new Test();
  }
}
于 2013-01-11T19:49:57.850 に答える