如何使用 java 获取其中包含特定内容的文件名?

How to get file name having particular content in it using java?

我在这里尝试读取一个包含 .sql 文件的文件夹,我将这些文件放在一个数组中,现在我的要求是读取每个文件并找到特定的单词,如 join if join is present在文件 return filename 或 else discard 中,有人可以帮我解决这个问题..

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

public class Filter {

    public static List<String> textFiles(String directory) {
        List<String> textFiles = new ArrayList<String>();
        File dir = new File(directory);
        for (File file : dir.listFiles()) {
            if (file.getName().endsWith((".sql"))) {
                textFiles.add(file.getName());
            }
        }
        return textFiles;

    }

    public static void getfilename(String directory) throws IOException {
        List<String> textFiles = textFiles(directory);
        for (String string : textFiles) {
            Path path = Paths.get(string);
            try (Stream<String> streamOfLines = Files.lines(path)) {
                Optional<String> line = streamOfLines.filter(l -> l.contains("join")).findFirst();
                if (line.isPresent()) {
                    System.out.println(path.getFileName());
                } else
                    System.out.println("Not found");
            } catch (Exception e) {
            }

        }
    }

    public static void main(String[] args) throws IOException {
        getfilename("/home/niteshb/wave1-master/wave1/sql/scripts");
    }
}

您可以像belwo一样在文件中搜索单词,传递文件

路径
try(Stream <String> streamOfLines = Files.lines(path)) {
  Optional <String> line = streamOfLines.filter(l -> 
                       l.contains(searchTerm))
                       .findFirst();
  if(line.isPresent()){
   System.out.println(line.get()); // you can add return true or false   
  }else
   System.out.println("Not found");
}catch(Exception e) {}

}

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

public class Filter {

    public static List<String> textFiles(String directory) {
        List<String> textFiles = new ArrayList<String>();
        File dir = new File(directory);
        for (File file : dir.listFiles()) {
            if (file.getName().endsWith((".sql"))) {
                textFiles.add(file.getAbsolutePath());
            }
        }
        System.out.println(textFiles.size());
        return textFiles;

    }

    public static String getfilename(String directory) throws IOException {
        List<String> textFiles = textFiles(directory);
        for (String string : textFiles) {
            Path path = Paths.get(string);
            try (Stream<String> streamOfLines = Files.lines(path)) {
                Optional<String> line = streamOfLines.filter(l -> l.contains("join")).findFirst();
                if (line.isPresent()) {
                    System.out.println(path.getFileName());
                } else
                    System.out.println("");
            } catch (Exception e) {
            }
        }
        return directory;
    }

    public static void main(String[] args) throws IOException {
        getfilename("/home/wave1-master/wave1/sql/");
    }
}