在Java中搜索文本文件并返回数组

在Java中搜索文本文件并返回数组,java,main,bufferedreader,readline,Java,Main,Bufferedreader,Readline,我的编程类项目是创建一个程序(使用NetBeans),用户可以在其中输入并存储电影信息。他们可以在电影列表中搜索信息,如标题、演员、质量等。我有一个java文件,允许用户在文本字段中输入有关电影的信息,并将其保存到txt文件中 我遇到的问题是,每次用户搜索电影时,它都会返回一个空指针异常 以下是我的搜索代码部分: private void sbtnActionPerformed(java.awt.event.ActionEvent evt) {

我的编程类项目是创建一个程序(使用NetBeans),用户可以在其中输入并存储电影信息。他们可以在电影列表中搜索信息,如标题、演员、质量等。我有一个java文件,允许用户在文本字段中输入有关电影的信息,并将其保存到txt文件中

我遇到的问题是,每次用户搜索电影时,它都会返回一个空指针异常

以下是我的搜索代码部分:

private void sbtnActionPerformed(java.awt.event.ActionEvent evt) {                                     
    try{
        if(!mField.getText().equals("Search Movie Title")){
            if(sameTitle(mField.getText())!=null){
                display_Search_Info.main(info);
                dispose();
            }else{
                JOptionPane.showMessageDialog(null, "No Movie Info Found.", "Error", JOptionPane.WARNING_MESSAGE);
            }
        }
        if(!aField.getText().equals("Search Actor Name")){
            if(sameActor(aField.getText())!=null){
                display_Search_Info.main(info);
                dispose();
            }else{
                JOptionPane.showMessageDialog(null, "No Movie Info Found.", "Error", JOptionPane.WARNING_MESSAGE);
            }
        }
        if(!gBox.getSelectedItem().equals("Select Genre")){
            if(sameGenre(String.valueOf(gBox.getSelectedItem()))!=null){
                display_Search_Info.main(info);
                dispose();
            }else{
                JOptionPane.showMessageDialog(null, "No Movie Info Found.", "Error", JOptionPane.WARNING_MESSAGE);
            }
        }
        if(!lBox.getSelectedItem().equals("Select Location")){
            if(sameLocation(String.valueOf(lBox.getSelectedItem()))!=null){
                display_Search_Info.main(info);
                dispose();
            }else{
                JOptionPane.showMessageDialog(null, "No Movie Info Found.", "Error", JOptionPane.WARNING_MESSAGE);
            }
        }
        if(mField.getText().equals("Search Movie Title")&&aField.getText().equals("Search Actor Name")&&gBox.getSelectedItem().equals("Select Genre")&&lBox.getSelectedItem().equals("Select Location")){
            JOptionPane.showMessageDialog(null, "Please Enter Information About The Movie", "Error", JOptionPane.WARNING_MESSAGE);                
        }
    }catch(IOException e){
        System.out.println("Error Occured");
    }    
}                                    
public String[] sameTitle(String s) throws IOException{
    BufferedReader br=new BufferedReader(new FileReader("M:/NetBeans Projects/MovieList/src/MovieInfo.txt"));
    String line;
    info= new String[6];
    do{
        for(int i=0; i<6; i++){
            info[i]=br.readLine();
        }
    }while((line=br.readLine())!=null);

    if(info[0].contains(s)){
        return info;
    }else{
        return null;
    }

}
public String[] sameActor(String s) throws IOException{
    BufferedReader br=new BufferedReader(new FileReader("M:/NetBeans Projects/MovieList/src/MovieInfo.txt"));
    String line="";
    info= new String[6];
    while((line=br.readLine())!=null&&!info[1].contains(s)||!info[2].contains(s)){
        for(int i=0; i<6; i++){
            info[i]=br.readLine();
        }
    }
    if(info[1].contains(s)||info[2].contains(s)){
        return info;
    }else{
        return null;
    }
}
public String[] sameGenre (String s) throws IOException{
    BufferedReader br=new BufferedReader(new FileReader("M:/NetBeans Projects/MovieList/src/MovieInfo.txt"));
    String line="";
    info= new String[6];
    while((line=br.readLine())!=null&&!info[3].contains(s)){
        for(int i=0; i<6; i++){
            info[i]=br.readLine();
        }
    }
    if(info[3].contains(s)){
        return info;
    }else{
        return null;
    }
}
public String[] sameLocation (String s) throws IOException{
    BufferedReader br=new BufferedReader(new FileReader("M:/NetBeans Projects/MovieList/src/MovieInfo.txt"));
    String line="";
    info= new String[6];
    while((line=br.readLine())!=null&&!info[4].contains(s)){
        for(int i=0; i<6; i++){
            info[i]=br.readLine();
        }
    }
    if(info[4].contains(s)){
        return info;
    }else{
        return null;
    }
}
private void sbtnActionPerformed(java.awt.event.ActionEvent evt){
试一试{
如果(!mField.getText().equals(“搜索电影标题”)){
if(sameTitle(mField.getText())!=null){
显示搜索信息主(信息);
处置();
}否则{
JOptionPane.showMessageDialog(null,“未找到电影信息”,“错误”,JOptionPane.WARNING_消息);
}
}
如果(!aField.getText().equals(“搜索参与者名称”)){
if(sameActor(aField.getText())!=null){
显示搜索信息主(信息);
处置();
}否则{
JOptionPane.showMessageDialog(null,“未找到电影信息”,“错误”,JOptionPane.WARNING_消息);
}
}
如果(!gBox.getSelectedItem().equals(“选择流派”)){
if(sameGenre(String.valueOf(gBox.getSelectedItem())!=null){
显示搜索信息主(信息);
处置();
}否则{
JOptionPane.showMessageDialog(null,“未找到电影信息”,“错误”,JOptionPane.WARNING_消息);
}
}
如果(!lBox.getSelectedItem().equals(“选择位置”)){
if(sameLocation(String.valueOf(lBox.getSelectedItem())!=null){
显示搜索信息主(信息);
处置();
}否则{
JOptionPane.showMessageDialog(null,“未找到电影信息”,“错误”,JOptionPane.WARNING_消息);
}
}
if(mField.getText().equals(“搜索电影标题”)&&aField.getText().equals(“搜索演员姓名”)&&gBox.getSelectedItem().equals(“选择流派”)&&lBox.getSelectedItem().equals(“选择位置”)){
JOptionPane.showMessageDialog(null,“请输入有关电影的信息”,“错误”,JOptionPane.WARNING_消息);
}
}捕获(IOE异常){
System.out.println(“发生错误”);
}    
}                                    
公共字符串[]sameTitle(字符串s)引发IOException{
BufferedReader br=新的BufferedReader(新文件阅读器(“M:/NetBeans Projects/MovieList/src/MovieInfo.txt”);
弦线;
info=新字符串[6];
做{

对于(int i=0;i您所有的方法似乎都具有“相同”的结构,我建议您使用列表来存储匹配行。也就是说,我认为您应该尝试类似的方法-

public String[] sameLocation(String s) throws IOException {
    BufferedReader br = new BufferedReader(new FileReader(
            "M:/NetBeans Projects/MovieList/src/MovieInfo.txt"));
    String line = "";
    List<String> al = new ArrayList<String>();
    if (s != null) {
        while ((line = br.readLine()) != null) {
            for (int i = 0; i < 6; i++) { // <-- Why 6?
                al.add(line);
            }
        }
    }
    if (al.size() > 0) {
        String [] out = new String[al.size()];
        return al.toArray(out);
    } else {
        return null;
    }
}
public String[]sameLocation(字符串s)引发IOException{
BufferedReader br=新的BufferedReader(新文件读取器(
“M:/netbeansprojects/MovieList/src/MovieInfo.txt”);
字符串行=”;
List al=新的ArrayList();
如果(s!=null){
而((line=br.readLine())!=null){
对于(int i=0;i<6;i++){//0){
String[]out=新字符串[al.size()];
返回al.toArray(输出);
}否则{
返回null;
}
}

还包括异常堆栈跟踪。如果没有堆栈跟踪,则无法判断,但这里有一些一般性建议:如果要将硬编码字符串与变量字符串进行比较,请将硬编码字符串放在第一位,即:
“搜索电影标题”。等于(mField.getText())
如果变量/字段未正确初始化,则另一种方法可能会导致NPE。我采用了另一种方法,因为NetBeans总是说先将其作为文本字段更符合逻辑。好的,现在一切都正常了。非常感谢!非常感谢。@user3177878如果它正常工作,请给出答案。