黑马程序员--Java基础学习(其他对象和IO流)第十八天

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Java基础学习(其他对象和IO流)第十八天
一,其他对象
System:类中的方法和属性都是静态的。
out:标准输出,默认是控制台。
in:标准输入,默认是键盘。
描述系统一些信息。

获取系统属性信息:Properties getProperties();

代码示例:
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("os.name");

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

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

		System.out.println("v="+v);
		/*
		for(Object obj : prop.keySet())
		{
			String value = (String)prop.get(obj);
			System.out.println(obj+"::"+value);
		}
		*/
		
	}
}


Runtime类:
Runtime对象
该类并没有提供构造函数。
说明不可以new对象。那么会直接想到该类中的方法都是静态的。
发现该类中还有非静态方法。
说明该类肯定提供了方法获取本类对象。而且方法是静态的,并返回值类型是本类类型。
由这个特点可以看出该类使用了单例设计模式完成。
该方法是static Runtime getRuntime();

代码示例:
class RuntimeDemo 
{
	public static void main(String[] args) throws Exception
	{ 
		Runtime r = Runtime.getRuntime();

		Process p = r.exec("notepad.exe SystemDemo.java");//在单独的进程中执行指定的字符串命令
		

		Thread.sleep(4000);
		p.destroy();
	}
}


Data类:
对时间进行描述

代码示例:
import java.util.*;
import java.text.*;
class DateDemo 
{
	public static void main(String[] args) 
	{
		Date d = new Date();
		System.out.println(d);//打印的时间看不懂,希望有些格式。
		
		//将模式封装到SimpleDateFormat对象中。
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");
		
		//调用format方法让模式格式化指定Date对象。

		String time = sdf.format(d);

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

		long l = System.currentTimeMillis();

		Date d1 = new Date();

		System.out.println("d1:"+d1);
	}
}


Math类:
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

代码示例:
/*
练习。给定一个小数。
保留该小数的后两位。
*/
import java.util.*;

class MathDemo 
{
	public static void main(String[] args) 
	{
		Random r = new Random();
		for(int x=0; x<10; x++)
		{
			//int d = (int)(Math.random()*10+1);//大于等于0小于1的随机数。
			
			int d = r.nextInt(10)+1;
			sop(d);
		}
	}

	public static void show()
	{
		double d = Math.ceil(12.34);//ceil返回大于指定数据的最小整数。
		double d1 = Math.floor(12.34);//floor返回小于于指定数据的最小整数。
		
		long l = Math.round(12.34);//四舍五入。
		sop("d="+d);
		sop("d1="+d1);
		sop("1="+1);

		double d2 = Math.pow(2,3);//2为底3为指数

		sop("d2="+d2);
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

二,IO流概述
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作数据的对象都在IO包中
流按操作数据分两种:字节流与字符流。
流按流向分:输入流,输出流。

IO流的常用基类:
字节流的抽象基类:InputStream ,OutputStream。
字符流的抽象基类:Reader,Writer。
这四个类派生出来的子类名称都是以其父类名作为子类名的后缀的,如:InputStream的子类FileInputStream。Reader的子类FileReader。

三,IO流的应用
既然IO流是用于操作数据的,
那么数据的最常见体现形式是:文件。

找到一个专门用于操作文件的Writer子类对象。FileWriter。 后缀名是父类名。前缀名是该流对象的功能。

代码示例:
import java.io.*;
class FileWriterDemo
{
	public static void main(String[] args) throws IOException
	{
		//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
		//而且该文件会被创建到指定的目录下。如果该目录下已有同名文件将被覆盖。
		//其实该步就是在明确数据要存放的目的地。
		FileWriter fw = new FileWriter("demo.txt");
		
		//调用write()方法将字符串写入流中。
		fw.write("fuck you");
		
		//刷新流对象中的缓冲中的数据。
		//将数据刷到目的地中。
		fw.flush();
		
		//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
		//将数据刷到目的地中。
		//和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
		//fw.close();

		//fw.write("haha");
	}
}


四,IO异常处理
当发生某种 I/O 异常时,抛出此异常。

代码示例:
/*
IO异常的处理方式。
*/
import java.io.*;

class FileWriterDemo2
{
	public static void main(String[] args) 
	{
		FileWriter fw = null;
		try
		{
			fw = new FileWriter("b:\\demo.txt");
		
			fw.write("fuck you");

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

	}
}
五,文件的续写

想要从文件的最后接着写,而不是覆盖原有内容。

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

		fw.write("hhhaa\r\nfuck you");

		fw.close();
	}
}
六,文本文件读取方式

对文本数据进行读取,用FileReader类的read()方法。

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

		//调用读取流对象的read方法。
		int ch = 0;
		while((ch=fr.read())!=-1)
		{
			System.out.println("ch="+(char)ch);
		}
		/*
		while(true)
		{
			int ch = fr.read();
			if(ch==-1)
				break;
			System.out.println("ch="+(char)ch);
		}
		*/
		fr.close();


	}
}


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

代码示例:
import java.io.*;
class FileReaderDemo2 
{
	public static void main(String[] args) throws IOException
	{
		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));
		}
		/*
		int num = fr.read(buf);
		
		System.out.println("num="+num+"..."+new String(buf));
		*/
		fr.close();
	}
}


拷贝文本文件图例:
黑马程序员--Java基础学习(其他对象和IO流)第十八天_第1张图片

你可能感兴趣的:(黑马程序员,java,面向对象,io流)