1. 程式人生 > >黑馬程式設計師--第十八天:IO流第一天

黑馬程式設計師--第十八天:IO流第一天

---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ----------------------

//18-1

import java.util.*;

public class SystemDemo {
	public static void main(String[] args){
		//Properties 是HashTable的子類,也就是Map的子類
		Properties prop = System.getProperties();

		
		//獲取指定系統資訊
		String value = System.getProperty("os.name");
		System.out.println("val="+value);
		
		//在系統中設定一些指定系統資訊
		System.setProperty("mykey", "myvalue");
		
		//獲取所以屬性資訊
		/*for(Object obj: prop.keySet()){
			String value = (String)prop.get(obj);
			System.out.println(obj+"::"+value);
		}*/
		
		//java 命令檢視java 引數列表
		//動態載入一些屬性資訊,在cmd中用-Dha=hahaha
		//詳細命令   java -Dha=hahaha SystemDemo
		String v = System.getProperty("ha");
		System.out.println("v="+v);
	}
}

/*
總結:
		System.getProperties();
		System.getProperty("key");
		System.setProperty("key","value");
		prop.keySet(); // Property 類的非靜態方法。
		prop.get(obj);//get屬於Property類,而getProperty屬於System.
*/	

/*18-2
Runtime:使應用程式與其執行環境相連線
沒有建構函式,不可new,可想到該類的方法都是靜態的。
然而該類中還有非靜態方法,則該類提供了方法用於獲取本類物件
該方法為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();
		
		System.out.println("Hello World!");
	}
}


/*
總結
	Runtime.getRuntime();   //Runtime 類的靜態方法
	r.exec("Notepad.exe SystemDemo.java");   //Runtime 類的非靜態方法
	Thread.sleep(4000);  //Thread 類的靜態方法
	p.destroy();  // Process 類的destroy
*/

//18-3
import java.util.*;
import java.text.*;
class DateDemo 
{
	public static void main(String[] args) 
	{
		Date d = new Date();//列印的時間格式不合適
		System.out.println(d);

		SimpleDateFormat sdt = new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");
		String time = sdt.format(d);

		System.out.println(time);

		long l = System.currentTimeMillis();
		Date date = new Date(l);
		System.out.println(date);

	}
}
/*
總結
	new Date(); //Date類的建構函式
	new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");  //SimpleDateFormat 類建構函式
	sdt.format(d);  //SDF類的format方法

	//提問:format有3個引數,為何只用一個引數也能正常的執行?
	//因為用的是父類的方法。
*/

//18-4
import java.util.*;
import java.text.*;

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

		String[]month = {"一","二","三","四","五","六","七","八","九","十","十一","十二"};
		String[]week = {"","日","一","二","三","四","五","六"};

		Calendar c = Calendar.getInstance();
		sop(c.get(Calendar.YEAR)+"年"+c.get(Calendar.MONTH)+"月");
		sop(c.get(Calendar.YEAR)+"年");
		sop(month[c.get(Calendar.MONTH)]+"月");
		sop(c.get(Calendar.DAY_OF_MONTH)+"日");
		sop("星期"+week[c.get(Calendar.DAY_OF_WEEK)]);

	}



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


/*
總結
	Calendar.getInstance();
	c.get(Calendar.YEAR);
	String[]month = {""};//String 數字, 運用查表法。
*/


class  CalendarDemo2
{
	public static void main(String[] args) 
	{
		Calendar c = Calendar.getInstance();
		c.set(2015,5,5);
		c.add(Calendar.YEAR, 5);//向前推就是加 負的值
		show(c);
		System.out.println("Hello World!");
	}

		public static void show(Calendar c) 
	{

		String[]month = {"一","二","三","四","五","六","七","八","九","十","十一","十二"};
		String[]week = {"","日","一","二","三","四","五","六"};

		//Calendar c = Calendar.getInstance();
		sop(c.get(Calendar.YEAR)+"年"+c.get(Calendar.MONTH)+"月");
		sop(c.get(Calendar.YEAR)+"年");
		sop(month[c.get(Calendar.MONTH)]+"月");
		sop(c.get(Calendar.DAY_OF_MONTH)+"日");
		sop("星期"+week[c.get(Calendar.DAY_OF_WEEK)]);

	}



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

/*
總結
	c.set(2015,5,5);
	c.add(Calendar.DAY_OF_MONTH, -1);
*/

//18-5

class  MathDemo
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}


