一、其他对象(System)
/*
System:类中的方法和属性都是静态的。
in:标准输入,默认键盘。
out:标准输出,默认控制台。
描述系统的一些信息。
获取系统属性信息: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);//没有haha键,需要在运行时输入java -Dhaha=qq SystemDemo
/*
for(Object obj:prop.keySet())//获取所有属性信息
{
String value=(String)prop.get(obj);
System.out.println(obj+":"+value);
}
*/
}
}
二、其他对象(Runtime)
/*
Runtime对象:
该类并没有提供构造函数,说明不可以new对象。那么直接想到该类中的方法都是静态
的,发现该类中也有非静态方法,说明该类肯定会提供一个方法获取本类对象,而且
该方法是static的,返回值类型是本类类型。该方法是static Runtime getRuntime();
由此可以看出该类使用了单例设计模式完成。
*/
class RuntimeDemo
{
public static void main(String[] args)throws Exception
{
Runtime r=Runtime.getRuntime();
Process p=r.exec("notepad.exe");
//r.exec("notepad.exe RuntimeDemo.java");//用notepad打开当前程序文件目录下的RuntimeDemo.java文件
//p.destroy();//关闭notepad.exe进程
}
}
三、其他对象(Date)
/*
Date:
*/
import java.util.*;
import java.text.*;
class DateDemo
{
public static void main(String[] args)
{
Date d=new Date();
System.out.println(d);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");//将模式封装到SimpleDateFormat对象中。
String time=sdf.format(d);//调用format方法让模式格式化指定Date对象。
System.out.println("time="+time);
//System.out.println("d1:"+new Date(System.currentTimeMillis()));
}
}
四、其他对象(Calendar)
/*
Calendar:
*/
import java.util.*;
class CalendarDemo2
{
public static void main(String[] args)
{
Calendar c=Calendar.getInstance();
c.set(2011,7,17);//设置年月
c.add(Calendar.YEAR,1);//加一年
printCalendar(c);
}
public static void printCalendar(Calendar c)
{
String[] mons={"一月","二月","三月","四月","五月","六月"
,"七月","八月","九月","十月","十一月","十二月",};
String[] weeks={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六",};
int index=c.get(Calendar.MONTH);
int index1=c.get(Calendar.DAY_OF_WEEK)-1;
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]);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
五、其他对象(Math-Random)
/*
Math:
*/
import java.util.*;
class MathDemo
{
public static void main(String[] args)
{
for(int i=0;i<10;i++)
{
//sop(Math.random());//随机数(大于等于0小于1.0)
//sop((int)(Math.random()*10+1));//1-10随机数
sop(new Random().nextInt(10)+1);//1-10随机数
}
}
public static void show()
{
sop("d="+Math.ceil(12.45));//返回大于指定数据的最小整数。
sop("d="+Math.floor(12.45));//返回小于指定数据的最小整数。
sop("d="+Math.round(12.34));//四舍五入
sop("d="+Math.pow(2,3));//2的3次方
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
六、IO流(概述)
IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。用于操作的对象都在IO包中。
流按操作数据分两种:字节流与字符流。
流按流向分为:输入流,输出流。
字节流的抽象基类:
InputStream ,OutputStream
字符流的抽象基类:
Reader ,Writer
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream
如:Reader的子类FileReader
七、IO流(FileWriter)
/*
先来看看字符流的特点:
既然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("abcde");
//fw.flush();//刷新流对象中的缓冲中的数据,将数据刷入目的地
fw.close();
/*
close()关闭流资源,在关闭之前会刷新一次内部的缓冲中的数据,将将数据刷入目的地。
和flush()区别:flush刷新后,流可以继续使用,而close会将流关闭。
*/
}
}
八、IO流(IO异常处理方式)
/*
IO异常的处理方式:
*/
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw=null;
try
{
fw=new FileWriter("demo.txt");
fw.write("asdffgfdsa");
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
九、IO流(文件的续写)
/*
演示对已有文件的续写:
public FileWriter(String fileName,
boolean append)
throws IOException根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
参数:
fileName - 一个字符串,表示与系统有关的文件名。
append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。
*/
import java.io.*;
class FileWriterDemo3
{
public static void main(String[] args)
{
FileWriter fw=null;
try
{
fw=new FileWriter("demo.txt",true);//不覆盖已有文件,并在已有文件末尾处续写。
fw.write("\r\nhello");//windows下换行:\r\n
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
十、IO流(文本文件读取方式一)
/*
文本文件读取方式一:
*/
import java.io.*;
class FileReaderDemo
{
public static void main(String[] args)
{
FileReader fr=null;
try
{
/*
创建一个文件读取流对象和指定名称的文件相关联。
要保证该文件存在,否则会发生FileNotFoundException异常
*/
fr=new FileReader("demo.txt");
/*
read()方法一次读一个字符,而且可以自动往下读。
*/
int ch=0;
while((ch=fr.read())!=-1)
{
System.out.println("ch="+(char)ch);
}
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fr!=null)
fr.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
十一、IO流(文本文件读取方式二)
/*
文本文件读取方式二:
*/
import java.io.*;
class FileReaderDemo2
{
public static void main(String[] args)throws IOException
{
FileReader fr=new FileReader("demo.txt");
//定义一个字符数组,用于存储读到的字符。
char[] buf=new char[1024];
int num=0;
while((num=fr.read(buf))!=-1)
{
System.out.print(new String(buf,0,num));
}
fr.close();
}
}
十二、IO流(文本文件读取练习)
/*
读取一个*.java文件,并打印在控制台。
*/
import java.io.*;
class FileReaderTest
{
public static void main(String[] args)
{
FileReader fr=null;
try
{
fr=new FileReader("FileReaderTest.java");
char[] buf=new char[1024];
int num=0;
while((num=fr.read(buf))!=-1)
{
System.out.print(new String(buf,0,num));
}
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fr!=null)
fr.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
十三、IO流(拷贝文本文件)
/*
将C盘一个文本文件复制到D盘
原理:
将C盘下的文件数据存储到D盘的一个文件中。
步骤:
1.在D盘创建一个文件,用于存储C盘文件中的数据。
2.定义读取流和C盘文件关联。
3.通过不断的读写完成数据的存储。
4.关闭资源。
*/
import java.io.*;
class CopyText
{
public static void main(String[] args)throws IOException
{
//copy_1();
copy_2();
}
public static void copy_1()throws IOException//从C盘文件读一个字符就往D盘文件写一个字符。
{
FileReader fr=new FileReader("CopyText.java");//读的文件
FileWriter fw=new FileWriter("CopyText_copy.txt");//写的文件
int ch=0;
while((ch=fr.read())!=-1)
{
fw.write(ch);
}
fw.close();
fr.close();
}
public static void copy_2()
{
FileWriter fw=null;
FileReader fr=null;
try
{
fr=new FileReader("CopyText.java");
fw=new FileWriter("CopyText_copy.txt");
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
{
try
{
if(fr!=null)
fr.close();
}
catch (IOException e)
{
throw new RuntimeException("关闭读取字符流失败");
}
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
throw new RuntimeException("关闭写入字符流失败!");
}
}
}
}
十四、IO流(拷贝文本文件图例)