八、Java实用类

  • 一、Math类

Math类中包含了一组数学函数

  1. 截取:ceil、floor、round(四舍五入)
  2. 变量的:max、min、abs
  3. 三角函数:sin、cos、tan、asin、acos、atan、toDegrees和toRadians
  4. 对数指数:log和exp
  5. 其它:sqrt、pow、random(随机数)
  6. 常数:PI、E

两种方式产生随机数:Random类和random()方法

0到9的整数型随机数字::(int)(Math.random()*10)

随机的小写字符:(char)(‘a’+Math.random()*(‘z’-‘a’+1))

Math内的方法及变量都是静态的,即都用static修饰

public class TestMath{
	public static void main(String[] args){
                System.out.println(Math.round(-3.14));
		//得到一个随机数
		double d = Math.random();
		System.out.println(d);
		//计算半径为10的圆的周长
		double p = 2*Math.PI*10;
		System.out.println(p);
	}	
}
  • 二、时间日期类

三个日期类

  1.  java.util.Date:(保存到1970-01-01 00:00:00的毫秒数);  
  2. java.text.DateFormat:对日期进行格式化;  
  3. java.util.Calendar:日历;

java.util.Date

Date以毫秒数表示特定时间:

Date date = new Date();
System.out.println(date.getTime());
System.out.println(date);

默认构造方法:调用如下语句

 System.currentTimeMillis();

java.sql.Date(只有日期部分[年月日],没有时间部分)是java.util.Date(包含有时区年月日小时分秒毫秒)的子类

只有与数据库相关才会使用java.sql.Date,否则都使用java.util.Date

        public static void main(String[] args) {

		Date d1 = new Date();
		System.out.println(d1);
		//Date类的getYear()方法被标记为过时,不建议我们使用
		System.out.println(d1.getYear() + 1900);
		System.out.println(d1.getTime());
		System.out.println(System.currentTimeMillis());
		
	}

DateFormat类

该类是一个抽象类,开发时应使用它的具体子类:SimpleDateFormat:

Date date = new Date();
SimpleDateFormat f = new SimpleDateFormat(“yyyy-MM-dd”);
System.out.println(f.format(date));

/*
    * 自定义日期时间格式
    * HH:表示24小时进制的时间
    * hh:表示12小时进制的时间
*/
SimpleDateFormat f = new SimpleDateFormat(“yyyy-MM-dd  HH:mm:ss”);
System.out.println(f.format(date));

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");//到毫秒
            public static void main(String[] args) {		
		
		SimpleDateFormat sdf1  = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		SimpleDateFormat sdf2  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d3 = null;
		Date d4 = null;
		
		try {
			//将字符串格式的日期转换成Date类型
			d3 = sdf1.parse("2011/11/14 08:56:22");
			d4 = sdf2.parse("2011-11-14 08:56:22");
		} catch (ParseException e) {
			e.printStackTrace();
		}
		System.out.println(d3);
		System.out.println(d4);
		
	}

SimpleDateFormat两个作用:1、将date对象日期格式化成字符串格式的日期   2、将字符串格式的日期转换成date对象

DateFormat 的静态方法: getDateTimeInstance(int dateStyle,int timeStyle);

Calendar类

Calendar代表系统的日历

    //获取Calendar类的实例对象,只能调用该类的getInstance静态方法   
   Calendar  calendar  =  Calendar.getInstance(); 
   calendar.setTime(date);  
   calendar.add(Calendar.MONTH,2);//0-11表示12个月
   //加一个负整数,即代表减法操作
   calendar.add(Calendar.DAY_OF_YEAR,  -1);   
   calendar.get(java.util.Calendar.YEAR) ;