/*
總結
	ceil();
	floor();
	random();
	pow(2,3);//指數運算
	new Random().nextint(10);
	DecimalFormat df = new DecimalFormat(".00");
	df.format();
*/

//18-7

import java.io.*;

class FileWriteDemo 
{
	public static void main(String[] args) throws IOException
	{
		//建立或覆蓋已有檔案於指定目錄,該物件一被初始化就必須明確被操作的檔案物件。
		FileWriter fw = new FileWriter("demo.txt");
		//把字元寫入到流中
		fw.write("adfaffa");
		//重新整理緩衝區
		fw.flush();
		//重新整理並關閉緩衝區
		fw.close();
		System.out.println("Hello World!");
	}
}

/*
sum:
	new FileWriter("demo.txt");
	fw.write("afadf");
	fw.flush();
	fw.close();
*/

//18-8
import java.io.*;

class FileWriterDemo2 
{
	public static void main(String[] args) 
	{
		System.out.println("afaf");
		FileWriter fw = null;
		try{
			fw = new FileWriter("k:\\demo.txt");
			fw.write("abdaf");		
		}
		catch(Exception e){
			System.out.println(e.toString());		
		}
		finally{
			try{
				if(fw!=null)     //必須判斷fw不是空指標。
				fw.close();
			}
			catch(Exception e){
				System.out.println(e.toString());
			}
		}
	}
}


/*
sum:
	必須判斷fw不為空指標。
*/

//18-9
import java.io.*;

class FileWriterDemo3 
{
	public static void main(String[] args) throws IOException
	{
		FileWriter fw = new FileWriter("demo.txt", true);
		//引數:
		//file - 要寫入資料的 File 物件
		//append - 如果為 true,則將位元組寫入檔案末尾處,而不是寫入檔案開始處 

		fw.write("\r\nwindows換行符,\nlinux換行符");
		fw.close();
	}
}

/*
sum:
	new FileWriter("demo.txt",true);//續寫檔案
	\r\n,與\n的區別。
*/

//18-10
import java.io.*;

class FileReaderDemo 
{
	public static void main(String[] args) throws IOException
	{
		//建立目標檔案的流物件
		FileReader fr = new FileReader("demo.txt");

		//read一次讀一個字元,且自動向下移動。當檔案讀完是返回-1。
		//read();返回:
		//作為整數讀取的字元,範圍在 0 到 65535 之間 (0x00-0xffff),
		//如果已到達流的末尾,則返回 -1
		int ch = 0;
		while((ch = fr.read())!=-1){
		System.out.println((char)ch);
		}

		/*while(true){
			int ch = fr.read();
			if(ch==-1)
				break;
			System.out.println(ch);
		}*/

		fr.close();
	}
}

/*
sum:
	fr.read();
*/

//18-11
import java.io.*;

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

		//read(char[]) 返回讀到字元個數,當資料讀完是返回-1。
		char[] buff = new char[1024];
		int num = 0;
		while((num=fr.read(buff))!=-1)
		System.out.print(new String(buff,0,num)); //用print而不用println

		fr.close();
	}
}


/*
sum:
	read(char[]);
	new String(buff,0,num);//分配一個新的 String,它包含取自字元陣列引數一個子陣列的字元。
*/

//18-13
import java.io.*;

class CopyDemo 
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}

	public static void copy(){
		FileReader fr = null;
		FileWriter fw = null;

		try{
			fr = new FileReader("FileReaderDemo.java");
			fw = new FileWriter("FileReaderDemo_copy.java");
			
			char [] buff = new char[1024];
			int len =0;
			while((len = fr.read(buff))!=-1)
				fw.write(new String(buff,0,len));
		}
		catch(IOException e){
			throw new RuntimeException("讀寫失敗");		
		}
		finally{
			try{
				if(fr!=null)
					fr.close();
			}catch(IOException e){
				System.out.println(e.toString());
			}
			try{
				if (fw!=null)
				{
					fw.close();
				}
			}catch(IOException e){

				System.out.println(e.toString());
				}
		}
	}
}


/*
sum:
	多個流要分開try。
*/


---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ----------------------