为了账号安全,请及时绑定邮箱和手机立即绑定

读取文本文件时跳过一定数量的行 - BufferedReader Java

读取文本文件时跳过一定数量的行 - BufferedReader Java

慕码人8056858 2021-10-28 14:03:41
我在一个目录中有几个文件,我打算跳过一定数量的行。获取要跳过的行的唯一方法是获取字符长度为 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());    }}我不确定我做错了什么,但看起来文件在我跳过之前正在写入。我该如何实现?
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

我已经通过在 Map 中存储要跳过每个文件的值的行来解决这个问题。然后遍历地图并跳过每个文件的行数。我认为应该有一个简单的方法。


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());

        }

    }


查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 512 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信