JAVAday14
字符串拼接
效率比较
StringBuilder StringBuffer String
append> concat > +
- 如果+左右两边是字面值,则效率最高
public class Test04 {
public static void main(String[] args) {
test01();
test03();
test02();
String str = "ac";
}
public static void test01() {
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer("a");
for(int i = 0;i<100;i++) {
sb.append("c");
}
long end = System.currentTimeMillis();
System.out.println("append:"+(end-start));
}
public static void test02() {
long start = System.currentTimeMillis();
String sb = new String("a");
for(int i = 0;i<100;i++) {
sb = sb+"c";
}
long end = System.currentTimeMillis();
System.out.println("+号:"+(end-start));
}
public static void test03() {
long start = System.currentTimeMillis();
String sb = new String("a");
for(int i = 0;i<100;i++) {
sb = sb.concat("c");
}
long end = System.currentTimeMillis();
System.out.println("concat:"+(end-start));
}
}
String对象几种
1: new 堆开空间
2: “zhangsan” 常量池
3:+号拼接:
- 左右两边操作数如果是字面值 则直接拼接之后再常量池开空间
- 如果左右两边操作数是变量 则通过常量值重新分配空间 存储变量地址
public class Test02 {
public static void main(String[] args) {
String s1 = "Cat";
String s2 = "Dog";
final String s3 = s1+s2;// append
String s4 = "CatDog";
String s5 = "Cat"+"Dog";//s5 = "CatDog"
System.out.println(s3==s4);
System.out.println(s4==s5);
}
public static void test(Long in1){
System.out.println(in1);
}
public static void test(long in1){
System.out.println(in1);
}
}
Calendar
通过带参构造器指定时间 输出日历内容
通过无参构造器 使用当前系统时间输出日历内容 调用带参构造器
常用方法
public class Test02 {
public static void main(String[] args) {
//创建对象
Calendar c = Calendar.getInstance();
System.out.println(c);
//add 累加会增位
c.add(Calendar.DAY_OF_MONTH, 13);
System.out.println(c.get(Calendar.DAY_OF_MONTH));
System.out.println(c.get(Calendar.MONTH));
c = Calendar.getInstance();
//roll 不会增位
c.roll(Calendar.DAY_OF_MONTH, 13);
System.out.println(c.get(Calendar.DAY_OF_MONTH));
System.out.println(c.get(Calendar.MONTH));
System.out.println("===");
c = Calendar.getInstance();
//传入参数如果是当前月份之内的天数 则设置为指定的日期 如果传入的是超过了字段值的数 则会增位
c.setLenient(true);
c.set(Calendar.DAY_OF_MONTH, 32);
System.out.println(c.get(Calendar.DAY_OF_MONTH));
System.out.println(c.get(Calendar.MONTH));
}
}
File
抽象的路劲以及文件
1:创建对象是 无需注意当前路径或者是文件是否存在 都会创建出来
2:和平台无关的路劲分隔符
-
File.pathSeparator路劲结束符
-
File.separator路劲分割符
public class Test01 {
public static void main(String[] args) {
// 创建一个File对象
File f = new File("C:\\Users\\wawjy\\Desktop");
System.out.println(f);
System.out.println(File.pathSeparator);
System.out.println(File.pathSeparatorChar);
System.out.println(File.separator);
System.out.println(File.separatorChar);
f = new File("C:"+File.separator+"Users"+File.separatorChar+"wawjy"+File.separatorChar+"Desktop");
}
}
迭代输出file目录对象
public class Test04 {
public static void main(String[] args) {
//file对象
File file = new File("c:\\");
//获取当前file中的所有目录对象
File[] fs = file.listFiles();
//迭代所有file对象
for(File f:fs) {
String dateStr = new SimpleDateFormat("yyyy/MM/dd hh:mm").format(new Date(f.lastModified()));
String isDirectory = f.isDirectory()?"<DIR>":"";
String isFile = f.isFile()?String.valueOf(f.length()):"";
String FileName = f.getName();
System.out.println(dateStr+"\t"+isDirectory+"\t"+isFile+"\t"+FileName);
}
}
}
三个问题:
1: file类本身只能针对文件或者是目录的元数据(除了内容本身)进行操作 不能对于文件中的内容做任何操作。
2: 截止目前,我们存储数据的手段是很有限以及有问题的?
-
学习过的存储手段:
-
变量 对象 数组—> 存储都是在内存中的—>程序启动之后 数据存在 程序销毁之后 数据丢失
-
但是在后期真个编码、项目的过程中:
-
我们对于数据一定要持久的存储起来 方便后期使用以及更新
3: 无法将数据持久化存储起来。
-
解决办法: 通过学习IO流的知识 将数据写入到文件中去 或者读取文件中的数据信息
-
文件时存储在磁盘上的,电脑关机之后,主要文件保存,那么开机之后数据还在。
Io
分类
按照输出的数据类型不同 |
---|
字节流 输出/输入时 按照字节输出/输入 |
字符流 输出/输入时 按照字符输出/输入 |
按照流的方向 |
输入流 |
输出流 |
按照处理功能 |
节点流 |
处理流 |
字节流
InputStream 是所有字节流的父类
-
输入 :
-
子类:
FileInputStream: 文件字节输入流 数据源在文件中 读取按照字节读取 流的方向是输入
//创建对象
File file = new File("C:\\Users\\wawjy\\Desktop\\cc.txt");
InputStream is = new FileInputStream(file);
//读取数据
int bit = is.read();
//输出数据
System.out.println("读取到的数据是:"+(char)bit);
每次读取数据时 只能读一个字节,在通过read方法读取时如果
- 读取到了文件末尾,返回-1
- 循环读取
- FileInputStream 创建要保证文件存在
字节输出流
-
所有字节输出流的父类都是OutputStrean
-
子类:FileOutputStrean 输出的目的地是文件 输出流 输出的类型是字节
-
输出时 如果文件不存在会创建该文件 但是不会创建目录
public static void main(String[] args) throws IOException {
//创建对象
OutputStream os = new FileOutputStream("aaa.a",true);
//声明写出的数据
String msg = "laoxuezhideniyongyou";
//写出数据
os.write(msg.getBytes(),0,10);
//关闭资源
os.close();
}
}
tips:
创建FileOutputStream对象时 第二个参数boolean值 说明是否在当前文件后追加内容
- 默认情况是false 不追加
- true是追加