public static void main(String[] args) {
		
		//获取Calendar类的对象,只能通过该类的getInstance()方法取得,该方法会根据当前的系统时间创建Calendar类型的对象,不能自己new,
		Calendar c = Calendar.getInstance();
		System.out.println(c);
		//示例1:getTime()方法会根据当前Calenda类型的对象内部的时间,生成一个Date类型的对象,并返回生成的Date对象
		System.out.println(c.getTime());		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		System.out.println(sdf.format(c.getTime()));
		
		
		//示例2:
	
//		int year = c.get(c.YEAR);
//		//注:Calendar日历对象中表示月份是从0开始的,即0代表1月份,以此类推,11代表12月份,下面将月份加1是为了让用户看到实际显的当前月份,否则容易误解
//		int month = c.get(c.MONTH) + 1;
//		int day = c.get(c.DAY_OF_MONTH);
//		int hour = c.get(c.HOUR_OF_DAY);
//		System.out.println(year + "年" + month + "月" + day + "日" + "  " + hour + "点");
		
		
		//示例3:		
		//设置当前c对象代表的日历月份,不会影响到当前系统时间
//		c.set(c.MONTH, 5);
//		c.add(c.MONTH, 1);//将月份加1
//		System.out.println(c.get(c.MONTH));
//		System.out.println(c.get(c.DAY_OF_MONTH));
//		//此时c2对象代表的日历仍然是当前系统时间,因此获取到的月份为10,即代表当前是11月份
//		Calendar c2 = Calendar.getInstance();
//		System.out.println("c2日历的当前月份为:" + c2.get(c2.MONTH));
		
		
		//示例4:
		//将天加上300天
//		c.add(c.DAY_OF_MONTH, 300);
//		System.out.println(c.get(c.MONTH));
//		System.out.println(c.get(c.YEAR));
//		System.out.println(c.get(c.DAY_OF_MONTH));
	}
  • 三、String类与StringBuffer类回顾

String类

String对象代表一组不可改变的Unicode字符序列

它的方法可用来创造新的字符串:concat、replace、substring、toLowerCase、toUpperCase和trim。

查找字符的方法:endWith、startWith、 indexOf、 lastIndexOf。

比较字符串的方法:equals、equalsIgnoreCase、compareTo。

其它:charAt、length()

String对象的创建

方法一: String s = new String("This is a string");

方法二: String s = "This is another string";

String s1 = "Test";    //line 1
String s2 = "Test";    //line 2
知识点:字符串池(共享池)

        public static void main(String[] args) {
		
		String name1 = "lucy";//去共享池中查看是否存在该内容的对象,若无则会创建并将创建的对象放入字符串共享池
		String name2 = "lucy";//去共享池中查看已存在则不会再创建,指向同一对象
		String name3 = new String("Lucy");//使用new关键字不会将创建的对象放入共享池
		String name4 = new String("Lucy");
		String name5 = "Lucy";
		System.out.println("name1 == name2: " + (name1 == name2));//true
		System.out.println("name3 == name4: " + (name3 == name4));//false
		System.out.println("name3 == name5: " + (name3 == name5));//false
		
	}

String只要内容发生变化就产生了新的字符串对象,原有的字符串对象内容不变

        public static void main(String[] args) {
		
		String name1 = "luuy6";
		String name2 = name1.concat("-new");//把name1中的字符串与"-new"字会串合并,然后返回合并后的字符串,不会影响到原name1字符串中的内容
		System.out.println("name1 = " + name1);
		System.out.println("name2 = " + name2);
		System.out.println("-----------------------");
		String name3 = name1.replace('u', 'o');//把name1中的字符串中的u全部替换成o,并返回替换后的字符串,不会影响到原name1字符串中的内容
		System.out.println("name1 = " + name1);
		System.out.println("name3 = " + name3);
		System.out.println("-----------------------");
		//如果substring()方法只有一个参数时,表示从这个下标位置开始,一直截取到字符串的末尾,并把截取到的字符串返回,此时并不影响name1字符串
		String name4 = name1.substring(1);
		System.out.println("name1 = " + name1);
		System.out.println("name4 = " + name4);
		//从字符串的索引下标从0开始,即0代表字符串的第1个字符,下面的示例,表示从字符串下标索引1开始,截取5-1个长度的字符串,即从索引下标1开始,截取4个字符,然后形成新的字符串返回
		String name5 = name1.substring(1,5);
		System.out.println("name5 = " + name5);
		
	}

StringBuffer类

StringBuffer对象代表一组可改变的Unicode字符序列

构造器:

  1. StringBuffer()  创建一个空的字符缓冲,长度为16个字符容量;
  2. StringBuffer(int capacity) 用指定的初始容量创建一个空的字符缓冲;
  3. StringBuffer(String  initString) 创建包含initString的字符缓冲,并加上16个字符的备用空间。
public class StringBuffer_Demo {

	public StringBuffer getStringBuffer(StringBuffer sb2){
		
		sb2.append("11");
		return sb2;
	}
	
