Java — text to array to text

Я ищу лучший способ прочитать целые числа+строки из небольшого текстового файла, сохранить их в массиве, добавить несколько новых целых чисел+строк, отсортировать их по целым числам, а затем записать несколько самых высоких в том же файле. (sth как рекорды)

Образец:

соматотропный гормон.txt:

5 aa
4 bb
3 cc
3 dd

В

a["5 aa","4 bb","3 cc","3 dd"] 

Добавить новые строки

a["5 aa","4 bb","3 cc","3 dd","1 aa","7 bb"]

Сортировка и запись обратно в sth.формат txt

7 bb
5 aa
4 bb
3 cc

Как это сделать на Java?

3 ответа

  1. Вы можете сделать так, как показано ниже, код содержит комментарии для лучшего понимания.

    public static void main(String[] args) throws IOException {
        Data[] map = new Data[6];
        //Then read the data from your file , in my case
        //i will make a dummy data.
        map[0] = new Data(5, "aa");
        map[1] = new Data(4, "bb");
        map[2] = new Data(3, "cc");
        map[3] = new Data(3, "dd");
        map[4] = new Data(1, "aa");
        map[5] = new Data(7, "bb");
        //Then sorting this array
        java.util.Arrays.sort(map);
        //Then print the highet 4 records
        for (int i = 0; i < 4; i++) {
            System.out.println(map[i].FirstPart + " " + map[i].SecondPart);
        }
    }
    

    Создание класса, который соответствует вашим потребностям, предполагая, что первая часть записи имеет типint, а вторая часть является String

    class Data implements Comparable<Data> {
    
        int FirstPart;
        String SecondPart;
    
        public Data(int FirstPart, String SecondPart) {
            this.FirstPart = FirstPart;
            this.SecondPart = SecondPart;
        }
    //compareTo method will be called whenever you call a sort method like
    // "java.util.Arrays.sort(map);" in the main method
    
        @Override
        public int compareTo(Data o) {
            if (this.FirstPart < o.FirstPart) {
                return 1;
            } else {
                return -1;
            }
        }
    }
    

    Выход:

    7 bb
    5 aa
    4 bb
    3 dd
    
  2. Вот пример решения, включая чтение и запись в файл:

    public class Main {
        static class Entry<T, U> {
            public T value1;
            public U value2;
    
            public Entry(T value1, U value2) {
                this.value1 = value1;
                this.value2 = value2;
            }
        }
    
        static Entry<Integer, String> parseLine(String line) {
            String[] intAndString = line.split(" ");
            Integer i = Integer.parseInt(intAndString[0]);
            String s = intAndString[1];
            return new Entry<>(i, s);
        }
    
        public static void main(String[] args) throws IOException {
            Path path = Paths.get("spl.txt");
            List<Entry<Integer, String>> resultList = new LinkedList<>();
            try (BufferedReader reader = Files.newBufferedReader(path)) {
                String nextLine;
                while ((nextLine = reader.readLine()) != null) {
                    if (nextLine.equals("\n") || nextLine.isEmpty()) continue;
                    resultList.add(parseLine(nextLine));
                }
            }
            Collections.sort(resultList, (e1, e2) -> e1.value1 - e2.value1 != 0 ? e1.value1 - e2.value1 : e1.value2.compareTo(e2.value2));
            try (BufferedWriter writer = Files.newBufferedWriter(path)) {
                resultList.forEach((e) -> {
                    try {
                        writer.write(e.value1 + " " + e.value2 + "\n");
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                });
            }
        }
    }
    

    Инкапсуляция записи класса опущена из-за читаемости.

    Сортировка по возрастанию.
    Надеюсь, это поможет.

  3. Проверьте Ниже Решение —

    abc.txt
    4 test1
    6 test2
    0 test3
    12 test4
    5 test5
    9 test6
    

    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.TreeMap;
    
    
    public class ReadWriteDataInFile {
    
        public static void main(String[] args) throws IOException {
            String path="C:\test\";
            String fileName=path+"abc.txt";
            String newFileName=path+"abcNew.txt";
    
            System.out.println("Reading Data from File "+fileName + " started...");
            Map<Integer, String> readDataFromTextFile = readDataFromTextFile(fileName);
    
            System.out.println("Writing Sorted Data to File "+newFileName + " started...");
            writeDataInNewFile(readDataFromTextFile,newFileName);
            System.out.println("Writing Data to File Completed...");
        }
    
    
        private static void writeDataInNewFile(Map<Integer, String> readDataFromTextFile, String newFileName) throws IOException {
    
            PrintWriter writer = new PrintWriter(newFileName, "UTF-8");
    
            Iterator it = readDataFromTextFile.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pair = (Map.Entry)it.next();
                String data1=pair.getKey() + " " + pair.getValue();
                writer.println(data1);
            }
            writer.close();
        }
    
        private static Map<Integer, String> readDataFromTextFile(String fileName) throws IOException {
    
            FileInputStream fis = new FileInputStream(fileName);
            InputStreamReader input = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(input);
    
            String data;
            String result[] ;
    
            Map<Integer,String> dataMap= new TreeMap<Integer,String> ();
            while ((data = br.readLine()) != null) {
                result = data.split(" ");
                dataMap.put(Integer.parseInt(result[0]), result[1]);
            }
            return dataMap;
        }
    }
    

    newabc.txt
    0 test3
    4 test1
    5 test5
    6 test2
    9 test6
    12 test4