자바 줄 별로 큰 파일 분할 실현

2853 단어 자바분할 파일
간단 한 소개
작업 을 할 때,큰 텍스트 파일 을 줄 별로 몇 개의 작은 파일 로 나 누 어야 한다.쓰기 가 귀 찮 았 는데 인터넷 에서 복사 해 보 려 고 했 는데 구 글 이 코드 를 몇 개 찾 아 보 니 어 지 럽 게 썼 습 니 다.시도 해 보 니 효율 이 너무 느 려 서 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(); } }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기