Я хочу прочитать текстовый файл и разбить его на основе значения столбца - PullRequest
0 голосов
/ 28 августа 2018
public class FileSplitter2 {

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

        String filepath = "D:\\temp\\test.txt";

        BufferedReader reader = new BufferedReader(new FileReader(filepath));
        String strLine;
        boolean isFirst = true;
        String strGroupByColumnName = "city";
        int positionOgHeader = 0;
        FileWriter objFileWriter;
        Map<String, FileWriter> groupByMap = new HashMap<String, FileWriter>();
        while ((strLine = reader.readLine()) != null) {
            String[] splitted = strLine.split(",");
            if (isFirst) {
                isFirst = false;
                for (int i = 0; i < splitted.length; i++) {
                    if (splitted[i].equalsIgnoreCase(strGroupByColumnName)) {
                        positionOgHeader = i;
                        break;
                    }
                }
            }
            String strKey = splitted[positionOgHeader];
            if (!groupByMap.containsKey(strKey)) {
                groupByMap.put(strKey, new FileWriter("D:/TestExample/" + strKey + ".txt"));
            }
            FileWriter fileWriter = groupByMap.get(strKey);
            fileWriter.write(strLine);
        }
        for (Map.Entry<String,FileWriter> entry : groupByMap.entrySet()) {
        entry.getKey();
        }

    }
}

Это мой код. Я не получаю должного результата. Файл содержит 10 столбцов, а 5-й столбец - «город». В файле 10 разных городов. Мне нужно разделить каждый город отдельным файлом.

1 Ответ

0 голосов
/ 28 августа 2018

Вы не звоните close на всех FileWriter и, следовательно, данные могут не сбрасываться в файл.

См. FileWriter не записывает в файл

В конце обработки

 groupByMap.values().forEach(fileWriter -> {
        try {
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace(); //Add appropriate error handling
        }
    });

В вашем коде есть ошибка. Вы должны переместить операторы после блока if (isFirst) в блок else. Иначе, он также создаст файл city.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...