今天又是累死的节奏,学习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]);
}
}
}
}
}