Пропустить определенное количество строк при чтении текстового файла - BufferedReader Java - PullRequest
0 голосов
/ 05 октября 2018

У меня есть несколько файлов в каталоге, которые я намерен пропустить на определенное количество строк.Единственный способ пропустить строки - это получить первое вхождение строки, длина символа которой равна 1. Единственная доступная информация - это то, что строка встречается где-нибудь до строки № 60. Поэтому я написал следующий метод, чтобы попытатьсяпропустить строки перед персонажем.Но я получаю тот же файл, что и исходный файл:

public static void editSplitFiles(File sourceDir) {
    FilenameFilter only = new OnlyExt("RPT");
    log.debug("Editing Split Files........");
    String[] filenames = sourceDir.list(only);
    try {
        for (int k = 0; k < filenames.length; k++) {
            FileInputStream fs = new FileInputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + filenames[k]);
            BufferedReader br = new BufferedReader(new InputStreamReader(fs));
            FileOutputStream fos = new FileOutputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + filenames[k] + ".LST");
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
            String strLine;
            int num = 0;
            int splitLine = 0;
            while ((strLine = br.readLine()) != null) {
                num++;
                if (strLine.length() == 1) {
                    splitLine = num;
                }

                bw.write(strLine);
                bw.newLine();
                bw.flush();
            }
            if (splitLine < 60) {
                log.debug("File Name" + filenames[k] + "Line Number - " + splitLine);//This gives me the correct line number where the character is for each file.
                br.readLine();
            }

            fs.close();
            br.close();
            fos.close();
            bw.close();
        }
    } catch (Exception asd) {
        log.debug(asd.getMessage());
    }
}

Я не уверен, что я делаю неправильно, но похоже, что файл записывается, прежде чем я пропущу.Как мне это сделать?

РЕДАКТИРОВАТЬ Файлы выглядят так: Sample File

1 Ответ

0 голосов
/ 05 октября 2018

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

public static Map getSplitMap(File sourceDir) {
        FilenameFilter only = new OnlyExt("RPT");
        log.debug("Getting split Map........");
        Map<String, Integer> map = new HashMap();
        String[] filenames = sourceDir.list(only);
        try {
            for (int k = 0; k < filenames.length; k++) {
                FileInputStream fs = new FileInputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + filenames[k]);
                BufferedReader br = new BufferedReader(new InputStreamReader(fs));

                String strLine;
                int num = 0;
                int splitLine = 0;
                while ((strLine = br.readLine()) != null) {
                    num++;
                    if (strLine.length() == 1) {
                        splitLine = num;

                    }
                    if (splitLine < 60) {
                        map.put(filenames[k], splitLine);
                    }
                }

                fs.close();
                br.close();
            }
        } catch (Exception asd) {
            log.debug(asd.getMessage());
        }
        return map;
    }

Затем пропустите строки для файла:

 public static void splitFile(File sourceDir) {
        Map<String, Integer> map = getSplitMap(sourceDir);
        try {
            for (Map.Entry<String, Integer> entry : map.entrySet()) {
                FileInputStream fs = new FileInputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + entry.getKey());
                BufferedReader br = new BufferedReader(new InputStreamReader(fs));
                FileOutputStream fos = new FileOutputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + entry.getKey() + ".LST");
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
                for (int i = 1; i < entry.getValue(); i++) {
                    br.readLine();
                }
                String strLine;
                while ((strLine = br.readLine()) != null) {
                    bw.write(strLine);
                    bw.newLine();
                    bw.flush();
                }
                fs.close();
                br.close();
                fos.close();
                bw.close();
                File files = new File(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + entry.getKey());
                files.delete();
            }
        } catch (Exception asd) {
            log.debug(asd.getMessage());
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...