20190711 - Java把大文件拆分成小文件(按行拆分,及平均拆分)

按行拆分

public class Test {
    private static String fileName = "G:/data.txt";
    /**
    *@Description: 按行分割文件
    *@Author: annecheng,2019/7/11
    */
    public static void splitField(int totalLine, int splitRow) {
        try {
            FileReader read = new FileReader(fileName);
            BufferedReader br = new BufferedReader(read);
            List<FileWriter> subFileList = new ArrayList<FileWriter>();
            int subFileSize = totalLine % splitRow == 0 ? totalLine / splitRow : totalLine / splitRow + 1;
            for (int i = 0; i < subFileSize; i++) {
                subFileList.add(new FileWriter(fileName.substring(0, fileName.length() - 4) + "_" + (i + 1) + ".txt"));
            }

            for (Integer rowNum = 1; rowNum <= totalLine; ++rowNum) {
                String row = br.readLine();
                int subFieldIndex = rowNum % splitRow == 0 ? rowNum / splitRow - 1 : rowNum / splitRow;
                subFileList.get(subFieldIndex).append(row + "\r\n");
            }

            for (int i = 0; i < subFileList.size(); i++) {
                subFileList.get(i).close();
            }
            br.close();
        } catch (Exception e) {
            System.out.println("将大文件拆分成小文件异常,异常:" + e);
        }
    }

    private static void loadData(int end) throws IOException {
        FileWriter writer = new FileWriter(fileName);
        BufferedWriter bw = new BufferedWriter(writer);
        try {
            for (Integer i = 1; i < end; i++) {
                bw.write(i.toString());
                bw.newLine();
            }
        } catch (IOException e) {
            System.out.println("写入文件失败");
        } finally {
            if (bw != null) {
                bw.close();
            }
            if (writer != null) {
                writer.close();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        Integer end = 123;
        loadData(end);
        splitField(end-1,10);
    }

}

结果如下:
爸爸和它的儿砸们~~~~
在这里插入图片描述
十二长这样~
在这里插入图片描述
十三长这样。
在这里插入图片描述
成功的把爸爸的财产分割了~ 老小有点亏。

平均拆分

public class Test2 {
    private static String fileName = "G:/data.txt";

    public static void splitTxt(int splitAverageCount) {
        try {
            FileReader read = new FileReader(fileName);
            BufferedReader br = new BufferedReader(read);
            String row;
            List<FileWriter> flist = new ArrayList<FileWriter>();
            for (int i = 0; i < splitAverageCount; i++) {
                flist.add(new FileWriter(fileName.substring(0, fileName.length() - 4) + "_" + (i + 1) + ".txt"));
            }
            int rownum = 1;// 计数器
            while ((row = br.readLine()) != null) {
                flist.get(rownum % splitAverageCount).append(row + "\r\n");
                rownum++;
            }
            for (int i = 0; i < flist.size(); i++) {
                flist.get(i).close();
            }
        } catch (Exception e) {
            System.out.println("将大文件拆分成小文件异常,异常:" + e);
        }
    }

    private static void loadData(int end) throws IOException {
        FileWriter writer = new FileWriter(fileName);
        BufferedWriter bw = new BufferedWriter(writer);
        try {
            for (Integer i = 1; i < end; i++) {
                bw.write(i.toString());
                bw.newLine();
            }
        } catch (IOException e) {
            System.out.println("写入文件失败");
        } finally {
            if (bw != null) {
                bw.close();
            }
            if (writer != null) {
                writer.close();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        Integer end = 123;
        loadData(end);
        splitTxt(2);
    }
}

结果如下:
爸爸和它的儿砸们~~~~
在这里插入图片描述
平均分给儿砸,儿砸如下:
在这里插入图片描述在这里插入图片描述

公平了,没啥问题,over~~~

原创文章 88 获赞 21 访问量 3万+

猜你喜欢

转载自blog.csdn.net/cfy1024/article/details/95504207