7.1 Applet類
Applet是種特殊的Java程序,經(jīng)過編譯后可被嵌入到HTML文件中,并由Web瀏覽器內(nèi)置的Java解釋器執(zhí)行。所有Applet都繼承自同一個類java.appelt.Applet,這個類是Java語言的基礎(chǔ)類,有關(guān)Applet的所有特性都被定義在這個類中。
7.1.1 Applet的特點
Applet
Application
運行環(huán)境
在瀏覽器中運行,或用appletviewer命令
單獨運行
入口
從init( )方法開始
從main( )開始
來源
從網(wǎng)上來
放在本地
出于安全考慮,Java設(shè)計者對Applet做了一些必要的限制。P129
有關(guān)Applet的安全機制通常被設(shè)置在瀏覽器中。大多數(shù)瀏覽器都會禁止Applet執(zhí)行下列操作:
?。?)在運行時調(diào)用其他程序
(2)文件讀寫操作
?。?)裝載動態(tài)連接庫和調(diào)用任何本地方法
?。?)試圖打開一個socket進行網(wǎng)絡(luò)通信,但是所連接的主機并不是提供Applet的主機。
另一方面,java.applet包提供了Application所不具備的一些API接口。
7.1.2 Applet和HTML的關(guān)系
HTML可以沒有Applet,但很多重要功能將無法實現(xiàn),而Applet有賴于HTML才能運行,二者共同為Internet這個虛擬世界增添光彩。
7.1.3 Applet的生命周期與主要活動
例P131 import java.applet.Applet;
import java.awt.Graphics;
public class SC extends Applet{
StringBuffer buffer=new StringBuffer();
public void init( ) {addWords("初始化……");} //與位置順序無關(guān)
public void start( ) {addWords("開始……");} //與位置順序無關(guān)
public void stop( ) {addWords("停止……");} //關(guān)閉窗口后執(zhí)行
public void destroy( ) {addWords("清除……");} //關(guān)閉窗口后執(zhí)行
void addWords(String s)
{System.out.println(s); //在DOS界面顯示
buffer.append(s);
repaint();} //自動調(diào)用paint方法
public void paint(Graphics g) {
g.drawString(buffer.toString(),5,15);}} //在圖形界面顯示內(nèi)容
1.初始化(init)
當Applet首次加載(或重新加載)時,要進行初始化操作。初始化可進行建立添加到程序中的對象、設(shè)置對象初始狀態(tài)、為成員變量賦初值、加載圖像或字體等操作,這些可通過覆蓋init方法來實現(xiàn)。
當然程序也可以沒有init方法。
2.開始運行(start)
Applet在初始化完成后即被調(diào)用,如果運行已被停止,還可以再次啟動。盡管在一個生命周期中,Applet可以多次開始運行,但初始化只能進行一次。
start方法可以在下列情況下自動執(zhí)行多次:
* 瀏覽器載入小應(yīng)用程序并執(zhí)行init( )之后;
* 離開上述Web頁之后,又重新回來時;(用back后退,forword前進按鈕)
* 瀏覽器的窗口最小化后又恢復(fù)時。
在start方法中可以開始運行Applet的功能,也可以啟動一個或多個線程來完成任務(wù)。一般情況下,如果覆蓋了start方法就要覆蓋stop方法
3.停止運行(stop)
stop方法可以在下列情況下自動執(zhí)行多次:
* 離開小應(yīng)用程序所在Web頁時;(用back后退,forword前進按鈕)
* 刷新該頁面時;(重新reload該頁面時)
* 關(guān)閉該Web頁時;
* 最小化瀏覽器時。
4.清除(destory)
關(guān)閉該Web頁時執(zhí)行一次
5.畫出(顯示)(paint)
如果需要Applet顯示一些內(nèi)容的話,必須覆蓋paint方法進行寫屏。不論所顯示的內(nèi)容是文字、線條、背景色,還是一幅圖形,都必須在paint方法中完成。
paint方法也是小應(yīng)用程序執(zhí)行時自動調(diào)用的方法,當下列情況下會發(fā)生paint方法的自動調(diào)用:
* 第一次加載含有小應(yīng)用程序的Web時;
* Web頁被覆蓋后又重新顯示時;
* 瀏覽器顯示區(qū)域被縮小/放大時。
首先引用:import java.awt.Graphics
方法: public void paint(Graphics g){……}
6.刷新(repaint)
repaint方法:是小應(yīng)用程序從java.awt.Component中繼承來的方法,它首先激活update( )方法(也是在java.awt.Component中定義),清除顯示區(qū)域的所有顯示內(nèi)容,再調(diào)用paint( )方法重繪顯示區(qū)域。
7.1.4 HTML和Applet的參數(shù)傳遞
* 在網(wǎng)頁中,必須使用<param>的標識來指定參數(shù)的名稱和參數(shù)的內(nèi)容值。格式:<param name=參數(shù)名 value=參數(shù)值>
* 在Applet程序中必須使用getParameter( )方法來取得參數(shù)的內(nèi)容。格式:public String getParameter(“參數(shù)名”)
例:P133
import java.applet.Applet;
import java.awt.Graphics;
public class SC extends Applet{
String string=null;
int x,y;
public void init(){
string=getParameter("message");
x=Integer.parseInt(getParameter("xPos"));//寫成(int)”30”錯
y=Integer.parseInt(getParameter("yPos"));}//可以不用Integer.parseInt
public void paint(Graphics s){
if (string!=null)
s.drawString(string,x,y);
s.drawString("參數(shù)X為: "+x,30,60);
s.drawString("參數(shù)Y為: "+y,30,90);}}
7.1.5 Applet標簽屬性
參見P135
7.2 字符串類
在Java中字符串被定義為一個類,無論是字符串常量還是變量,都必須先生成String類的實例對象然后才能使用。
包java.lang中封裝了兩個字符串類String(java.lang.String)和StringBuffer,分別用于處理不變字符串和可變字符串。這兩個類都被聲明為final。因此不能被繼承
7.2.1 字符串與字符串類
用雙引號括起來的字符串是字符串常量,又稱為無名字符串對象,由Java自動創(chuàng)建。
例:P137
說明:s.charAt(i) //返回字符串的第i個字符
buffer.append(char a) // 將字符參數(shù)添加到對象buffer尾部
buffer.toString( ) //將StringBuffer類型轉(zhuǎn)換成String類型再返回。
7.2.2 字符串類的構(gòu)造方法
例P139
import java.io.*;
import java.applet.Applet;
import java.awt.Graphics;
public class SC extends Applet{
byte b[]={'A',' ','b','y','t',' ','a','r','r','a','y'};
char c[]={'A',' ','c','h','a','r',' ','r','r','a','y'};
String s1,s2,s3,s4,s5,s6,s7,s8,s9;
StringBuffer b1,b2,b3;
public void init(){
b1=new StringBuffer();
b2=new StringBuffer(10);
b3=new StringBuffer("A string buffer");//寫成b3="A string buffer"錯
s1=new String();
s2=new String("A string"); // 寫成s2="A string" 對
s3=new String(b3); // 寫成s3=b3;錯
s4=new String(b);
s5=new String(b,2,4);
try{
s6=new String(b,2,10,"GBK");
s7=new String(b,"GBK");
}catch (UnsupportedEncodingException e) {}
s8=new String(c);
s9=new String(c,2,4);}
public void paint(Graphics g)
{ g.drawString("s1="+s1,20,20);
g.drawString("s2="+s2,20,35);
g.drawString("s3="+s3,20,50);
g.drawString("s4="+s4,20,65);
g.drawString("s5="+s5,20,80);
g.drawString("s6="+s6,20,95);
g.drawString("s7="+s7,150,20);
g.drawString("s8="+s8,150,35);
g.drawString("s9="+s9,150,50);
g.drawString("b1="+b1.toString(),150,65);
g.drawString("b2="+b2.toString(),150,80);
g.drawString("b3="+b3.toString(),150,95); } }
7.2.3 String類的應(yīng)用
1.求字符串長度(length)
格式:public int length( )
例:System.out.println("管理學(xué)院".length( )); // 4
System.out.println("GLXY".length( )); // 4 "GLXY".length( )則錯
char c[]={'G','L','X','Y'};
System.out.println(c.length); // 4 ,c.length( )則錯
2.字符串連接
格式:public String concat(String str )
例: String str="hello";
str=str.concat("Hi"); // 與 str+”Hi” 等價
System.out.println(str); // helloHi
別:“+”還可以把一個非字符串的數(shù)值連接至字符串尾部,編譯器將自動把非字符串轉(zhuǎn)換為字符串再進行連接。
3.字符串截取
格式:public char charAt(int index)
功能:返回第index個字符
格式:public String substring(int start [int end])
功能:從第start開始截取字符串,end代表結(jié)束位置
例: String s1="安徽城管學(xué)院",s2=s1;
System.out.println(s1.charAt(2)); // 城
s1=s1.substring(2);
System.out.println(s1); // 城管學(xué)院
System.out.println(s2.substring(2,4)); // 城管
4.字符串比較
格式: boolean equals(Object object)
boolean equalsIgnoreCase(String str) // 忽略大小寫
int compareTo(Object object)
int compareTo(String str)
int compareToIgnoreCase(String str) // 忽略大小寫
例: String s1="ABCD",s2="ABC",s3="abc";
System.out.println(s1.equals(s2)); // false
System.out.println(s2.equals(s3)); // false
System.out.println(s2.equalsIgnoreCase(s3)); // true
System.out.println("A".compareTo("B")); // -1 “A”比“B”小
System.out.println("B".compareTo("A")); // 1“B”比“A”大
System.out.println("ABC".compareTo("abc")); //-32 小,是負數(shù)
System.out.println("ABC".compareToIgnoreCase("abc"));//0 相同
說明:運算符“==”比較兩個對象是否引用同一個實例,而equals( )則比較兩個字符串中對應(yīng)的每個字符值是否相同。
例: Sting a=”ABC” ,B=”ABC” ,C=”abc” ,D=”AB”
A==B // true
A==C // false
A==D // false
5.拷貝到字符串
格式1:static String copyValueOf(char[] data)
格式2:static String copyValueOf(char[] data ,int offset ,int count)
功能:將字符數(shù)組的內(nèi)容拷貝到字符串中
例:char c[]={'A','B','C','D','E'};
String s1="XYZ",s2=s1;
s1=s1.copyValueOf(c); // s1值是“ABCDE”
s2=s2.copyValueOf(c,1,3); // s2值是“BCD”
s3=substring(c,3); // 錯
s3=c; // 錯
Sting s1= new String(c)
Sting s1= new String(c,2,3)
6.字符串大小寫轉(zhuǎn)換
例:String s1="Abc",s2,s3;
s2=s1.toUpperCase( ); // s2值是“ABC”
s3=s1.toLowerCase( ); // s3值是“abc”
7.字符串檢索
格式:int indexOf(char ch) // 首次出現(xiàn)位置
int indexOf(String str)
int lastIndexOf(char ch) // 最后出現(xiàn)的位置
int lastIndexOf(String str)
功能:在一個字符串中檢索指定字符或子串,返回所在位置的整數(shù),若找不到則返回為-1。
例:String s1="ABABab";
System.out.println(s1.indexOf('a')); // 4
System.out.println(s1.indexOf("AB")); // 0
System.out.println(s1.lastIndexOf('A')); // 2
8.字符串轉(zhuǎn)換為數(shù)組
字符串可以轉(zhuǎn)換為字節(jié)數(shù)組或字符數(shù)組。
格式:byte []getBytes( ) //按系統(tǒng)默認字符集編碼轉(zhuǎn)換為字節(jié)數(shù)組
byte []getBytes(String enc ) //基中enc為字符集編碼
char []toCharArray( ) // 轉(zhuǎn)換為字符數(shù)組
例: byte b[]; char c[];
String s="計算機";
b=s.getBytes();
c=s.toCharArray();
System.out.println(b); // [B@17943a4
System.out.println(c); // 計算機
9.轉(zhuǎn)換為字符串
String類提供了一組valueOf方法用來將其他數(shù)據(jù)類型轉(zhuǎn)換成字符串,其參數(shù)可以是任何數(shù)據(jù)類型(byte類型除外),它們都是靜態(tài)的,也就是說不必創(chuàng)建實例化對象即可直接調(diào)用這些方法。
格式: String.valueOf(數(shù)據(jù)類型)
例:char c[]={'A','B','C','D','E'};
String s="Help",s1,s2,s3;
s1=String.valueOf(c,1,3); // “BCD”
s2=String.valueOf(true); // “true”
s3=String.valueOf(95.5); // “95.5”
同時,類Integer,Double,Float和Long中也提供了方法valueOf( )把一個字符串轉(zhuǎn)化為對應(yīng)的數(shù)字類型。
例:String s="35";
Integer i=Integer.valueOf(s); // 35
Double d=Double.valueOf(s); // 35.0
10.字符串替換(補充)
格式:public String replace(char oldChar ,char newChar)
功能:把字符串中出現(xiàn)的所有指定字符轉(zhuǎn)換成新字符
例:String s1="ABACAD",s2;
s2=s1.replace('A','Z'); // “ZBZCZD”
7.2.4 StringBuffer類的應(yīng)用
StringBuffer表示可變字符串,可以在其中插入字符或在末尾添加字符。如果超出已分配的緩沖區(qū),系統(tǒng)會自動地為它分配額外空間。
1.a(chǎn)ppend方法
格式:public synchronized StringBuffer append(數(shù)據(jù))
功能:在已有字符串末尾添加一個字符串str
例:P144 char data[]={'a','b','c','d','e'};
StringBuffer buffer=new StringBuffer();
buffer.append(100);
buffer.append('*');
buffer.append(2.50F);
buffer.append(" is equal to ");
buffer.append(250.000);
buffer.append(' ');
buffer.append(data);
buffer.append(' ');
buffer.append(data,2,3);
System.out.print(buffer);
運行結(jié)果:100*2.5 is equal to 250.0 abcde cde
String s=”ab”;
StringBuffer b=”XYZ”; //錯
StringBuffer b=new StringBuffer(“XYZ”);
s=b ; // 錯
s=b.toSting() // “XYZ”
b=s; //錯
int i=b.length();
b=b.replace(0,s); //將字符串s值給bs
2.insert方法
格式:public synchronized StringBuffer insert(插入位置,數(shù)據(jù))
功能:在插入位置處插入數(shù)據(jù),總長度增加
例P144 char data[]={'a','b','c','d','e'};
StringBuffer buffer=new StringBuffer();
buffer.insert(0,100);
buffer.insert(0,2.5F);
buffer.insert(3,'*');
buffer.insert(0,250.0);
buffer.insert(5," is equal to ");
System.out.print(buffer);
運行結(jié)果:250.0 is equal to 2.5*100
3.其他方法
public StringBuffer delete(int start ,int end) //刪除子串,不包括end位字符
public StringBuffer deleteCharAt(int index) //刪除index位置上的字符
public StringBuffer replace(int start,int end,String str) //替換子串,字符串長度可增長或減短
StringBuffer reverse( ) //翻轉(zhuǎn)字符串
例P144:StringBuffer buffer=new StringBuffer("安徽城市管理學(xué)院");
buffer=buffer.delete(0,2); // 城市管理學(xué)院
buffer=buffer.replace(2,4,"職業(yè)"); // 城市職業(yè)學(xué)院
buffer=buffer.reverse(); // 院學(xué)業(yè)職市城
buffer=buffer.deleteCharAt(1); // 院業(yè)職市城
7.3 輸入輸出流類
7.3.1 數(shù)據(jù)流概念
1.數(shù)據(jù)流
數(shù)據(jù)流是指一組有順序的、有起點和終點的字節(jié)集合,實際上是一個數(shù)據(jù)序列,它可以看成是數(shù)據(jù)的導(dǎo)管。輸入就是讀取數(shù)據(jù)流,輸出則是寫入數(shù)據(jù)流。處理過程:打開流、讀取或?qū)懭肓鳌㈥P(guān)閉流。
Java程序不直接操縱I/O設(shè)備,而是在程序和設(shè)備之間加入了一個中間介質(zhì),這就是數(shù)據(jù)流,采用數(shù)據(jù)流的目的就是使程序的輸入輸出操作獨立于具體設(shè)備,程序一旦建立了數(shù)據(jù)流,就可以不用理會起點或終點是何種設(shè)備。
Java提供許多數(shù)據(jù)流的類和方法,封裝在java.io包中,編程時用它處理輸入輸出,只要在程序前面加上語句:import java.io.*: ,即可使用其中的各種I/O方法。
2.輸入流與輸出流
建立數(shù)據(jù)流實際上就是建立數(shù)據(jù)傳輸通道,將起點和終點連接起來。
輸入流可從鍵盤或文件獲得數(shù)據(jù),輸出流可向顯示器屏幕、打印機或文件中傳輸數(shù)據(jù)。Java中最基本的流類有2個:基本輸入流InputStream,基本輸出流OutputStream
3.緩沖流
對數(shù)據(jù)流的每次操作是以字節(jié)為單位進行的,為了提高數(shù)據(jù)傳輸效率,通常使用緩沖流(buffered stream),即為一個流配有一個緩沖區(qū)(buffer),一個緩沖區(qū)就是專門用于傳送數(shù)據(jù)的一塊內(nèi)存。
當向一個緩沖流寫入數(shù)據(jù)時,系統(tǒng)將數(shù)據(jù)發(fā)送到緩沖區(qū),而不是直接發(fā)送外部設(shè)備,緩沖區(qū)自動記錄數(shù)據(jù),當緩沖區(qū)滿時,系統(tǒng)將數(shù)據(jù)全部發(fā)送到相應(yīng)設(shè)備。
當從一個緩沖流讀取數(shù)據(jù)時,系統(tǒng)實際是從緩沖區(qū)中讀取數(shù)據(jù)。當緩沖區(qū)空時,系統(tǒng)將從相應(yīng)設(shè)備自動讀取盡可能多的數(shù)據(jù)充滿緩沖區(qū)。
7.3.2 Java的標準數(shù)據(jù)流
標準輸入指鍵盤輸入;標準輸出指輸出到顯示器。
標準輸入輸出功能是通過Java中的系統(tǒng)類System實現(xiàn)的。它在java.lang包中,是一個最終類,有3個公共的靜態(tài)的成員變量:in , out , err可在程序中直接調(diào)用它們。
1.標準輸入System.in
System.in作為InputStream類的對象實現(xiàn)標準輸入,可以調(diào)用它的read方法來讀取鍵盤數(shù)據(jù)。read方法有3種格式:
public int read( ) // 讀入一個字節(jié),作為整數(shù)返回
public int read(byte b[]) throws IOException
public int read(byte b[],int off,int len) //?從輸入流中讀取長度為len的數(shù)據(jù),寫入字節(jié)數(shù)組b中從索引off開始綿位置 (不作要求)
如果輸入流結(jié)束,返回-1。發(fā)生I/O錯時,會拋出IOException異常。
例:byte a[]=new byte[10]; byte b[]=new byte[10];
System.in.read(a); System.in.read(b,1,2); //若輸入abcdef回車abcdef回車
System.out.println((char)a[2]); // c
System.out.println((char)b[0]); // 空
System.out.println((char)b[1]); // a
System.out.println((char)b[2]); // b
System.out.println((char)b[3]); // 空
2.標準輸出System.out
格式:void write(int b);
功能:將指定字節(jié)b寫入輸出流,如果b的值大于255,則只輸出它的低位字節(jié)所表示的值
格式:void write(byte b[]);
功能:把字節(jié)數(shù)組中的b.length個字節(jié)寫入輸出流
格式:void write(byte b[],int off,int len);
功能:把字節(jié)數(shù)組b中從索引off開始的len個字節(jié)寫入輸出流
可以調(diào)用它的print(不換行輸出) , println(換行輸出) , 或write方法來輸出各種類型的數(shù)據(jù)。它們不產(chǎn)生輸出異常。
write方法用來輸出字節(jié)數(shù)組,在輸出時不換行,在輸出單個字節(jié)時,并不能立即顯示出來,必須調(diào)用flush方法或close方法強制回顯。
例:byte a[]=new byte[15];
System.in.read(a); // 輸入abced
System.out.println(a); // 輸出[B@480457 亂碼
System.out.write(a); // 輸出abced
System.out.write(a,1,2); // 輸出bc
System.out.println(a[1]); // 98
System.out.write(a[1]); // b
System.out.println(); //強制回顯示,也可用System.out.close() ; System.out.flush( )方法;
注:(1)從鍵盤輸入字符串后,保存在緩沖區(qū)中的元素還要上兩個元素‘\r’(回車鍵),元素值為ASCII碼值。
?。?)read方法返回值為int,為實際讀入的字節(jié)個數(shù)。
?。?)read會產(chǎn)生輸入異常,要么放在try…catch塊中執(zhí)行,要么令mai方法將異常拋出(throws IOException)
long skip(long n) ; (補充)
輸入流的當前讀取位置向前移動n字節(jié),并返回實際跳過的字節(jié)數(shù)
例:P48 System.in.skip(2);
7.3.3 java.io包中的數(shù)據(jù)流類及文件類
java.io包封裝了大量的數(shù)據(jù)流類,支持基于字節(jié)流(byte stream)的數(shù)據(jù)流(這種流對于16位的Unicode碼表示的字符流的處理很不方便)和基于字符流(character stream)(以16位Unicode碼形式表示)的數(shù)據(jù)流。
表7.1~7.4 見P148
為了全面管理文件系統(tǒng),Java還提供了兩個文件類:一般文件File和隨機文件類RandomAccessFile。前者提供操作系統(tǒng)目錄管理的功能,允許用戶訪問文件屬性和路徑等??梢皂樞蛟L問文件。后者用于對文件以隨機操作方式讀寫數(shù)據(jù)。
7.3.4 數(shù)據(jù)流的應(yīng)用
例:P150 import java.io.* ;
public class SC{
public static void main(String arg[]) throws IOException{
FileReader in=new FileReader("P3.java"); //建立文件輸入流,打開P3.java
BufferedReader bin=new BufferedReader(in); //建立緩沖輸入流
FileWriter out=new FileWriter("Hello.txt",true);// 建立文件輸出流,true表示將數(shù)據(jù)保存在文件尾部
String str;
while((str=bin.readLine())!=null){ //讀入一行
System.out.println(str);
out.write(str+"\n") ; }// 寫入"Hello.txt"
in.close();
out.close(); }}
表7.9 字符文件流類的構(gòu)造 P151
名 稱
說 明
FileReader(String name)
name代表文件名,可包含路徑
FileReader(File file)
file是文件類對象
FileReader(FileDescriptor fdobj)
fdobj代表一個打開的I/O設(shè)備
FileWriter(File file)
file是文件類對象
FileWriter(String name,booleam a)
a取真則將數(shù)據(jù)添加在文件尾部
如果要選擇地讀寫文件,例如讀寫一行或幾行,隨機文件RandomAccessFile可實現(xiàn)這種操作,它能從文件的不同位置讀寫不同長度的數(shù)據(jù)。
例P151 import java.io.* ;
public class SC{
public static void main(String arg[]) {
String str[]={"First line\n","Second line\n","last line\n"};
try{
RandomAccessFile rf=new RandomAccessFile("hello.txt","rw");
System.out.println("\n文件的指針位置為:"+rf.getFilePointer());
System.out.println("文件的長度為:"+rf.length());
rf.seek(rf.length());
System.out.println("文件指針現(xiàn)在的位置為:"+rf.getFilePointer());
for (int i=0;i<3;i++)
rf.writeBytes(str[i]);// 字符串轉(zhuǎn)換為字節(jié)串添加到文件末尾
rf.seek(0);
System.out.println("\n文件現(xiàn)在內(nèi)容:");
String s;
while((s=rf.readLine())!=null)
System.out.println(s);
rf.close(); }
catch(FileNotFoundException fnoe){}
catch(IOException ioe){} }}
7.3.5 文件(補充)
1.創(chuàng)建文件
格式:File pathname=new File(args[0])
功能:以路徑文件名來建立文件對象
格式:File f=new File(pathname.getPath , fileNames[i])
功能:以路徑+文件名創(chuàng)建文件對象
2.File類提供的方法
?。?)對文件名操作提供方法
public String getName( ) //得到一個不包含路徑的文件名
public String getParent( ) //得到文件上一級的目錄名
public File getParenFile( ) //得到文件對象父路徑名
public String getPath( ) //返回文件路徑名字符串,即路徑文件名
public String[] list( ) //返回一個字符串數(shù)組,為該文件所在目錄下的所有文件名列表,如:String fileName[]=pathName.list( )
public String getCanonicalPath( ) throws IOException //返回該文件對象與系統(tǒng)平臺相關(guān)的絕對路徑,與getAbsoluttPath( )同。
public String renameTo(File newName ) //返回重命名后的文件名
public String getAbsolutePath( ) //返回文件絕對路徑名
(2)測試文件屬性操作提供方法
public boolean isDirectory( ) //測定是否是目錄,如果File代表一個目錄,則返回true,否則返回false
public boolean isFile( ) //測定是否是文件
public boolean isAbsolute( ) //測定是否是絕對文件
public boolean exists( ) //測定文件是否存在
public boolean canRead( ) //測定是否是可讀文件
public boolean canWrite( ) //測定是否是可寫文件
?。?)測試文件屬性操作提供方法
public boolean delete( ) // 刪除當前文件并釋放資源
public void deleteOnExit( ) // 執(zhí)行完后,刪除文件
public long length( ) // 返回文件字節(jié)長度
public long lastModified( ) //返回文件最后修改時間
?。?)為目錄操作提供的方法
public boolean mkdir( ) //創(chuàng)建目錄
public boolean mkdir( ) //創(chuàng)建包含父目錄的目錄
public String[] list( ) // 返回當前目錄下的文件
public String[] list(FilenameFilter filter) // 返回當前目錄下經(jīng)過濾后的文件
public static File[] listRoots( ) // 返回根目錄結(jié)構(gòu)
?。?)其他方法
public int hashCode( ) // 返回文件名的哈希碼
public boolean setLastModified(long time) //設(shè)置文件最后修改時間
public boolean setReadOnly( ) //設(shè)置文件只讀屬性
例:功能:顯示指定目錄下的子目錄,如執(zhí)行java SC c:\
import java.io.* ;
public class SC{
public static void main(String args[]) {
if(args.length==0) args=new String[]{".."} ;//命令行缺省值
try {
File pathName=new File(args[0]); //取命令行參數(shù)
String fileNames[]=pathName.list(); //取pathName下所有文件名列表
for (int i=0;i<fileNames.length;i++)
{ File f=new File(pathName.getPath(),fileNames[i]);//創(chuàng)建路徑和文件名創(chuàng)建文件對象f
if(f.isDirectory()) //判斷是否是目錄
{System.out.println(f.getCanonicalPath()); //輸出絕對路徑
main(new String[] {f.getPath()}) ; //取下一級子目錄
}}}
catch(IOException e)
{ e.printStackTrace( ); }}}
7.4 其他常用類
數(shù)學(xué)函數(shù)類Math,提供了基本數(shù)學(xué)運算;日期類Date,Calendar和DateFormat,提供了日期和時間操作;隨機數(shù)類Random提供了隨機數(shù)生成器;向量類Vector提供了類似于可變長數(shù)組的操作。
7.4.1 數(shù)學(xué)函數(shù)類Math
Math是一個最終類,可直接在程序中加Math前綴調(diào)用,其成員變量和常用成員方法如下:
static double E // 數(shù)學(xué)常量e
static double PI // 圓周率Л
static double sin(double a) // 正弦函數(shù),參數(shù)為弧度
static double cos(double a) // 余弦函數(shù),參數(shù)為弧度
static double tan(double a) // 正切函數(shù),參數(shù)為弧度
static double toDegrees(double angrad) // 弧度轉(zhuǎn)換為角度
static double toRadians(double angdeg) // 角度轉(zhuǎn)換為弧度
static double exp(double a) // 常數(shù)e的a次冪
static double log(double a) // 自然對數(shù)
static double sqrt(double a) // 平方根
static double pow(double a,double b) // a的b次方
static double round(double a) // 四舍五入
static double round(float a) // 四舍五入
static double random( ) // 產(chǎn)生大于等于0.0小于1.0的隨機數(shù)
static double abs(double a) // 絕對值,參數(shù)可以是float,int,long
static double max(double a,double b) //最大值,參數(shù)可以是float,int,long
static double min(double a,double b) //最小值,參數(shù)可以是float,int,long
例:System.out.println(Math.PI); // 3.141592653589793
System.out.println(Math.sqrt(9)); // 3.0
System.out.println(Math.random()); //0.061703095869295566
System.out.println(Math.round(7.5)); // 8
System.out.println(Math.round(7.4)); // 7
System.out.println(Math.max(9,4)); // 9 Math.max(9,4,10)則錯
7.4.2 日期類Math
Java提供了3個日期類:
Date :用于創(chuàng)建日期對象并獲得日期
Calendar :可獲取和設(shè)置日期
DateFormat:用于創(chuàng)建日期格式化器,由格式化器將日期轉(zhuǎn)換為各種日期格式串輸出
Date和Calendar類在java.util包中,DateFormat類在java.text包中
Java語言規(guī)定的基準日期為1970.1.1 00:00:00格林威治(GMT)標準時
例P154 import java.text.*;
import java.util.*;
import java.awt.* ;
import java.applet.*;
public class SC extends Applet {
public void paint(Graphics g){
Date today;
Calendar now;
DateFormat f1,f2;
String s1,s2;
today=new Date(); //獲取系統(tǒng)當前日期
g.drawString("字符串格式:"+today.toString(),20,20);
f1=DateFormat.getInstance(); //以默認格式生成格式化器
s1=f1.format(today); //將日期轉(zhuǎn)換為字符串
g.drawString("系統(tǒng)格式:"+s1,20,40);
//生成長格式的中國日期格式化器
f1=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
//生成長格式的中國時間格式化器
f2=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
s1=f1.format(today); //將日期轉(zhuǎn)換為日期字符串
s2=f2.format(today); //將日期轉(zhuǎn)換為時間字符串
g.drawString("中國格式:"+s1+" "+s2,20,60);
now=Calendar.getInstance() ;//獲取系統(tǒng)時間
s1=now.get(now.HOUR)+"時"+now.get(now.MINUTE)+"分"+now.get(now.SECOND)+"秒";
g.drawString("調(diào)整前時間:"+s1,20,80);
now.set(2001,2,15,9,9,9);
today=now.getTime();
g.drawString("調(diào)整后時間"+today.toString(),20,100); }}
7.4.3 隨機數(shù)類Random
為了使用Java程序有良好的可移植性,應(yīng)盡可能使用Random類來生成隨機數(shù),而不用Math.random( )。
Random有兩個構(gòu)造方法:Random( )(使用系統(tǒng)時間為種子數(shù)),Random(long seed)。構(gòu)造方法只是創(chuàng)建了隨機數(shù)生成器,必須調(diào)用生成器的方法才能產(chǎn)生隨機數(shù)。Random具有nextBoolean,nextInt等方法。
Random包含在java.util包中。
例:Random r=new Random( );
int i1=r.nextInt( );
int i2=r.nextInt(20); // 產(chǎn)生大于等于0小于20的隨機整數(shù)
double d1=r.nextDouble( ); //產(chǎn)生大于等于0.0小于1.0的隨機數(shù)
double d1=r.nextDouble(20.0); // 錯
7.4.4 向量類Vector
Vector被設(shè)計成一個能不斷增長的序列,用來保存對象引用。類似于可變長數(shù)組,但功能更加強大,任何類型的對象都可以放入Vector。
Vector包含在java.util包中,常用方法如下。
Vector(int initCapacity,int increment) //構(gòu)造方法,指定初始容量和增量
void addElement(Object obj) //在尾部添加元素,元素個數(shù)自動增1
boolean removeElement(Object obj) //刪除第一個與obj相同的元素
void setElementAt(Object obj , int index) // 替換指定位置的元素
Object elementAt(int index) //返回指定位置的元素
int indexOf(Object obj) //返回指定元素obj在向量中的位置
int size( ) //返回元素個數(shù)
int capacity( ) //返回向量長度
void trimToSize( ) //按當前元素個數(shù)縮減向量長度
Enumeration elements( ) //生成一個向量元素的枚舉
例:P157
7.4.5 Class類與Runtime類
通過Class類與Runtime類的方法可以獲得運行時的信息,如當前類名、超類名、包名、內(nèi)存空間以及操作系統(tǒng)名稱等
例:P159