Skip to content

Commit 5a691b0

Browse files
committed
添加文件拆分功能。
1 parent 15d0f37 commit 5a691b0

4 files changed

Lines changed: 54 additions & 9 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ xJavaFxTool是使用javaFx开发的实用小工具集,目前项目刚刚建立
111111

112112
40、ZookeeperTool:Zookeeper工具(方便对zookeeper的一系列操作,包括新增、修改、删除(包括子文件)、重命名、复制、添加变更通知);
113113

114+
41、ExcelSplitTool:Excel拆分工具(对xls、xlsx、csv及文件进行拆分操作);
115+
114116
项目开发中,以后会陆续添加新工具,欢迎大家参与其中,多提提意见,谢谢。
115117

116118

src/main/java/com/xwintop/xJavaFxTool/controller/littleTools/ExcelSplitToolController.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,16 @@ private void saveFilePathAction(ActionEvent event) {
6464

6565
@FXML
6666
private void splitAction(ActionEvent event) {
67-
try {
68-
excelSplitToolService.splitAction();
69-
} catch (Exception e) {
70-
TooltipUtil.showToast("解析失败:" + e.getMessage());
71-
log.error("解析失败:", e);
72-
}
67+
TooltipUtil.showToast("正在解析请稍后...");
68+
new Thread(() -> {
69+
try {
70+
excelSplitToolService.splitAction();
71+
log.info("解析完成。");
72+
} catch (Exception e) {
73+
// TooltipUtil.showToast("解析失败:" + e.getMessage());
74+
log.error("解析失败:", e);
75+
}
76+
}).start();
77+
// TooltipUtil.showToast("解析完成!");
7378
}
7479
}

src/main/java/com/xwintop/xJavaFxTool/services/littleTools/ExcelSplitToolService.java

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.xwintop.xJavaFxTool.services.littleTools;
22

33
import com.xwintop.xJavaFxTool.controller.littleTools.ExcelSplitToolController;
4+
import com.xwintop.xJavaFxTool.utils.DirectoryTreeUtil;
45
import lombok.Getter;
56
import lombok.Setter;
67
import lombok.extern.slf4j.Slf4j;
@@ -9,6 +10,8 @@
910
import org.apache.commons.csv.CSVParser;
1011
import org.apache.commons.csv.CSVPrinter;
1112
import org.apache.commons.csv.CSVRecord;
13+
import org.apache.commons.io.FileUtils;
14+
import org.apache.commons.io.LineIterator;
1215
import org.apache.commons.lang3.StringUtils;
1316
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
1417
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
@@ -111,8 +114,25 @@ public void splitCsv() throws Exception {
111114
fileReader.close();
112115
}
113116

114-
public void splitFile() {
115-
117+
public void splitFile() throws Exception {
118+
String filePath = excelSplitToolController.getSelectFileTextField().getText();
119+
String newFilePath = filePath;
120+
if (StringUtils.isNotEmpty(excelSplitToolController.getSaveFilePathTextField().getText())) {
121+
newFilePath = StringUtils.appendIfMissing(excelSplitToolController.getSaveFilePathTextField().getText(), "/", "/", "\\") + Paths.get(newFilePath).getFileName();
122+
}
123+
int splitNumber = 0;
124+
if (excelSplitToolController.getSplitType1RadioButton().isSelected()) {
125+
File file = new File(filePath);
126+
LineNumberReader rf = new LineNumberReader(new FileReader(file));
127+
rf.skip(file.length());
128+
splitNumber = (int) Math.ceil((double) rf.getLineNumber() / excelSplitToolController.getSplitType1Spinner().getValue());
129+
saveSplitFile(filePath, splitNumber, newFilePath);
130+
} else if (excelSplitToolController.getSplitType2RadioButton().isSelected()) {
131+
splitNumber = excelSplitToolController.getSplitType2Spinner().getValue();
132+
saveSplitFile(filePath, splitNumber, newFilePath);
133+
} else if (excelSplitToolController.getSplitType3RadioButton().isSelected()) {
134+
throw new Exception("文件不支持按类拆分。");
135+
}
116136
}
117137

118138
private void saveSplitWorkbook(Sheet sheet, int splitNumber, String newFilePath) throws Exception {
@@ -272,6 +292,24 @@ private void saveSplitCsv(Iterator<CSVRecord> iterator, String newFilePath, Stri
272292
}
273293
}
274294

295+
private void saveSplitFile(String filePath, int splitNumber, String newFilePath) throws Exception {
296+
int addRowIndex = 0;
297+
int saveFileIndex = 0;
298+
LineIterator lineIterator = FileUtils.lineIterator(new File(filePath));
299+
File newFile = new File(newFilePath + "-" + (saveFileIndex++));
300+
newFile.delete();
301+
while (lineIterator.hasNext()) {
302+
String line = lineIterator.next();
303+
FileUtils.writeStringToFile(newFile, line + DirectoryTreeUtil.LINE_SEPARATOR, true);
304+
if (++addRowIndex == splitNumber) {
305+
newFile = new File(newFilePath + "-" + (saveFileIndex++));
306+
newFile.delete();
307+
addRowIndex = 0;
308+
}
309+
}
310+
lineIterator.close();
311+
}
312+
275313
private static void saveFile(Workbook workbook, String filePath) {
276314
if (workbook instanceof HSSFWorkbook) {
277315
filePath = StringUtils.appendIfMissing(filePath, ".xls", ".xls", ".xlsx");

src/main/java/com/xwintop/xJavaFxTool/utils/DirectoryTreeUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
public class DirectoryTreeUtil {
2222
private File generateFile;// 初始文件夹
2323
/* 换行符 */
24-
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
24+
public static final String LINE_SEPARATOR = System.getProperty("line.separator");
2525
/* 空字符串 */
2626
private static final String EMPTY = "";
2727
/* 文件连接符 */

0 commit comments

Comments
 (0)