我正在尝试制作一个要求用户指定文件扩展名的程序。然后,它在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();
    }

}


编译器没有给出错误。它只是当我运行该程序...并输入目录路径时,按一下搜索后,textarea中只会显示一个文件名...即使我不在textfield中输入任何内容,如果不满足条件,那么也会发生同样的事情。

最佳答案

没有File.endsWith(),您需要获取文件名:

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


您可能还需要确保它是一个文件(而不是目录),以防万一。

09-05 18:29
查看更多