Java把一个文件,输出成多个文件

前言:我有一个出租车轨迹的txt文本,其中包括多条轨迹。我想把这个文本按照单条轨迹输出出来,每条轨迹放在一个txt文本中。

思路:重要问题就集中在,如何动态的指定输出文件的名字。我想到了StringBuilder,StringBuilder可以拼接字符串,我可以动态改变,代表输出路径的字符(我这里通过循环一个整数,然后再拼接到字符串上),这样就可以通过变化StringBuilder,来改变FIle对象对应的路径。

上代码(其中InputPoint是之前写好的一个读入文件的一个类)

import geotools.InputPoint;
import geotools.PointRule;

import java.io.*;
import java.util.ArrayList;

/**
 * 写一个类,用来把文件中的轨迹,每条轨迹都放在一个文件中
 */
public class OneToMore {
   public static OutputStreamWriter out;
   public static ArrayList<PointRule> track=new ArrayList<>();
   public static void oneToMore() throws IOException {
       /**
        * 每条轨迹得分别new一个file对象
        */
       /*先把数据读进来*/
       InputPoint inputPoint=new InputPoint();
       ArrayList<PointRule> p=inputPoint.Read();
       /**
        * 先循环并按轨迹拆分
        * 声明一个用来存储单条轨迹的集合
        * 用布尔判断,声明时候开始读入什么时候结束
        */

       boolean start=false;
       int k=0;
       for (int i=0;i<p.size()-1;i++){
           if (start){
               track.add(p.get(i));
           }
           if(p.get(i).getIsON()==1){
               track.add(p.get(i));
               start=true;
           }
           if (start&&p.get(i).getIsON()==0){
               track.add(p.get(i));
               start=false;
               String filename="E://桌面//1118原数据//";
               StringBuilder s=new StringBuilder(filename);
               s.append(k);
               s.append(".txt");
               out = new OutputStreamWriter(
                       new FileOutputStream(new File(s.toString()),true));
               BufferedWriter wr = new BufferedWriter(out);
               for (int j=0;j<track.size()-1;j++) {
                   try {
                       wr.write(String.valueOf(track.get(j).getCarnum()));
                       wr.write("\t");
                       wr.write(String.valueOf(track.get(j).getIsON()));
                       wr.write("\t");
                       wr.write(String.valueOf(track.get(j).getDate()));
                       wr.write("\t");
                       wr.write(String.valueOf(track.get(j).getLat()));
                       wr.write("\t");
                       wr.write(String.valueOf(track.get(j).getLon()));
                       wr.write("\t");
                       wr.write(String.valueOf(track.get(j).getSpeed()));
                       wr.write("\t");
                       wr.write(String.valueOf(track.get(j).getDirect()));
                       wr.write("\n");
                       wr.flush();
                   } catch (IOException e) {
                       e.printStackTrace();
                   }
               }
               wr.close();
               track.clear();

                k++;
           }
       }
   }
    /**
     * 程序入口测试
     */
    public static void main(String[] args) throws IOException {
        OneToMore.oneToMore();
    }
}

 记录一下我的学习

posted @ 2019-11-18 10:08  济默  阅读(1470)  评论(0编辑  收藏  举报