亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

讀取文本文件時跳過一定數量的行 - 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 關注
  • 580 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號