实现功能如下:
Java逐行读取.txt文件里面的数据到一个list集合里面,再加工.
处理编码格式问题,
处理读到空行的问题,
处理读到数据重复问题,
处理文件流释放不合理问题.

    /** 
     * 测试逐行读txt文件并正确关闭文件流 
     */ 
    private static void testFileStream() { 
        final Logger LOG = LoggerFactory.getLogger(CmsHome.class); 
        InputStreamReader read = null; 
        BufferedReader bufferedReader = null; 
        String serverFile = "D:/ss.txt"; 
        Set<String> tempSet = Sets.newHashSet(); 
        List<String> allRulesList = Lists.newArrayList(); 
        String encoding = "utf-8"; 
        try { 
            //new FileInputStream(serverFile)可能异常 
            read = new InputStreamReader(new FileInputStream(serverFile), encoding);//考虑到编码格式,serverFile 将要读取的文件的目录 
 
            bufferedReader = new BufferedReader(read); 
            String lineTxt; 
            //bufferedReader.readLine()可能异常 
            while ((lineTxt = bufferedReader.readLine()) != null) { 
                if (tempSet.add(lineTxt)) {   //set 去重复 
                    if (lineTxt.isEmpty()) {//处理空行 
                        continue; 
                    } 
                    allRulesList.add(lineTxt); 
                } 
            } 
        } catch (IOException e) { 
            LOG.debug("读取文件异常:" + e.getMessage()); 
        } finally { 
            if (read != null) { 
                try { 
                    read.close(); 
                } catch (IOException e) { 
                    LOG.debug("关闭文件read流异常:" + e.getMessage()); 
                } 
            } 
            if (bufferedReader != null) { 
                try { 
                    bufferedReader.close(); 
                } catch (IOException e) { 
                    LOG.debug("关闭文件bufferedReader流异常:" + e.getMessage()); 
                } 
            } 
        } 
 
        //打印输出,验证执行结果。 
        for (String s : allRulesList) { 
            System.out.println(s); 
        } 
    }


如上图的测试结果,和d盘根目录下放置的一个txt文件以及文件的内容的展示。




评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!