按行拆分
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~~~