在Java中實現檔案的分割與合併

2021-06-28 03:33:38 字數 1205 閱讀 2050

對打檔案進行分割,分割成固定大小的檔案,並存放與指定的目錄,可以指定分割的大小。**如下:

/**

* @description

* @param filepath 檔名稱,包括路徑

* @param filterfolder 分割檔案存放目錄

* @param filesize 分割檔案大小

* @throws ioexception

*/public static void cutfile(string filepath, string filterfolder, int filesize) throws ioexception

outfile.close();

} if(readedlen

/*** @description unit files

* @param outfilename 合併檔名稱

* @param filefolder 被合併檔案所在目錄

* @param filtername 被合併檔名過濾條件

* @throws ioexception

*/public static void unitfile(string outfilename, string filefolder, final string filtername) throws ioexception

});randomaccessfile out = new randomaccessfile(outfile, "rw");

for (file file : infiles)

out.close();

}

兩個方法都是採用的隨機讀寫流對檔案進行讀寫的。

這樣存在兩個問題:

分割檔案中,採用單個位元組讀取方式的優點是,可以將檔案分割的大小精確到位元組。但對中文進行分割就會出現大小有上下浮動,同時存在將乙個中文分割成兩個位元組存放到兩個檔案中。

合併檔案中,根據上面的方法,不能對被合併的檔案進行排序,既合併時,檔案順序是按照檔名稱排序的,這種情況下,如果檔名中有數字,就會出現混亂的情況。

測試**很簡單就不貼上了。

上面的兩個問題解決方案:

對於有中文的檔案分割,推薦使用字元流取代位元組流進行讀取;

檔案合併中,取得檔案列表後,使用集合對檔案按照檔名稱進行排序即可。

如果你感興趣,測試**和解決上面兩個問題的**不妨去實現一下吧。

實現檔案的分割和合併

讀取需要被分割的檔案,將該檔案以n份讀取到不同的臨時檔案中。int index 1 每個讀取100kb int len 1 byte buf newbyte 1024 100 while len fis.read buf 1 fis.close 封裝被分割檔案的目錄,過濾掉不需要的檔案得到所有被分割...

在sql中實現字串分割(函式)

set ansi nulls on set quoted identifier on goalter function dbo f split sourcesql varchar 8000 strseprate varchar 10 returns temp table a varchar 100 ...

C 分割檔案路徑中的檔名與路徑

int lastindex filepath.lastindexof 的意思是,乙個是轉義,乙個是代表斜槓 string pfilepath filepath.substring 0,lastindex 檔案路徑 string pfilename filepath.substring lastind...