3. String/集合類/IO流學習

 

今天又是累死的節奏,學習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]);
    }
   }
  }
 }

}

 

 

發佈了24 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章