Как читать входной текстовый файл в Java без необходимости каждый раз менять имя файла - PullRequest
0 голосов
/ 16 июня 2020

У меня около 10 входных текстовых файлов, каждый из которых имеет параметры видео. Мне нужно запустить все 10 входных файлов и сравнить результаты. Есть ли способ запустить программу без необходимости каждый раз менять имя входного файла в пути?

public static void main(String[] args) throws IOException {

    File config = new File("C:\\Users\\Dell\\Documents\\DataProcessing\\src\\config6.txt");

    try {
        BufferedReader br = new BufferedReader(new FileReader(config));
        String st;
        while ((st = br.readLine()) != null) {
            String s[] = st.split("\\r?\\n");
            for (int i = 0; i < s.length; i++) {
                arrList.add(s[i]);
            }
        }
        br.close();
    }
    catch (Exception e) {
    }
}

Мне нужно каждый раз менять имя файла (как показано выше, config6.txt) на config4, config5 .txt для запуска других входных файлов. Есть ли лучший и эффективный способ сделать это?

Ответы [ 4 ]

0 голосов
/ 16 июня 2020

Вы можете поместить все пути в массив, а затем перемещаться по массиву, как показано ниже:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

class Main {
    public static void main(String[] args) {    
        List<String> arrList = new ArrayList<String>();

        // Array of file path strings
        String[] paths = { "D:\\somedir\\abc.txt",
                "C:\\Users\\Dell\\Documents\\DataProcessing\\src\\config6.txt",
                "C:\\dir1\\dir2\\xyz.txt" };

        // Iterate paths[]
        for (String path : paths) {
            File config = new File(path);
            try {
                BufferedReader br = new BufferedReader(new FileReader(config));
                String st;
                while ((st = br.readLine()) != null) {
                    String s[] = st.split("\\r?\\n");
                    for (int i = 0; i < s.length; i++) {
                        arrList.add(s[i]);
                    }
                }
                br.close();
            } catch (Exception e) {
            }
        }
    }
}
0 голосов
/ 16 июня 2020
List<Integer> replaceNumbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
String filePath = "C:\\Users\\Dell\\Documents\\DataProcessing\\src\\config0.txt";

for (int f = 0; f < replaceNumbers.size(); f++) {
    File config = new File(filePath.replace("0", replaceNumbers.get(f).toString()));

    try {
        BufferedReader br = new BufferedReader(new FileReader(config));
        String st;
        while ((st = br.readLine()) != null) {
            String s[] = st.split("\\r?\\n");
            for (int i = 0; i < s.length; i++) {
                arrList.add(s[i]);
            }
        }
        br.close();
    } catch (Exception e) { }
}

Просто замените числа в списке replaceNumbers.

0 голосов
/ 16 июня 2020

Попробуйте что-нибудь вроде этого. Предполагая, что ваш первый файл конфигурации - config0.txt, а последний - config9.txt.

public static void main(String[] args) {
    String formatPath = "C:\\Users\\Dell\\Documents\\DataProcessing\\src\\config%d.txt";

    List<File> files = IntStream.range(0, 10)
            .mapToObj(i -> String.format(formatPath, i))
            .map(File::new).collect(Collectors.toList());

    List<String> arrList = new ArrayList<>();

    for (File file : files)
        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String st;
            while ((st = br.readLine()) != null) {
                String[] s = st.split("\\r?\\n");
                for (int i = 0; i < s.length; i++) {
                    arrList.add(s[i]);
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
}

Метод IntStream.range(a, b) генерирует IntStream чисел от a (включительно) до b (исключая ).

Также я использую блок try с ресурсами, что означает, что br.close() неявно. Узнайте больше о try с ресурсами здесь .

0 голосов
/ 16 июня 2020

, чтобы решить эту проблему, сначала прочтите файл, введенный пользователем, и проверьте, является ли это допустимым файлом, если да, то продолжайте работу в своей программе. Надеюсь, это поможет!

...