Calendar还可以这样处理,你懂吗?

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是追加
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值