精华内容
下载资源
问答
  • 本问提到的读文件进行读操作使用的是FileInputStream方法,操作使用的是FileOutputStream方法,将字符内容进行拼接主要使用的是str+"a"和StringBuffer方法.下面是一个脚本文件#!/bin/bash #下面设置输入...

    本问提到的读文件进行读操作使用的是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();
                }
            }
        }
    }

    代码运行结果:


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

    值得注意的是在

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

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

    展开全文
  • 现在需要将汇总数据写入文件第一行,然后将若干行(假设10w行)明细数据从第二行一直到100001行。 实现方式: 方法一: (1)查询数据库:在数据库sql中做统计得到汇总行数据,写入文件中。 (2)查询数据库:...

    应用场景举例:需要查数据库获取明细数据若干行,并且汇总得到一行汇总数据。现在需要将汇总数据写入文件第一行,然后将若干行(假设10w行)明细数据从第二行一直写到100001行。

    实现方式:

    方法一:

    (1)查询数据库:在数据库sql中做统计得到汇总行数据,写入文件中。

    (2)查询数据库:在数据库sql中直接的分页查询(不统计)得到若干行明细数据,并不停的将分页的明细数据追加写入到文件中。

    可以很easy的完成,但是问题来了:当数据量太大的时候,数据库做sum运算压力很大。哭不妨将(1)中的sql运算改为直接在数据库sql中直接的分页查询(不统计)得到若干行明细数据在内存中循环计算得到汇总数据,但是因为全部的明细数据太大了不能缓存在内存中所以第二步的时候仍需要做分页查询明细数据这件事,效率很低难过难过难过~~~且看下面的其它方案。

    方法二:

    (1)查询数据库:在数据库sql中直接的分页查询(不统计)得到若干行明细数据,同时累加计算汇总数据,并不停的将分页的明细数据追加写入到目标文件中。

    (2)当往目标文件中写完全部的明细数据时候正好也计算好了汇总行数据。

    (3)新建一个临时文件,将目标文件中的全部的明细数据用流读出并写入到tmp文件中。

    (4)将汇总行数据写入到目标文件(会覆盖原文件内容),将tmp文件中的内容追加回写到目标文件。

    (5)将tmp文件删除掉。

    方法三:(比较机智的巧妙地方案偷笑~~~)

    (1)(2)同方法二

    (3)新建一个临时文件,将汇总行数据写入该临时文件。

    (4)将目标文件中的全部的明细数据用流读出并写入到tmp文件中。【此时tmp文件中就是全部的所要的数据】

    (4)将tmp文件重命名为原始文件,删掉原始文件。

    接下来呈上热腾腾的代码【仅针对方法二,方法三更加简单各位自由发挥吧~~~】

    注:业务场景为:查询数据库获取交易对账明细数据和计算出汇总数据,将汇总数据写入文件第一行,明细数据顺延的写入文件中,生成对账文件。

    /**
    	 * 生成对账文件:交易明细
    	 * @throws ParseException 
    	 */
    	public TxReconFileHeadLineModel writeDetailInfo(FileGenerateUtil fileUtil, String merchantId, String accountingDate, String shotMerchantId) throws IOException, ParseException {
    		TxReconFileHeadLineModel headLine = new TxReconFileHeadLineModel();
    		headLine.setMerchantId(shotMerchantId);
    		headLine.setAccountingDate(accountingDate);
    		headLine.setCurrency("CNY");
    		//初始化,用于累加计算
    		BigDecimal paymentTransactionAmount = BigDecimal.ZERO;
    		int paymentTransactionCount = 0;
    		BigDecimal refundTransactionAmount = BigDecimal.ZERO;
    		int refundTransactionCount = 0;
    		BigDecimal paymentTransactionFee = BigDecimal.ZERO;
    		BigDecimal refundTransactionFee = BigDecimal.ZERO;
    		
    		SettleOrderDataCenter dateCenterSearch = new SettleOrderDataCenter();
    		dateCenterSearch.setAccountingDate(new SimpleDateFormat("yyyyMMdd").parse(accountingDate));
    		dateCenterSearch.setMerchantId(merchantId);
    		int pageSize = 1000, currPage = 0;
    		while(true) {
    			Pageable pageable = new PageRequest(currPage++, pageSize, Direction.ASC, "id");
    			List<SettleOrderDataCenter> dataCenterList = this.settleOrderDataCenterRepo.selectPage(dateCenterSearch, pageable);
    			if (null == dataCenterList || dataCenterList.size() == 0) {
    				break;
    			}
    			for (int i = 0; i < dataCenterList.size(); i++) {
    				SettleOrderDataCenter datacenter = dataCenterList.get(i);
    				int paymentRefundFlag = "1".equals(datacenter.getTransType().toString()) ? 1 : -1;//1-交易,2退款',
    				String detailStr = String.format("\r\n%s,%s,%s,%s,%s,%s,%s,%s,%s", 
    						accountingDate,
    						shotMerchantId,
    						datacenter.getTransType(),
    						StringUtils.trimToEmpty(datacenter.getMerchantOrderNo()),
    						DateUtil.dateToString(datacenter.getOrderTime(), DateUtil.YYYYMMDDHHMMSS),
    						datacenter.getOrderId(),
    						datacenter.getCurrency(),
    						datacenter.getOrderAmount().multiply(new BigDecimal(paymentRefundFlag)).divide(new BigDecimal(100)).setScale(2),
    						datacenter.getFee().multiply(new BigDecimal(paymentRefundFlag * -1)).divide(new BigDecimal(100)).setScale(2));
    				fileUtil.write(detailStr);
    				//累加计算
    				if (paymentRefundFlag == 1) {
    					paymentTransactionCount++;
    					paymentTransactionAmount = paymentTransactionAmount.add(datacenter.getOrderAmount());
    					paymentTransactionFee = paymentTransactionFee.add(datacenter.getFee());
    				} else {
    					refundTransactionCount++;
    					refundTransactionAmount = refundTransactionAmount.add(datacenter.getOrderAmount());
    					refundTransactionFee = refundTransactionFee.add(datacenter.getFee());
    				}
    			}
    			fileUtil.flush();
    		}
    		headLine.setPaymentTransactionCount(String.valueOf(paymentTransactionCount));
    		headLine.setPaymentTransactionAmount(paymentTransactionAmount.divide(new BigDecimal(100)).setScale(2).toString());
    		headLine.setRefundTransactionCount(String.valueOf(refundTransactionCount));
    		headLine.setRefundTransactionAmount(refundTransactionAmount.divide(new BigDecimal(100)).setScale(2).toString());
    		headLine.setTransactionFee(paymentTransactionFee.subtract(refundTransactionFee).divide(new BigDecimal(100)).setScale(2).toString());
    		return headLine;
    	}
    该方法主要是实现方法二中的(1)(2)。

    /*
    	 * 插入到指定位置 
    	 * @param fileName 文件路径+文件名称
    	 * @param pos 插入的位置 【首行的话是0】
    	 * @param insertContent 待插入的数据
    	 */
    	public void insert(String filename,int pos,String insertContent) throws IOException{
    	    File tmp = File.createTempFile("tmp", null);
    		RandomAccessFile raf = new RandomAccessFile(filename, "rw");
    		
    //		BufferedInputStream buffIn = new BufferedInputStream(new FileInputStream(new File(filename)));
    		
    		BufferedOutputStream tmpOut = new BufferedOutputStream(new FileOutputStream(tmp));
    		BufferedInputStream tmpIn = new BufferedInputStream(new FileInputStream(tmp));
            System.out.println(raf.length());
            raf.seek(pos);
            byte[] buf = new byte[64];
            int hasRead;
            //System.out.println(raf.read(buf));
            while((hasRead = raf.read(buf))>0){
                //把原有内容读入临时文件
                tmpOut.write(buf, 0, hasRead);
            }
            tmpOut.flush();
            raf.seek(pos);
            raf.write(insertContent.getBytes());
            //追加临时文件的内容
            while((hasRead = tmpIn.read(buf))>0){
                raf.write(buf,0,hasRead);
            }
            
            
            //关闭工作流
        	tmpIn.close();
        	tmpOut.close();
            raf.close();
            //在JVM进程退出的时候删除文件,通常用在临时文件的删除.
            tmp.deleteOnExit();
    	}

    该方法是实现方法二中的(3)(4)(5)

    public static void main(String[] args) throws IOException {
    		//路径为 -> D:/apps/reconfile/beifu/{shotMerchantId}/trans/文件名.csv
    		String pathname = "D:/apps/reconfile/beifu/shotMerchantId/trans/test.csv";
    		FileGenerateUtil fileUtil = new FileGenerateUtil();
    		//记账日期	商户号	币种    	消费总笔数	消费总金额	退款总笔数	退款总金额	手续费总金额
    		String summaryTitle = String.format("%s,%s,%s,%s,%s,%s,%s,%s\n", 
    				"accountingDate", 
    				"merchantId",
    				"currency",
    				"paymentTransactionCount", 
    				"paymentTransactionAmount", 
    				"refundTransactionCount", 
    				"refundTransactionAmount", 
    				"transactionFee");
    		
    		//将汇总行数据插入到文本的第一行
    		fileUtil.insert(pathname, 0, summaryTitle);
    	}

    该方法为测试类~~~~

    这样就可以成功的搞定啦~ 生气

    代码段中第一个涉及具体业务仅供参考,第二个可以直接拿走复用吐舌头~~~

    如有疑问,欢迎一起交流分享大笑


    展开全文
  • java读取excle指定位置数据

    千次阅读 2017-08-05 10:08:01
    步骤 建立File文件获取相应文件 建立Workbook文件 获取相应table 循环遍历文件内容

    将Excel指定位置的信息读取出来

    步骤

    • 建立File文件获取相应文件
    • 建立Workbook文件
    • 获取相应table
    • 循环遍历文件内容
      public void display(String name){
        File file = new File("/data/aa"+name+".xls");
        try{
          //建立文件
          Workbook book = Workbook.getWorkbook(file);
          //获取第一个表
          Sheet sheet = book.getSheet(0);
          //循环输出表头,用制表符格式化
          for(int i = 0;i < sheet.getColumns();i++){                
                    System.out.print(sheet.getCell(i, 0).getContents()+"\t");
            }
            System.out.println();
          //输出文件内容  
            for(int i = 6;i < sheet.getRows(); i++){
                    for(int j = 0; j < sheet.getColumns(); j++){
                        System.out.print(sheet.getCell(j, i).getContents()+"\t");
                    }
                    System.out.println();
            }
        }catch(Exception e){
          e.printStackTrace();
        }  
      }
    展开全文
  • java指定文件写入内容

    千次阅读 2019-07-30 14:40:03
    FileWriter fileWritter = new FileWriter("E:\\hello.txt",true); fileWritter.write("i am ironman"); fileWritter.close(); ...

                        FileWriter fileWritter = new FileWriter("E:\\hello.txt",true);
                        fileWritter.write("i am ironman");
                        fileWritter.close();

    展开全文
  • java数据保存到指定文件

    热门讨论 2010-06-21 08:46:45
    java数据保存到指定文件java数据保存到指定文件
  • Java指定Excel写入读取数据

    千次阅读 2020-10-28 21:27:46
    POI,向Excel中写入数据,读取数据
  • 已经测试 完全没问题 大可以满足你的简单需求 修改液很容易 里面有详细的注释说明
  • 亲测HSSRow可以实现此功能,,同样的方式为啥XSSFRow不可以?代码如下 FileInputStream f = new FileInputStream (" "); //XSL XSLX XSSFWorkbook workbook = new XSSFWorkbook(f); ... XSSFSheet sheet = ...
  • java读取Excel文件指定列的数据

    千次阅读 2020-06-11 16:25:43
    java读取Excel文件指定列的数据 抽取Excel文件某一列的数据(.xls .xlsx 都可),返回 String 类型的list: import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss....
  •  工作很快乐,学习很简单,爱编程,爱技术。  一一一一 想成为架构师的小白  ...用Java代码实现:根据指定URL将文件下载到指定目标位置。   package test1; import java.io.BufferedInputStream; impor...
  • 首先获取指定路径的文件 BufferedReader br = new BufferedReader(new FileReader(path)); BufferedReader 是为了提供读的效率而设计的一个包装类,它可以包装字符流。可以从字符输入流中读取文本,缓冲各个字符,...
  • 方法一:自己个输出流方法 直接上代码: public void writeToFile(String data){ byte[] sourceByte = data.getBytes(); String path = &quot;D:/file/&quot;; String fileName = &quot;test.txt...
  • Java创建新文件并写入指定数据 Java的其他文件操作,也会在该专栏更新 1.写入字节数组 /** * 新建新的文件并写入指定字节数组的数据 * @param fileName 文件目录及名称字符串 * @param bytes 字节数组 * @...
  • java的FileOutputStream数据文件

    千次阅读 2017-03-12 16:07:09
    package ... import java.io.File; import java.io.FileOutputStream; /** * Created by rabbit先生 on 2017/3/12 0012. */ public class FileOutputStreamDemo { public static void main(S
  • java使用nio读写文件

    千次阅读 2019-11-16 15:49:45
    最近在研究 JAVA NIO 的相关知识,学习NIO,就不能提到IO的原理和事项,必经NIO是基于IO进化而来 IO涉及到的底层的概念大致如下: 缓冲区操作。2) 内核空间与用户空间。3) 虚拟内存。4) 分页技术 一,虚拟存储器 ...
  • Java文件读写

    万次阅读 多人点赞 2019-06-07 21:17:16
    例如:若fis是一个输入流,如果想读取相同的字 节数据到字节数组b1和b2中,可通过以下语句实 现,先标记输入流中当前位置,读取数据后重置 读取位置。 fis.mark(5); byte[] b1=new byte[5], byte[] b2=new byte[5]...
  • Java导入Excel文件如何对应属性类对应的字段?Java导出Excel文件如何实现? 下面分为两段供各位测试,要是不懂或者实在不行可以评论一下,看到我会回复的 jar这些你们可以自己找,用maven也就是复制粘贴的事。 下面...
  • Java读取文件指定编码

    千次阅读 2018-11-19 16:17:49
    java读取txt文件如果不指定编码,那么读出来的数据可能就是一串乱码。 解决方案 String content=null; BufferedReader bufferedReader= new BufferedReader( new InputStreamReader( new FileI...
  • Java输入输出

    万次阅读 多人点赞 2018-05-12 15:27:45
    引言:在平时java开发中,被输入输出搞得头疼。特此下这篇博客,一是为了总结输入输出,二是为了和大家分享。如果大家觉得得好,就请高抬贵手点个赞呗!!! 1.输入格式,输出格式控制 1.1输入处理 java的...
  • 如何删除文件里某个指定内容 删除文件里的内容就是 先读出文件里的内容一次读取一行放入集合里,如果读到你想删除的那个数据就不要放入集合。然后清空文件里的内容,再把集合里内容重新写入目标文件里。这样就达到了...
  • 在使用的软件中经常要用到一些数据的导入导出,以及准确的定位数据,这些经常会涉及excle表格,因此把今天学习到的关于如何利用Java准确获取到excle中的某一列数据,同时将此列数据输出到txt文件格式中。 使用的jar...
  • 生成随机数,将csv的数据随机置零,将新生成的文件保存到新的csv中 一、首先我们进行第一步:读取csv中的文件:读取函数格式为public static double readin(int row,int col) 读取表格中指定行列的数据,row表示行,...
  • 思路:前台 使用bootstrap-fileInput插件,将excel文件上传到服务器对应地址,然后后台java读取服务器对应地址的这个excel文件,然后将数据上传到数据库(使用MyBatis框架) 前端: html代码: <input id=...
  • 不知大家是否曾遇到这样的需求,要从存储大量特定数据的文本文件中获取自己需要的特定内容或数据文件数据量十分庞大,如果采用手动的方式去筛选,工作量就会很大。此时,对于我们程序员来说就可以通过编写一个...
  • JAVA文件的读写

    万次阅读 多人点赞 2019-03-25 14:37:18
    1.读取文件的内容: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt"), "utf-8")); String line = ""; while((line = br.readLine()) != null){ System.out....
  • 此程序可以将指定的文件夹及其子目录复制到指定文件下去。 可玩性较强! import java.io.FileOutputStream; import java.io.FileInputStream; import java.util.Scanner; import java.io.*; public class Copy{ ...
  • public class InsertContent {  public static void insert(String fileName,long pos,String insertContent) throws ... insert("InsertContent.java", 45,"插入的内容\r\n");  }   }
  • //写入文件指定编码) String str="路径"; File file =new File(str); PrintWriter out= new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file ),"utf-8...
  • Java 生成excel并保存到指定位置

    千次阅读 2019-10-11 15:41:53
    package 包; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util....import java.io.IOException; import java.io.OutputStream; import java.util.List; import java.util.Map; ...
  • import net.sf.json.JSONArray; ... 添加json数据 String path = "src/main/webapp/json/bottomFgs.json"; String jsonStr = JsonUtils.readJsonFile(path); JSONArray jsonArray = JSO...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 908,442
精华内容 363,376
关键字:

java文件指定位置写数据

java 订阅