java实现对文件的读写操作(按要求在文件指定位置添加内容)

本问提到的读文件进行读操作使用的是FileInputStream方法,写操作使用的是FileOutputStream方法,将字符内容进行拼接主要使用的是str+"a"和StringBuffer方法.

下面是一个脚本文件

#!/bin/bash
#下面设置输入文件,把用户执行pre_deal.sh命令时提供的第一个参数作为输入文件名称
infile=$1
#下面设置输出文件,把用户执行pre_deal.sh命令时提供的第二个参数作为输出文件名称
outfile=$2
#注意,最后的$infile> $outfile必须跟在}’这两个字符的后面
awk -F "," 'BEGIN{
srand();
        id=0;
        Province[0]="山东";Province[1]="山西";Province[2]="河南";Province[3]="河北";Province[4]="陕西";Province[5]="内蒙古";Province[6]="上海市";
        Province[7]="北京市";Province[8]="重庆市";Province[9]="天津市";Province[10]="福建";Province[11]="广东";Province[12]="广西";Province[13]="云南"; 
        Province[14]="浙江";Province[15]="贵州";Province[16]="新疆";Province[17]="西藏";Province[18]="江西";Province[19]="湖南";Province[20]="湖北";
        Province[21]="黑龙江";Province[22]="吉林";Province[23]="辽宁"; Province[24]="江苏";Province[25]="甘肃";Province[26]="青海";Province[27]="四川";
        Province[28]="安徽"; Province[29]="宁夏";Province[30]="海南";Province[31]="香港";Province[32]="澳门";Province[33]="台湾";
    }
    {
        id=id+1;
        value=int(rand()*34);       
        print id"\t"$1"\t"$2"\t"$3"\t"$5"\t"substr($6,1,10)"\t"Province[value]
    }' $infile> $outfile

该脚本为林子雨大数据实验中对数据警醒与处理操作的文件,其功能为在每行的末尾加上一列数据(地区)并写入指定文件,下面我们用java来实现这一脚本的功能.

主要实现代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Random;
import org.apache.commons.collections.map.StaticBucketMap;

import org.apache.commons.lang.text.StrBuilder;

public class bigdatatest {
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        FileInputStream fis=null;
        InputStreamReader isr=null;
        BufferedReader bReader=null;
        OutputStreamWriter osw=null;
        FileOutputStream fos=null;
        BufferedWriter bWriter=null;
        try {
            int rand;
            String line;
            StringBuffer stringBuffer ;
            fis=new FileInputStream("/home/hadoop/text.txt");//定义输入文件
            fos=new FileOutputStream("/home/hadoop/text2.txt");//定义输出文件
            isr=new InputStreamReader(fis);//读取输入文件
            osw=new OutputStreamWriter(fos);//写入输入文件
            bReader=new BufferedReader(isr);//读取缓冲区
            bWriter=new BufferedWriter(osw);//写入缓存区
            String[] city={"重庆","上海","北京","黑龙江","四川","湖南","新疆","哈尔滨"};//定义需要加入的内容,这里就随便写几个为例了
            while((line=bReader.readLine())!=null){ //按行读取数据
                rand=new Random().nextInt(8);    //生成随机数
                String aString=line+"\t"+city[rand]+"\n";//将读取的行数据和字符串数组按要求进行拼接
                //stringBuffer = new StringBuffer();//新建一个字符串缓冲区
                //aString =stringBuffer.append(line+"\t").append(city[rand]).toString();
                System.out.println(aString);//输出拼接结果
                bWriter.write(aString);//将拼结果按行写入出入文件中
            }
        } catch (FileNotFoundException e) {
            // TODO: handle exception
            System.out.println("找不到文件");
        }catch (IOException e) {
            // TODO: handle exception
            System.out.println("读取文件失败");
        }finally{
            try {
                bReader.close();//关闭读取缓冲区
                isr.close();//关闭读取文件内容
                fis.close();//关闭读取文件
                bWriter.close();//关闭写入缓存区
                osw.close();//关闭写入文件内容
                fos.close();//关闭写入文件
            } catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    }
}

代码运行结果:


至此,我们就在文档每一行的末尾位置加入了一个地区属性.

扫描二维码关注公众号,回复: 1706109 查看本文章

值得注意的是在

stringBuffer = new StringBuffer();//新建一个字符串缓冲区

时,如果再循环内不新建一个字符缓冲区的话会出现,他讲每行的内容均写入缓冲区,最终写入文档时会出现每行写入的是从文件开头到当前段落的所有内容.

猜你喜欢

转载自blog.csdn.net/qq_36509592/article/details/80759668