Java切割文件、合并文件
生活随笔
收集整理的這篇文章主要介紹了
Java切割文件、合并文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java后端開發,有時候會碰到大文件操作,這時候就需要堆大文件進行分割操作,左后最合并
導入依賴工具:
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId> </dependency>自定義工具類:
/*** @version v1.0* @description: {單文件切割 、碎片文件合并}* @author: admin*/ public class SplitMergeFileUtil {private static final Logger LOGGER = LoggerFactory.getLogger(SplitMergeFileUtil.class);/*** @param targetFileName 目標文件路徑* @param saveDir 存放的目錄* @param saveFileName 生成文件的前綴名* @param suffix 生成文件的后綴名* @param splitSize 每一個文件 多少行數據*/public static void splitFile(String targetFileName, String saveDir, String saveFileName, String suffix, long splitSize) throws Exception {if (!saveDir.endsWith("\\")) {saveDir += File.separator;}File saveDirFile=new File(saveDir);if(!saveDirFile.exists()){saveDirFile.mkdirs();}File targetFile = new File(targetFileName);if (!targetFile.exists()) {throw new Exception("目標路徑:[ " + targetFileName + " ] 有錯誤...");}//輸入緩沖流BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(targetFileName), StandardCharsets.UTF_8));String str = null;//行數long len = 0;System.out.println("開始寫入......請等待......");long startTime = System.currentTimeMillis();//輸出緩沖流BufferedWriter writer = null;while ((str = reader.readLine()) != null) {//當前行文件long txtSize = (len/splitSize) + 1;String fileName = saveDir + saveFileName + txtSize + "." + suffix;//使用BufferedWriter如果 不進行 flush或者close 寫入不了內容。writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, true)));writer.write(str + System.lineSeparator());writer.flush();len++;}assert writer != null;writer.close();reader.close();}/*** 切割指定源文件* @param srcFile 指定要切割的源文件* @param outputDir 指定輸出目錄* @param size 切割大小* @param prefix 件名前綴* @param suffix 文件名后綴* @param* @throws IOException 有異常時拋出,由調用者處理*/public static void split(File srcFile, String outputDir,String prefix, String suffix, int size) throws IOException {File outFile=new File(outputDir);if(!outFile.exists()){outFile.mkdirs();}try (FileInputStream inputStream = FileUtils.openInputStream(srcFile);) {byte[] buffer = new byte[size];int len = 0;for (int i = 0; (len = IOUtils.read(inputStream, buffer)) > 0; i++) {String fileName=suffix+i+"."+suffix;LOGGER.info("開始執行切割文件fileName="+fileName);File temp = FileUtils.getFile(outputDir, fileName);FileUtils.writeByteArrayToFile(temp, buffer, 0, len);LOGGER.info("結束執行切割文件fileName="+fileName);}}}/*** 合并文件* @param inputDir 碎片輸入目錄* @param destDir 合并目標文件目錄* @param destName 合并后文件名稱* @throws IOException 有異常時拋出,由調用者處理*/public static void combine(String inputDir, String destDir,String destName ) throws IOException {File destDirFile=new File(destDir);if(!destDirFile.exists()){destDirFile.mkdirs();}File inputPath = FileUtils.getFile(inputDir);String[] files = inputPath.list();try (FileOutputStream outputStream = FileUtils.openOutputStream(new File(destDir+destName))) {// 按文件名排序assert files != null;Arrays.sort(files);for (String fileName : files) {LOGGER.info("combineFormChips遍歷指定目錄的文件fileName="+fileName);File file = FileUtils.getFile(inputPath, fileName);byte[] data = FileUtils.readFileToByteArray(file);IOUtils.write(data, outputStream);}} catch (Exception e) {LOGGER.info("合并文件異常{}" + e.toString());}}public static void main(String[] args){try {split(new File("D:/download/NIO緩沖區.avi"),"D:/download/nio/","newNio","avi",30*1024*1024);combine("D:/download/nio/","D:/download/comnio/","combineNewNio.avi");} catch (Exception e) {e.printStackTrace();}}}?
總結
以上是生活随笔為你收集整理的Java切割文件、合并文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言开发tuxedo客户端,Tuxed
- 下一篇: IBM DS存储多路径