小編這次要給大家分享的是Java如何實(shí)現(xiàn)按行分割大文件,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站10年經(jīng)驗(yàn)成就非凡,專業(yè)從事網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)頁制作,軟文平臺(tái),一元廣告等。10年來已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:18980820575,我們期待您的來電!簡(jiǎn)介
工作的時(shí)候,需要將一個(gè)大的文本文件按行分割成幾個(gè)小文件。本來懶得寫,想網(wǎng)上copy一下得了,但是 google 了一遍,找了幾個(gè)代碼寫的有點(diǎn)亂,嘗試了之后發(fā)現(xiàn)效率太慢了,一個(gè) 1000000 行 200M 的文件,按每個(gè)文件 2000 行分割,要6分多鐘才能跑完。沒辦法自己寫了個(gè),試了幾次,基本都是 4 秒內(nèi)跑完,貼出來記錄下,下次用就直接 copy 出來用。
代碼
public static ListsplitDataToSaveFile(int rows, File sourceFile, String targetDirectoryPath) { long startTime = System.currentTimeMillis(); List 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\n"); 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("分割文件結(jié)束,耗時(shí):{}秒", (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(); } }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。