黑马程序员_day18 其他对象和IO流)

来源:互联网 发布:数据挖掘大牛 国科大 编辑:程序博客网 时间:2024/05/19 13:26

---------------------- android培训、java培训 期待与您交流! ----------------------

一:System。

/*
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();

 }
}

 

三:Date。


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(l);

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


 }
}


四:Calendar。


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


class  CalendarDemo
{
 public static void main(String[] args)
 {

  Calendar c = Calendar.getInstance();


  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);

  System.out.println(year);

  */
 }

 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}


import java.util.*;

/*
两个练习:
1,获取任意年的二月有多少天。
 思路:根据指定年设置一个时间就是
 c.set(year,2,1)//某一年的3月1日。
 c.add(Calenar.DAY_OF_MONTH,-1);//3月1日,往前推一天,就是2月最后一天。

 

2,获取昨天的现在这个时刻。
 c.add(Calenar.DAY_OF_MONTH,-1);


*/


class  CalendarDemo2
{
 public static void main(String[] args)
 {

  Calendar c = Calendar.getInstance();

  //c.set(2012,2,23);

  c.add(Calendar.DAY_OF_MONTH,-18);
  
  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);

  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。

/*
练习。给定一个小数。
保留该小数的后两位。

选作。可以考虑,保留时进行四舍五入。

*/
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);
   int d = r.nextInt(10)+1;
   sop(d);
  }
  */
  saveTwo(12.3456,3,true);//12.34
 }

 public static void saveTwo(double d,int scale,boolean isRound)
 {
  
  double base = Math.pow(10,scale);


  double num = isRound?Math.round(d*base)/base:((int)(d*base))/base;

  sop("num="+num);

 

  /*
  double d1 = d*100;
  sop("d1="+d1);
  d1 = d1+0.5;
  double d2 = (int)d1;
  sop("d2="+d2);
  double d3 = d2/100;
  sop("d3="+d3);

  */
 }

 public static void show()
 {
  double d = Math.ceil(16.34);//ceil返回大于指定数据的最小整数。
  double d1 = Math.floor(12.34);//floor返回小于指定数据的最大整数。

  long l = Math.round(12.54);//四舍五入
  sop("d="+d);
  sop("d1="+d1);
  sop("l="+l);

  double d2 = Math.pow(2,3);
  sop("d2="+d2);
 }
 public static void sop(Object obj)
 {
  
  System.out.println(obj);
 }
}

 

六:IO流。FileWriter


/*
字符流和字节流:

字节流两个基类:
InputStream   OutputStream


字符流两个基类:
Reader Writer

先学习一下字符流的特点。

既然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();


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


七:FileWriter的异常处理和文件续写。

/*
字符流和字节流:

字节流两个基类:
InputStream   OutputStream


字符流两个基类:
Reader Writer

先学习一下字符流的特点。

既然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();


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


/*
演示对已有文件的数据续写。
*/
import java.io.*;
class  FileWriterDemo3
{
 public static void main(String[] args) throws IOException
 {

  //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
  FileWriter fw = new FileWriter("demo.txt",true);

  fw.write("nihao\r\nxiexie");

  fw.close();
 }
}


八:FileReader两种读取方式。

import java.io.*;

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

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

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

  /*
  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[1024];

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

  fr.close();
 }
}

 

九:文本文件读取练习。

 

//读取一个.java文件,并打印在控制台上。
import java.io.*;

class FileReaderTest
{
 public static void main(String[] args) throws IOException
 {
  FileReader  fr = new FileReader("DateDemo.java");

  char[] buf = new  char[1024];

  int num = 0;

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

  fr.close();
 }

}


十:练习。

//将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_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();

 }


}


十一:拷贝文本文件图例。

 

---------------------- android培训、java培训 期待与您交流! ----------------------