2 qq 21194023 qq_21194023 于 2016.02.25 11:59 提问

mapreduce,java处理操作文件

A文件
1 q*a*z
2 w*s*x
B文件
1 q
1 a
1 z
2 w
2 s
2 x
利用java代码怎么把A文件转变成B文件

2个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.25 13:17

找到转换规律之后,然后就是读取A文件,
逐行读取readLine(),先用split("空格")将这一行数据进行分割,正常情况能分割成两条记录,然后再对第二条记录进行分割split("星号")
然后写入文件B中。这个需求还是很简单的。如果你熟悉文件操作的话,大概的伪代码如下:(没有开发环境,仅供参考)

 String value= fileAReader.readLine();
 while(value!=null){
    //空格分隔
        String[] current = value.split(" ");
        if(current!=null&&current.length==2){
             String first = current[0];
                 String second = current[1];
                 //对A文件的每一行的第二个元素用星号进行分割
             String[] starSplit = second.split("*");
                 for(String star :starSplit){
                     //将*号分割的数据写入文件B:first+每个星号分割的数据
                         fileBWriter.write(first+star);
                         fileBWriter.newLine();//换行
                 }
        }
}

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.25 13:18

修正一下,上述循环最后一句,循环读取下一行,需要加一句。

 value= fileAReader.readLine();
wojiushiwo945you
wojiushiwo945you 回复寂寞不孤单:的确如此,需要刷新文件。就是伪代码,考虑不太周全。更正下,flush不是关闭缓冲,而是强制将缓冲区数据刷新到文件中,便于你能立即查看到文件最新内容。
接近 2 年之前 回复
qq_21194023
qq_21194023 感谢你,不过你好像忘了一点,写入后应该关闭缓冲, fileAReader.flush();,要不然数据量大的话会有问题的
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!