今天又是累死的節奏,學習String和StringBuffer,基本數據類型包裝類,感覺這個真簡單不難.但是後來的集合接口及其子類就學的有點吃力了,但是自己整理了一下.
1.集合的幾個主要接口:
1)、List接口及其實現類
List接口繼承於Collection接口。 List接口及其實現類是容量可變的列表,可按索引訪問集合中的元素。
特點:集合中的元素有序、可重複;
實現類:
· ArrayList是以Arayy方式實現的List,允許快速隨機存取,相對於LinkedList不適合進行插入和移除元素操作;
· LinkedList提供最佳順序存取,適合插入和移除元素。
2)、Set接口及其實現類
Set接口同樣繼承於Collection接口。
特點:集合中的元素無序、不包含重複的元素。
實現類:
· HashSet 能夠快速定位一個元素,要注意的是:存入HashSet中的對象必須實現HashCode()方法;
· TreeSet 將放入其中的元素按序存放。
3)、Map接口及其實現類
Map是一個單獨的接口,不繼承於Collection。Map是一種把鍵對象和值對象進行關聯的容器。
特點:鍵對象不允許重複。
實現類:
· HashMap 實現一個鍵到值映射的哈希表,通過鍵取得值對象;
· Properties 一般是把屬性文件讀入流中後,以鍵-值對的形式進行保存,以方便讀取其中的數據。
4)、Iterator接口
Iterator接口位於java.util包中,它是一個對集合進行迭代的迭代器。
2.IO流:
學習了字符流和字節流,花了三個小時寫了一個文件分割器,可應用了將一個大文件分爲幾個小文件.爲什麼要寫這個呢,我常常遇到這個問題,由於某個小說文件
太大,用手機看的時候就感覺加載很慢,想把一個長篇小說分成5份,10份這樣子,看起來也方便,比如一個小說爲<三國演義> 共計10M,現在分成5個小文件,分成爲三國演義1.txt,三國演義2....直到 三國演義5.txt 每個文件大概2M,這樣看起來比較方便. 絕無參考其他代碼,java源代碼如下:
運行效果:
package fileOperation;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.StringTokenizer;
public class FilePartition {
/**
* @describe 拆分文件
* @author wpy 2014-9-20
*/
public static void main(String[] args) throws IOException {
// 需要指定的參數
File file = new File("E:\\Test\\明朝那些事兒.txt");// 源文件目錄
int filenumber = 5; // 拆分成文件的個數
long startTime = System.currentTimeMillis();
BufferedReader br = new BufferedReader(new FileReader(file));
StringBuffer sb = new StringBuffer();// 讀入的字符暫存到String
String lineContent = null; // 讀到的當前行
String filename = file.getName();
String filepath = file.getParent();
String subfilename = "";
String subfilepath = "";
subfilepath = filepath.replace('\\', '/') + "/"
+ filename.substring(0, filename.length() - 4);// 注意反斜槓的轉義
File newpath = new File(subfilepath);
if (newpath.exists())
deleteAllFile(newpath.getAbsolutePath());// 刪除文件下所有
else
newpath.mkdirs(); // 生成filename這個文件夾 把子文件都放入這個文件
// 統計總共行數
long linecount = 0;
// br.mark(65535);//標記流的位置
while ((lineContent = br.readLine()) != null) {
linecount++;
}
// br.reset();//回到標記位
br.close();
br = new BufferedReader(new FileReader(file));
long everyfilereadline = linecount / filenumber;
String filenames[] = new String[filenumber];
// 子文件名字數組
for (int i = 0; i < filenumber; i++) {
subfilename = subfilepath + "/"
+ filename.substring(0, filename.length() - 4) + (i + 1)
+ ".txt";
subfilename = subfilename.replace('\\', '/');
filenames[i] = subfilename;
}
long nowline = 0;
int nowfilenumber = 0;
PrintWriter pw;
pw = new PrintWriter(filenames[0]);// 第一個子文件
System.out.println("\ncreate file :"+filenames[0]);
while ((lineContent = br.readLine()) != null) {
if (nowline == everyfilereadline) {
nowline = 0;// 行數清零
pw.write(sb.toString());
pw.close();
// 生成下一個子文件
sb = new StringBuffer();
nowfilenumber++;// 當前文件數+1
if (nowfilenumber < filenumber) {
System.out.println("create file :"+filenames[nowfilenumber]);
pw = new PrintWriter(filenames[nowfilenumber]);// 由於開始是在上次的基礎上加1
}
}
// 注意 分隔符不能在原文中有 否則copy不正確 最好找個外文字符
StringTokenizer st = new StringTokenizer(lineContent, "ほ");
for (int t = 0; st.hasMoreElements(); t++) {
String word = (String) st.nextElement();
sb.append(word);
}
sb.append("\r\n");// 回車並換行 \n是不行的
nowline++;
}
if (pw != null) {
pw.write(sb.toString());// 寫入最後一個文件
pw.close();
}
br.close();
long endTime = System.currentTimeMillis();
System.out.println("共用時 :" + convertTime(endTime - startTime));
}
public static String convertTime(Long time) {
long hour = time / 1000 / 60 / 60;
long seconds = time / 1000 % 60;
long minute = time / 1000 / 60 % 60;
long millisecond = time % 1000;
return hour + ":" + minute + ":" + seconds + ":" + millisecond;
}
public static void deleteAllFile(String delpath) {// 刪除文件或者文件夾下所有文件
File file = new File(delpath);
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File delfile = new File(delpath + "\\" + filelist[i]);
System.out.println("delete original File =" + delfile.getName());
if (delfile.isFile()) {
delfile.delete();
} else if (delfile.isDirectory()) {
deleteAllFile(delpath + "\\" + filelist[i]);
}
}
}
}
}