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();
    }
}

 記錄一下我的學習


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM