其他类、IO流

本文深入探讨了信息技术领域的核心内容,包括但不限于前端开发、后端开发、移动开发、游戏开发、大数据开发、开发工具等多个细分领域。文章详细介绍了各领域的关键技术、工具和实践案例,旨在为读者提供全面的技术视野和实际操作指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



System类
          
          1.System类中的字段和方法都是静态的。

          2.常见方法:
            
              long currentTimeMillis();获取当前时间的毫秒值,可以通过此方法检测程序的执行时间。
              Properties getProperties();确定当前的系统属性。
              Properties集合中存储的都是String类型的键和值。最好使用它自己的存储和取出的方法来完成元素的操作。

示例:

import java.util.*;
class  SystemDemo
{
	public static void main(String[] args) 
	{
		Properties prop = System.getProperties();

		//因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。
		//那么可以通过map的方法取出该集合中的元素。
		//该集合中存储都是字符串,没有泛型定义。


		//如何在系统中自定义一些特有信息呢?
		System.setProperty("mykey","myvalue");


		//获取指定属性信息
		String value = System.getProperty("on.name");

		System.out.println("value="+value);

		
		//可不可以在JVM启动时,动态加载一些属性信息呢?
		String v=System.getProperty("haha");

		String.out.println("v="+v);

		/*
		//获取所有属性信息。
		for(Object obj : prop.keySet())
		{
			String value = (String)prop.get(obj);
			
			System.out.println(obj+"::"+value);
		}
		*/
		
	}
}

Runtime类

        1.Runtime类没有提供构造函数(构造函数被私有化),不能创建对象,每个Java程序都有一个Runtime类实例,可通过getRuntime()            方法获取;

        2.static Runtime getRuntime()//该方法返回本类对象;要想使用该类中的方法,可先调用该方法,获取对象;

        3. 常用方法:

         ①exec(String command)在单独的进程中执行指定的字符串命令,该方法可启动pc中的应用程序,command-程序名; 

                  ②exec方法返回一个类型为Process的实例,该类有一个方法可以杀掉exec启动的程序,该方法为: 

                            destory();杀掉子进程//Process类方法,谁调用杀谁;           

                  ③exce(String command file)可由command程序打开file文件,command为打开程序,file为可由command程序打开的文件; 
                            例:Runtime r=Runtime.getRuntime()//返回本类对象; 
                            Process p=r.exce(notepad **.txt)//用记事本打开**.txt文件; p.destroy();//杀掉notepad进程;

 示例:
class  RuntimeDmeo
{
	public static void main(String[] args) throws Exception
	{
		Runtime r = Runtime.getRuntime();
		r.exec("c:\\winmine.exe");
		//Process p  = r.exec("notepad.exe  SystemDemo.java");
	}
}

Math类

            1.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。该类全为静态方法
            

           2.常用方法:
                     ceil():返回大于参数的最小整数。
                     floor():返回小于参数的最大整数。
                     round():返回四舍五入的整数。
                     pow(a,b):a的b次方。

           3.Random

                     这是java.util中的一个单独的类,该类对象用于获取随机数。与Math中的random方法是一样的,不过这个类有自身的方法,可以将相应的                        随机数强转为指定基本数据类型。

                     如:intnextInt(int n);//返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。


示例:

import java.util.Random;

public class MathDemo{
  public static void main(String[] args){
		double d1 = Math.ceil(12.56);//返回大于参数的最小整数
		double d2 = Math.floor(12.56);//返回小于参数的最大整数
		double d3 = Math.round(12.56);//返回四舍五入的整数
		
		System.out.println(d1);//打印d1
		System.out.println(d2);//打印d2
		System.out.println(d3);//打印d3

		double d4 = Math.pow(10,2);//求10的2次方
		System.out.println(d4);//打印

		Random r = new Random();//创建随机数对象
		for(int i = 0; i < 5; i++){
			double d5 = Math.ceil(Math.random() * 10);//返回大于参数的最小整数
			System.out.println( "d5 = " + d5);//打印d5
		}

		for(int i = 0; i < 5; i++){
			double d6 = (int)(r.nextDouble() * 6 + 1);
			System.out.println( "d6 = " + d6);
		}
	}
}


Date、DateFormat类

      

         1.Date类表示特定的瞬间,精确到毫秒。java中的默认显示格式为:Mon Jun 10 22:35:21 CST2013

         

         2.日期对象和毫秒值之间的转换
         

                    毫秒值-->日期对象:
                            ①通过Date对象的构造方法 new Date(timeMillis);
                            ②还可以通过setTime设置。
                                 因为可以通过Date对象的方法对该日期中的各个字段(年月日等)进行操作。
                    日期对象-->毫秒值:
                            ①getTime方法。
                                因为可以通过具体的数值进行运算。
                    对日期对象进行格式化:
                            ①将日期对象-->日期格式的字符串。
                                使用的是DateFormat类中的format方法。

示例:

import java.util.*;
import java.text.*;
class  DateDemo
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		Date d = new Date();
		sop(d);//打印的时间看不懂,希望有些格式。

		
		//将模式封装成SimpleDateFormat对象中。
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E  hh:mm:ss");

		//调用format方法让模式格式化指定Date对象。

		String time = sdf.format(d);

		sop("time="+time);
	}
}



Calendar类

            1.Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操                     作日历字段(例如获得下星期的日期)提供了一些方法。

         2.基本获取时间

                   1)获取年份:Calendar.YEAR

                   2)获取月份:Calendar.MONTH

                   3)获取日期:Calendar.DAY_OF_MONTH

                   4)获取星期:Calendar.DAY_OF_WEEK

                   5)获取小时:Calendar.HOUR_OF_DAY

                   6)获取分钟:Calendar.MINUTE

                   7)获取秒数:Calendar.SECOND

        3.设置时间:

                   1)根据日历的规则,为给定的日历字段添加或减去指定的时间量:

                        void add(int field,int amount);

                   2)获取指定的日历字段对应的时间值:

                        int get(int field);

                   3)将给定日历字段对应的时间值设置为给定值:

                        void set(int field,int value);

                   4)设置日历字段 YEARMONTHDAY_OF_MONTH的值:

                         void set(int year,int month,int date);

示例:

	
import java.util.*;
import java.text.*;


class	CaalendarDemo
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		Calendar c = Calendar.getInstance();//创建一个Calendar对象
		
		//创建一个月份的字符串数组
		String[] mons = {"一月","二月","三月","四月","五月","六月"
							,"七月","八月","九月","十月","十一月","十二月",};
		//创建一个日的字符串数组
		String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

		int index = c.get(Calendar.MONTH);//返回给定日历字段所代表的值

		int index1 = c.get(Calendar.DAY_OF_WEEK);//返回给定日历字段所代表的值
			sop(c.get(Calendar.YEAR)+"年");//打印
			//sop(c.get(Calendar.MONTH)+1)+"月");
			sop(mons[index]);//打印
			sop(c.get(Calendar.DAY_OF_MONTH)+"日");
		//sop("星期"+c.get(Calendar.DAY_OF_WEEK));
			sop(weeks[index1]);//打印

		
		/*
		Date d = new Date();

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy");

		String year = sdf.format(d);

		sop(year);
		*/
	}
}



IO流


概述:

        1.IO流:即InputOutput的缩写。

        2.特点:

                  1IO流用来处理设备间的数据传输。

                  2Java对数据的操作是通过流的方式。

                  3Java用于操作流的对象都在IO包中。

                  4)流按操作数据分为两种:字节流和字符流。

                  5)流按流向分为:输入流和输出流。

                  注意:流只能操作数据,而不能操作文件。

        3.IO流的常用基类:

                  1)字节流的抽象基流:InputStreamOutputStream

                  2)字符流的抽象基流:ReaderWriter

Write类

          1.该类是抽象类,只能由子类创建对象;

          2.该类的常用方法:

                      append(char c)                           将指定字符序列添加到此writer

                      close()                                        关闭流,但要先刷新;

                      flush()                                         刷新,将流中的数据输入目的地;

                      write(char[] cbuf)                       写入字符数组;

                      write(char[] cbuf,int off,int len) 写入一部分;

                      write(String str)                          写入字符;

                      write(String str,int off,int len)    写入字符串中的一部分;

                      write(int c)                                  写入单个字符;

FileWriter

            FileWriterOutputStreamWriter(该类中有个特有的方法:getEncoding;返回此流使用的字符编码的名称)的子类,用于写入       字符文件的便捷类,用于写入字符流;

            该类没有空构造函数,故该类一被创建就必须要有被该类操作的文件存在;常用构造函数: 

            FileWriter(String fileName);fileName-文件名; 

            例:FileWriter fw=new FileWriter(demo.txt);

import java.io.*;

class FileWriterDemo
{
	public static void main(String[] args) throws IOException
	{

		//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
		//而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
		//其实该步就是在明确数据要存放的目的地。
		FileWriter fw = new FileWriter("demo.txt");
		
		fw.write("haha");
		//刷新流对象中的缓冲中的数据。
		//将数据刷到目的地中。
		  fw.flush();

		//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
		//将数据刷到目的地中,
		//和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。

	}
}

            FileWriter(String fileNameboolean append);fileName-文件名,append-指示是否附加写入数据(根据值确定,当值为true则不覆       盖原文件,而将数据添加到原文件的后面);该构造函数可实现对文件的续写。 

            如果对一个已存在的文件写入数据在已有数据的后面,但不覆盖已有的文件,可通过其构造函数传入的参数列表来实现,该               文件形式如: FileWriter fw=new FileWriter(demo.txt“,true);

            创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件,而且该文件会被创建到指定目录下,如果该目录下       已有同名文件,将被覆盖,其实该歩就是在明确数据要存的目的地;

/*
演示对已有文件的数据续写。
*/

import java.io.*;
class  FileWriterDemo3
{
	public static void main(String[] args) throws IOException
	{
		//传递一个true参数,代表不覆盖已有的文件,并在已有文件的末位处进行数据续写。
		FileWriter fw = new FileWriter("demo.txt",true);
		
		fw.write("haha\r\nxiexie");

		fw.close();
	}
}

            该子类的常见使用方式: 

                     fw.write(“…….);//调用write方法,将字符串写入到流中;

                     fw.flush()//将流对象中缓冲数据刷入到目的地;

                     fw.close();//关闭流资源,关闭前会调用flush


IO异常处理:

            1.一般IO的方法都会出现异常,这种异常最好try不要抛,IO异常的处理需要注意的问题,举例说明:

FileWriter fw=null;//构造对象时指明了文件路径,也会出现异常需要try,但该变量全局引用所以要定义在try外面,否则在finally语句中,fw.close将会找不到fw变量;
try{
    fw=new FileWriter("demo.txt");//初始化变量
    fw.write("....");
}catch(IOException e){
    S.O.P(e.toString());
}finally{//colse()关闭资源必须定义在finally语句中;
    try{
        if(fw!=null)//如果在初始化阶段异常,则fw指向空,无法引用
            fw.colse();//colse()函数出现nullpointException异常,所以必须判断是否为null;
    }catch(IOException ex){
        S.O.P(ex.toString());
    }
}

示例:

/*
IO异常的处理方式。
*/
import java.io.*;
class  FileWriterDemo2
{
	public static void main(String[] args)
	{
		FileWriter fw =null;
		try
		{
		 fw = new FileWriter("demo.txt");

		fw.write("adfdssdfds");

		}
		catch (IOException e)
		{
			System.out.println(e.toSring());
		}
		finally
		{
			
			try
			{
				if(fw!=null)
					fw.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toSring());
			}
		}
	}
}

Reader

     1.该类用于读取字符流的抽象类,子类必须实现的方法只有read(char[] ch,int i,int i1)close();

     2.该类常用方法:

           close()                           关闭流;

           read()                            读取单个字符;

           read(char[] cbuf)                 将字符读入数组;
           read(char[] cbuf,int off,int len) 将字符读入数组的某一部分;

FileReader

      1.FileReader类用于读取字符流(该类中有默认编码);

      2.该类时InputStreamReader的一个子类;其实Reader的用法及结构与Writer相似,其结构是一一对应的(大多数)。

      3.FileReader的构造函数: 
            FileReader(String fileName);fileName-要读取数据的文件名,该对象一创建就要有指定的文件; 
            例:FileReader fr=new FileReader(Demo.txt); 
      4.创建一个文件读取流对象,和指定名称的文件相关联,要保证该文件是否是存在的,如果不存在,会发                         生FileNotFoundException异常;

      5.FileReader常用方法 

            read();该方法一次读取一个字符,返回的是int,并会自动往下读;

            read(char[] ch);将读取的字符存入指定的字符数组ch,当存满后再打印,该方法返回的是读到的字符的个数;

            close();关闭读取流;

      6.两种读取方法的应用方式: 

            ①fr.read();//调用读取流对象的read方法,该方法没有参数时,一次读取一个字符,返回的是int,并会自动往下                 读;

示例:

	
import java.io.*;
class  FileReaderDemo
{
	public static void main(String[] args) 
	{
		//创建一个文件读取流对象,和指定名称的文件相关联。
		//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
		FileReader fr = new FileReader("demo.txt");

		//调用第一种方法:读取流对象的read方法。
		//read();一次读一个字符,而且会自动往下读。

		int ch = fr.read();

		System.out.println("ch="+(char)ch);

		fr.close();
		
		int ch = 0;

		while((ch=fr.read())!=-1)
		{
			System.out.println("ch="+(char)ch);
		}
	}
}

          ②read(char[] ch);该方法返回的是读到的字符个数,该返回值可作为判断最后一个字符在字符数中的位置;通过字符             数组进行读取,将读取的字符先存入一个字符数组中(长度自定义,一般取1024的倍数),当数组存满后再打印数组。

示例:

/*
第二种方式:通过字符数组进行读取。

*/
import java.io.*;

class  FileReaderDemo2
{
	public static void main(String[] args) 
	{
		FileReader fr = new FileReader("demo.txt");


		//定义一个字符数组,用于存储读到字符。
		//该read(char[])返回的是读到字符个数。

		char[] buf = new char[3];

		int num = 0;
		while((num=fr.read(buf))!=-1)
		{
				System.out.println(new String(buf,0,num));
		}
		System.out.println("num="+num+"..."+new String(buf));

		int num1 = fr.read(buf);

		System.out.println("num1="+num1+"..."+new String(buf));

		int num2 = fr.read(buf);

		System.out.println("num2="+num2+"..."+new String(buf));

		int num3 = fr.read(buf);

		System.out.println("num3="+num3+"..."+new String(buf));

		fr.close();

	}
}

ReaderWriter的综合应用

       复制文本文件:

import java.io.*;
class CopyText {
    public static void main(String[] args) throws IOException{
        copy_2();
    }
    public static void copy_2(){
        FileWriter fw = null;
        FileReader fr = null;
        try{
            fw = new FileWriter("SystemDemo_copy.txt");
            fr = new FileReader("SystemDemo.java");
            char[] buf = new char[1024];
            int len = 0;
            while((len=fr.read(buf))!=-1){
                fw.write(buf,0,len);
            }
        }catch (IOException e){
            throw new RuntimeException("读写失败");
        }finally{
            if(fr!=null)
                try{
                    fr.close();
                }catch (IOException e){}
            if(fw!=null)
                try{
                    fw.close();
                }catch (IOException e){}
        }
    }
    //从C盘读一个字符,就往D盘写一个字符。
    public static void copy_1()throws IOException{
        //创建目的地。
        FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");
        //与已有文件关联。
        FileReader fr = new FileReader("RuntimeDemo.java");
        int ch = 0;
        while((ch=fr.read())!=-1){
            fw.write(ch);
        }
        fw.close();
        fr.close();
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值