文件处理

人走茶凉 提交于 2019-12-01 19:42:16
package com.along.gps.util;

import com.alibaba.fastjson.JSONObject;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class fileUtil {

    public static void write(){
        Writer w = null;
        BufferedWriter bw = null;
        long startTime = System.currentTimeMillis();
        try {
            // 写入文本
            File f = new File("E:\\gpsData\\demo1-json.txt");

            if (!f.exists()) {
                f.createNewFile();
            }



            w = new FileWriter(f, true);
            bw = new BufferedWriter(w);
            for (int i = 0; i <1000000 ; i++) {
                bw.write(" -------------------demo------------------------------");
            }

            long endTime = System.currentTimeMillis();
            System.out.println("运行时间:" + (endTime - startTime) + "ms");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                bw.close();
                w.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

    public static List<String> read(String url){
        BufferedInputStream fis =null;
        BufferedReader reader = null;
        List<String> list=new ArrayList<>();
        try {
            File file = new File(url);
            fis = new BufferedInputStream(new FileInputStream(file));
            reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024);// 用5M的缓冲读取文本文件

            String line = "";
            int i=0;
            long startTime = System.currentTimeMillis();
        //    while((line = reader.readLine()) != null ){
            while( reader.ready()){
                //TODO: write your business
                //    JSONObject.toJSONString(line);

                JSONObject jsonObject = JSONObject.parseObject(line);

                i++;
                //System.out.println(i++);
                list.add(line);
            }
            long endTime = System.currentTimeMillis();
            System.out.println(i/10000.0+" w条数据   readTxt1方法,使用内存="+(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/ 1024 / 1024 + "M"+",使用时间毫秒="+(endTime-startTime));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                fis.close();
                reader.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
        return list;
    }
    public static void main(String args[]) {

        read("E:\\gpsData\\demo.txt");


    }

    /**
     * 按行分割文件
     * @param sourceFilePath 为源文件路径
     * @param targetDirectoryPath 文件分割后存放的目标目录
     * @param rows 为多少行一个文件
     */
    public static int splitFileByLine(String sourceFilePath, String targetDirectoryPath, int rows) {
        long startTime = System.currentTimeMillis();
        String sourceFileName = sourceFilePath.substring(sourceFilePath.lastIndexOf(File.separator) + 1, sourceFilePath.lastIndexOf("."));//源文件名
        String splitFileName = targetDirectoryPath + File.separator + sourceFileName + "-demo-%s.txt";//切割后的文件名
        File targetDirectory = new File(targetDirectoryPath);
        if (!targetDirectory.exists()) {
            targetDirectory.mkdirs();
        }

        PrintWriter pw = null;//字符输出流
        String tempLine;
        int lineNum = 0;//本次行数累计 , 达到rows开辟新文件
        int splitFileIndex = 1;//当前文件索引

        try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(sourceFilePath)))) {
            pw = new PrintWriter(String.format(splitFileName, splitFileIndex));
            while ((tempLine = br.readLine()) != null) {
                if (lineNum > 0 && lineNum % rows == 0) {//需要换新文件
                    pw.flush();
                    pw.close();
                    pw = new PrintWriter(String.format(splitFileName , ++splitFileIndex));
                }
                pw.write(tempLine + "\n");
                lineNum++;
            }
            long endTime = System.currentTimeMillis();
            System.out.println(splitFileIndex+"运行时间:" + (endTime - startTime) + "ms");
            return splitFileIndex;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }finally {
            if (null != pw) {
                pw.flush();
                pw.close();
            }
        }

    }

}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!