	public static void main(String[] args) {
		StringBuffer_Demo sd = new StringBuffer_Demo();
			
		StringBuffer sbb = new StringBuffer("abc");
		System.out.println(sbb.toString());//abc
		sd.getStringBuffer(sbb);//虽然没有接收返回值,但改变了原有对象的内容
		System.out.println(sbb.toString());//abc11
		
	}

}

如果传递的参数是简单数据类型的,那么传的就是这个值;如果是引用类型就是地址

  • 四、File类

磁盘内的文件是由操作系统管理的,程序要想操作磁盘中的文件要以对象的形式(File类)指向磁盘中的文件

File类无需释放

File只能获取文件的基本信息(文件名、大小、路径、重命名等),内容信息是获取不到的;内容信息只能通过IO流来操作

目录是一种特殊的文件,它是文件的集合(磁盘上存储的东西都被称为文件)

File对象能指向两类:1、普通文件   2、目录

File对象常用方法

1、和文件名相关

String  getName()
String  getPath()
String  getAbsolutePath()
String  getParent()
boolean  renameTo(File newName)

2、文件检测

boolean  exists()
boolean  canWrite()
boolean  canRead()
boolean  isFile()
boolean  isDirectory()
boolean  isAbsolute()//基本不用

3、获取常规文件信息

long lastModified()//返回最后一次修改的时间,是一个长整型的数字
long length()//返回文件大小,单位字节B
boolean delete()//删除文件

 4、目录操作

boolean mkdir()//若父目录不存在,则不会创建目录
boolean mkdirs()//若父目录不存在,会先创建父目录再创建所需目录,基本都用这个
String[] list()//列出某一个目录中文件的名字,存到一个数组中

示例一 :File对象指向目录/文件

import java.io.File;
import java.io.IOException;

public class File_Demo_1 {

	public static void main(String[] args) {
		//File对象既可以指向(代表)文件,也可以指向(代表)目录
		//File对象指向目录示例
		File dir = new File("c:/demo");	
		if(dir.isDirectory()){
			System.out.println("dir是目录");
		}
		System.out.println("目录名:" + dir.getName());
		System.out.println("绝对路径:" + dir.getAbsolutePath());
		System.out.println("父路径:" + dir.getParent());
		
		System.out.println("=====================");
		
		//File对象指向文件示例
		File file = new File("c:/优惠券.doc");
		if(file.isFile()){
			System.out.println("file是文件");
		}		
		System.out.println("文件名:" + file.getName());
		System.out.println("父路径:" + dir.getParent());

	}

}

示例二:重命名

	public static void main(String[] args) {
		
		File file = new File("c:/优惠券.doc");
		//文件重命名,如果重命名成功,则返回true,否则返回false
		//注意:文件重命名,一定要指定路径,否则如果不指定文件路径,直接写新文件名,则原文件将会被删除,切记!!!
		boolean a = file.renameTo(new File("c:/优惠券222.txt"));
		System.out.println(a);
		
		File file2 = new File("c:/demo/JAVA编码规范0.91.pdf");
		System.out.println(file2.getParent());
		file2.renameTo(new File(file2.getParent() + "/" + "JAVA编码规范0.91zzzzz.pdf"));
	   
	}

示例三:文件是否存在,如果不存在,则创建文件,如果指向的文件存在,则删除

        public static void main(String[] args) {
		
		//测试指向的文件是否存在,如果不存在,则创建文件,如果指向的文件存在,则删除
		File file = new File("c:/abc.txt");
		if(!file.exists()){
			System.out.println("文件不存在,系统将创建文件。。。");
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}else{
			System.out.println("文件存在,系统将删除文件。。。");
			file.delete();
		}

	}

示例四:删除指定目录中的所有文件

        public static void main(String[] args) {
		
		//删除指定目录中的所有文件
		File file = new File("c:/demo");
		File[] tempFile = file.listFiles();//返回指定目录中的所有文件
		if(tempFile != null && tempFile.length >0){
			for(int i = 0; i< tempFile.length; i++){
				//判断当前的File对象指向的是否为文件,如果是则删除
				if(tempFile[i].isFile()){
					tempFile[i].delete();
				}
			}
		}
		//当指定目录中的文件全部删除完毕后,删除该目录,如果目录不为空,则目录删除不了
		file.delete();

	}

