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]);
    }
   }
  }
 }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值