生活随笔
收集整理的這篇文章主要介紹了
Java io流实现文件分割
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網絡上傳文件的時候,當一個文件很大時,就需要將文件分割成幾個文件,以便于網絡傳輸。用java來實現這個功能,思路如下:利用io流讀取文件,然后再將文件字節分成對應的字節,再寫入文件。為了加快讀取文件效率,每讀取每一塊數據,創建一個線程;如果文件有100M,每次分割1M,那么按照如上的代碼就會創建100個線程,可以加入線程池解決無論多少個線程,每次只執行指定個數的線程數
代碼實現如下:
package com
.hzl
.java
.File
;import java
.io
.File
;
import java
.io
.FileOutputStream
;
import java
.io
.RandomAccessFile
;
import java
.util
.UUID
;
import java
.util
.concurrent
.ExecutorService
;
import java
.util
.concurrent
.Executors
;public class Main4 {public static void main(String
[] args
) {String basefile
= "d:data/";new File(basefile
).mkdir();String filename
= "d:readme.txt";String suf
= filename
.substring(filename
.lastIndexOf("."));long length
= (new File(filename
)).length();int sonfile
= 10;int times
= (int) Math
.ceil(length
/ (float) sonfile
);ExecutorService threadPool
= Executors
.newFixedThreadPool(times
);for (int i
= 0; i
< times
; i
++) {final int j
= i
;String newfilename
= UUID
.randomUUID().toString();threadPool
.execute(() -> {try (RandomAccessFile randomAccessFile
= new RandomAccessFile(filename
, "rw");FileOutputStream fileOutputStream
= new FileOutputStream(basefile
+ newfilename
+ suf
);) {int pos
= sonfile
* j
;randomAccessFile
.seek(pos
);byte[] buf
= new byte[sonfile
];int size
= randomAccessFile
.read(buf
);fileOutputStream
.write(buf
, 0, size
);} catch (Exception e
) {e
.printStackTrace();}});}System
.out
.println("文件分割完成");threadPool
.shutdown();}}
運行結果如下:
總結
以上是生活随笔為你收集整理的Java io流实现文件分割的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。