示例五:创建目录

	public static void main(String[] args) {
		
		//创建目录示例
		File fd = new File("c:/a/b/c");
		if(!fd.exists()){
			System.out.println("make dirs...");
			fd.mkdirs();//连同父目录a也一同创建,再创建目录b
			//fd.mkdir();//不会创建目录b,因为父目录a不存在
		}
	}

示例六:采用递归(自己调用自己)方式遍历文件夹中的所有目录和文件

import java.io.File;

public class File_Demo_6 {

	//采用递归方式遍历某一目录中的全部内容
	public void getFileInfo(String dir){
		
		File f = new File(dir);
		File[] files = f.listFiles();
		if(files != null && files.length > 0){
			for(int i = 0; i < files.length; i++){
				if(files[i].isDirectory()){
					System.out.println("目录名:" + files[i].getName());
					getFileInfo(files[i].getAbsolutePath());
				}else{
					System.out.println("文件名:" + files[i].getName());
				}
			}
		}
	}
	
	public static void main(String[] args) {
		
		String dir = "c:/demo";
		File_Demo_6 fi = new File_Demo_6();
		fi.getFileInfo(dir);

	}

}

文件过滤

编写过滤器:编写一个类实现FilenameFilter接口并实现accept方法

import java.io.File;
import java.io.FilenameFilter;

public class FileFilterImpl implements FilenameFilter {
	
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(".txt");
	}
	
	//FileFilterImpl类,还可以包括其它别的方法
	public void aa(){
		
	}
}

实际使用

    public static void main(String[] args) {
				
		File f = new File("c:/demo");
		//在遍历目录中的文件时,传入了一个FilenameFilter类型的过滤器,这时如果不符合这个过滤器指定的扩展名的文件将不进行提取
		//本例中我们自定义的FileFilterImpl过滤器指定返回.txt文件,如果文件的扩展名不是.txt则不进行提取
		File[] files = f.listFiles(new FileFilterImpl());
		if(files != null && files.length > 0){
			for(int i= 0; i< files.length; i++){
				System.out.println(files[i].getName());
			}
		}
	}
  1. 通过在File中的list()方法中加入FileNameFilter参数,可以只将满足条件的文件列出来
  2. FilenameFilter是一个接口,只有一个accept()方法需要实现
  3. File[] files=new File("c:\\jdk14\\").listFiles(new FileFilter1());
  4. java.io.File类封装了文件对象
  5. 创建文件对象
  6. 在Java中,将文件路径也当作文件来处理
  //创建文件对象
  File  myFile;
  myFile = new File("myfile.txt");
  myFile = new File("c:/dir", "myfile.txt");//第1个参数指明目录位置,第2个参数指明文件名称
  • 五、Properties类
  1. Properties类实现了从名字(键)到值的映射。  
  2. propertyNames()方法:返回一个包含所有属性名的Enumeration(迭代器)对象,Enumeration就是一个集合。  
  3. getProperty(“propertyName”)方法:根据指定的属性名获取该属性名对应的属性值,该方法的返回值为String类型。  
  4. 使用load()[读取]或store()[存储]方法:可以从文件读入属性集或将属性集写入文件。  
  5. Properties类在java.util包中

注:store()方法无法直接保存中文信息,只能以unicode形式保存非ASCII字符

系统属性示例

import java.util.Properties;
import java.util.Enumeration;

public class TestProperties {
  public static void main(String[] args) {
    Properties props = System.getProperties();
    Enumeration prop_names = props.propertyNames();
    while ( prop_names.hasMoreElements() ) {
       String prop_name = (String) prop_names.nextElement();
       String prop_value = props.getProperty(prop_name);
       System.out.println("properties_name: " + prop_name);
       System.out.println("properties_value: " + prop_value);
    }
  }
}

load()将读取磁盘中XX.properties文件的内容转化成键值对映射

Properties p = new Properties();
FileInputStream fis = new FileInputStream("c:/test.txt");
p.load(fis);
Enumeration prop_names = p.propertyNames();
//下面开始遍历
  • 六、Deprecation(不推荐)

Deprecated关键字可用于标记类、属性和方法,表明这些类,属性或方法已过时、不再提倡使用

Deprecated标记的部分均存在相应的替代类、属性或方法,这些替代者可能采用了更标准化的命名惯例或功能更适用

如何使用 Deprecated?

public class Demo{

    @Deprecated
    public void sign(){ //此方法标记为过时的,不建议使用
        …
    }
    public String getName(){
        …
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值