使用arraylist读取.txt文件时如何忽略主文件夹中的某些文件

how to Ignore certain files from main folder when reading .txt file using arraylist

我有一个主文件夹 (config) 和一个名为 ignore.txt 的文本文件。我在 ignore.txt 文件的主文件夹中提到了几个要忽略的文件。我需要一些帮助,如何调用 ignore.txt 文件来执行和忽略主文件夹 (config) 中的文件。

public class filetext {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("/path to /Configs");
        ArrayList<File> fileList = new ArrayList<File>(Arrays.asList(file.listFiles()));
        
        System.out.println(fileList);
        
        File ignorefile = new File("/path to /ignore.txt");
        Scanner sc = new Scanner(ignorefile); 
        ArrayList<List> ignorelist = new ArrayList<List>();

        System.out.println(ignorefile);
        
        if(ignorelist.contains(file)); 
        fileList.remove(file);
        System.out.println(ignorelist);
        }

据我了解,您想从文件列表中删除“忽略的文件”。

要从您的文件列表中删除加载的“忽略的名称”,您可以将代码编辑成类似这样的内容,尽管这不是一种有效的方法:

public static void main(String[] args) throws FileNotFoundException {
        File file = new File("path of my main folder");
        ArrayList<File> fileList = new ArrayList<File(Arrays.asList(file.listFiles()));
        
        File ignoreFile = new File("path to /ignore.txt");
        Scanner sc = new Scanner(ignorefile); 
        ArrayList<String> listOfLines = new ArrayList<>();
        while (sc.hasNextLine()) 
            listOfLines.add(scanner.nextLine());
        
        for(File f : fileList){
           if(listOfLines.contains(f.getFileName())
              fileList.remove(f);
        }

        // print the fileList again
      } 

此版本使用 NIO 和流。

public static void main(String[] args) throws IOException {
    Path dir        = Path.of(args[0]);
    Path ignoreFile = Path.of(args[1]);

    HashSet<Path> ignore = new HashSet<Path>();
    ArrayList<Path> fileList = new ArrayList<Path>();

    try(Stream<String> stream = Files.lines(ignoreFile)) {
        stream.map(Path::of).forEach(ignore::add);
    }
    try(Stream<Path> stream = Files.list(dir)) {
        stream.filter(p -> !ignore.contains(p) && !ignore.contains(p.getFileName()))
              .forEach(fileList::add);
    }
    System.out.println("Files#"+fileList.size()+' '+fileList);
  }