Как отфильтровать текстовый файл и сохранить результат в новый файл по Java - PullRequest
0 голосов
/ 27 января 2019

Здравствуйте, мой вопрос, как фильтровать текстовый файл по столбцу, я имею в виду, что я хочу вырезать файл из диапазона между строками. Мои файлы с такими данными:

284015160747447; 8935901990807474474;
284015160747448; 8935901990807474482;
284015160747449; 8935901990807474490;
284015160747450; 8935901990807474508;
284015160747451; 8935901990807474516;
284015160747452; 8935901990807474524;
284015160747453; 8935901990807474532;
284015160747454; 8935901990807474540;
284015160747455; 8935901990807474557;
284015160747456; 8935901990807474565;
284015160747457; 8935901990807474573;
284015160747458; 8935901990807474581;
284015160747459; 8935901990807474599;
284015160747460; 8935901990807474607;
284015160747461; 8935901990807474615;
284015160747462; 8935901990807474623;
284015160747463; 8935901990807474631;

Я хочу, чтобы пользователь мог фильтровать то, что будет записано из исходного файла во вновь созданный: Пример от 8935901990807474490 до 8935901990807474532, и для этого номера начальная строка и последняя строка в этом диапазоне.

public class Test_read_file {
    public static List<String> readFile() throws IOException {
        try (BufferedReader br = new BufferedReader(new FileReader("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314-WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_182.out"))) {
            List<String> listOfData = new ArrayList<>();
            String d;
            while ((d = br.readLine()) != null) {
                listOfData.add(d);
            }
            return listOfData;
        }
    }

    public static void writeFile(List<String> listOfData) throws IOException {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314-WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_187.out"))) {
            for (String str : listOfData) {
                bw.write(str);
                bw.newLine();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        List<String> data = readFile();
        writeFile(data);
    }
}

1 Ответ

0 голосов
/ 27 января 2019

Внесите следующие изменения в свой код:

  1. Используйте сканер, чтобы принять значения для фильтрации:

    public static void main(String[] args) throws IOException {
        List<String> data = readFile();         
        Scanner sc = new Scanner(System.in);        
        System.out.println("Enter range");      
        long num1 = sc.nextLong();      
        long num2 = sc.nextLong();      
        writeFile(data, num1, num2);
        sc.close();     
    }
    
  2. Поскольку вы хотите, чтобы во 2-й столбец записывались только столбцы, разбейте его, используя ;, а затем добавьте в список только 1-й индекс.Это гарантирует, что в список будут добавлены только числа второго столбца.

    public static List<String> readFile() throws IOException {      
        try (BufferedReader br = new BufferedReader(new FileReader(PATH))) {
            List<String> listOfData = new ArrayList<>();            
            String d;
            while ((d = br.readLine()) != null) {
                String[] split = d.split(";");  // <-- change made here
                listOfData.add(split[1]);           
            }           
            return listOfData;      
         }  
    }
    
  3. Используйте переданный диапазон, и в него будет записываться только число, попадающее в этот диапазон.

    public static void writeFile(List<String> listOfData, long num1, long num2) 
       throws IOException {
       try (BufferedWriter bw = new BufferedWriter(new FileWriter(OUT))) {          
            for (String str : listOfData) {
                // change made here
                if (Long.valueOf(str) >= num1 && Long.valueOf(str) <= num2) {
                    bw.write(str);
                    bw.newLine();
                }           
            }       
        }   
    }
    
...