자바 줄 별로 큰 파일 분할 실현
작업 을 할 때,큰 텍스트 파일 을 줄 별로 몇 개의 작은 파일 로 나 누 어야 한다.쓰기 가 귀 찮 았 는데 인터넷 에서 복사 해 보 려 고 했 는데 구 글 이 코드 를 몇 개 찾 아 보 니 어 지 럽 게 썼 습 니 다.시도 해 보 니 효율 이 너무 느 려 서 1000000 줄 이 었 습 니 다. 200 M 의 파일 은 각 파일 의 2000 줄 로 나 누 어 6 분 여 걸 려 야 완 주 할 수 있다.어 쩔 수 없 이 직접 써 봤 어 요.몇 번 해 봤 는데 거의 4 초 안에 뛰 었 어 요.붙 여서 기록 하고 다음 에 쓰 면 바로 복사 해서 써 요.
코드
public static List<File> splitDataToSaveFile(int rows, File sourceFile, String targetDirectoryPath) {
long startTime = System.currentTimeMillis();
List<File> fileList = new ArrayList<>();
log.info(" ");
File targetFile = new File(targetDirectoryPath);
if (!sourceFile.exists() || rows <= 0 || sourceFile.isDirectory()) {
return null;
}
if (targetFile.exists()) {
if (!targetFile.isDirectory()) {
return null;
}
} else {
targetFile.mkdirs();
}
try (FileInputStream fileInputStream = new FileInputStream(sourceFile);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
StringBuilder stringBuilder = new StringBuilder();
String lineStr;
int lineNo = 1, fileNum = 1;
while ((lineStr = bufferedReader.readLine()) != null) {
stringBuilder.append(lineStr).append("\r
");
if (lineNo % rows == 0) {
File file = new File(targetDirectoryPath + File.separator + fileNum + sourceFile.getName());
writeFile(stringBuilder.toString(), file);
//
stringBuilder.delete(0, stringBuilder.length());
fileNum++;
fileList.add(file);
}
lineNo++;
}
if ((lineNo - 1) % rows != 0) {
File file = new File(targetDirectoryPath + File.separator + fileNum + sourceFile.getName());
writeFile(stringBuilder.toString(), file);
fileList.add(file);
}
long endTime = System.currentTimeMillis();
log.info(" , :{} ", (endTime - startTime) / 1000);
} catch (Exception e) {
log.error(" ", e);
}
return fileList;
}
private static void writeFile(String text, File file) {
try (
FileOutputStream fileOutputStream = new FileOutputStream(file);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter, 1024)
) {
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.