簡介:第7章JAVA輸入輸出流及文件操作,71流的概念72基本輸入輸出流73文件操作,學(xué)習(xí)要求,理解流的概念掌握在JAVA中進(jìn)行文件讀、寫操作的方法,思考,程序中數(shù)據(jù)的存儲方法有單個、臨時的變量多個、同類型、臨時的(退出即消失)數(shù)組多個、不同類型、臨時的向量,若JAVA應(yīng)用程序中需要較多或長久保留的數(shù)據(jù),可以用什么方式進(jìn)行存儲和調(diào)用更有效呢,71流的概念,流(STREAM)是對輸入輸出設(shè)備的一種抽象表示,指在計(jì)算機(jī)的輸入與輸出之間運(yùn)動的數(shù)據(jù)的序列。輸入流代表從外設(shè)流入計(jì)算機(jī)的數(shù)據(jù)序列輸出流代表從計(jì)算機(jī)流向外設(shè)的數(shù)據(jù)序列流的特點(diǎn)數(shù)據(jù)的獲取和發(fā)送均按數(shù)據(jù)序列順序進(jìn)行。JAVA中的流分為兩種(被抽象為四個類)字節(jié)流INPUTSTREAM類和OUTPUTSTREAM類字符流READER類和WRITER類字符流比字節(jié)流更有效。,1字節(jié)流,從抽象類INPUTSTREAM和OUTPUTSTREAM派生出來的一系列類,這類流以字節(jié)BYTE為基本處理單位。,基本輸入流類INPUTSTREAM的常用方法,◇從流中讀取數(shù)據(jù)INTREAD//讀取一個字節(jié),返回值為所讀的字節(jié)INTREADBYTEB讀取多個字節(jié),放置到字節(jié)數(shù)組B中,通常讀取的字節(jié)數(shù)量為B的長度,返回值為實(shí)際讀取的字節(jié)的數(shù)量INTREADBYTEB,INTOFF,INTLEN讀取LEN個字節(jié),放置到以下標(biāo)OFF開始字節(jié)數(shù)組B中,返回值為實(shí)際讀取的字節(jié)的數(shù)量INTAVAILABLE//返回值為流中尚未讀取的字節(jié)的數(shù)量LONGSKIPLONGN;//讀指針跳過N個字節(jié)不讀,返回值為實(shí)際跳過的字節(jié)數(shù)量◇關(guān)閉流CLOSE//流操作完畢后必須關(guān)閉,基本輸出流類OUTPUTSTREAM的常用方法,◇輸出數(shù)據(jù)VOIDWRITEINTB//往流中寫一個字節(jié)BVOIDWRITEBYTEB//往流中寫一個字節(jié)數(shù)組BVOIDWRITEBYTEB,INTOFF,INTLEN把字節(jié)數(shù)組B中從下標(biāo)OFF開始、長度為LEN的字節(jié)寫入流中◇FLUSH//刷空輸出流,并輸出所有被緩存的字節(jié)由于某些流支持緩存功能,該方法將把緩存中所有內(nèi)容強(qiáng)制輸出到流中?!箨P(guān)閉流CLOSE//流操作完畢后必須關(guān)閉,2字符流,從抽象類READER和WRITER派生出的一系列子類,這類流以16位的UNICODE碼表示的字符(一個字符由兩個字節(jié)組成)為基本處理單位。常用字符流子類和功能,72基本輸入輸出流,1鍵盤輸入和格式化輸出JAVA有3個內(nèi)置的標(biāo)準(zhǔn)流對象1)標(biāo)準(zhǔn)輸入流SYSTEMIN用來讀取用戶從鍵盤的輸入2)標(biāo)準(zhǔn)輸出流SYSTEMOUT用來在屏幕上顯示信息3)標(biāo)準(zhǔn)輸出流SYSTEMERR用來顯示出錯信息(1)鍵盤輸入使用SYSTEMIN對象的READ()方法例CHARCCHARSYSTEMINREAD使用INPUTSTREAMREADER、BUFFERREADER流類例INPUTSTREAMREADERISRNEWINPUTSTREAMREADERSYSTEMINBUFFERREADERBRNEWBUFFERREADERISR,通過SCANNER類,SCANNER在JAVAUTIL包中SCANNER類主要方法1)NEXTINT提示輸入一個整數(shù)2)NEXTDOUBLE提示輸入一個浮點(diǎn)數(shù)3)READLINESTRINGPROMPT提示輸入一個字符串,直到行結(jié)束。例SCANNERSNEWSCANNERINTASNEXTINTDOUBLEX1SCANNERNEXTDOUBLE,(2)格式化輸出,用JAVA的標(biāo)準(zhǔn)輸出SYSTEMOUT,可以輸出不同類型的對象例INTA20SYSTEMOUTPRINTASYSTEMOUTPRINTLN“大家好”//加換行用JAVATEXT包中的NUMBERFORMAT類可以控制顯示格式,有三種方法NUMBERFORMATGETNUMBERINSTANCE//附加逗號NUMBERFORMATGETCURRENCYINSTANCE//貨幣符號NUMBERFORMATGETPERCENTINSTANCE//百分號,例IMPORTJAVAIOIMPORTJAVATEXTPUBLICCLASSTESTOUTPUT{PUBLICSTATICVOIDMAINSTRINGARGS{DOUBLEX2345123STRINGS1,S2,S3NUMBERFORMATN1NUMBERFORMATGETNUMBERINSTANCENUMBERFORMATC1NUMBERFORMATGETCURRENCYINSTANCENUMBERFORMATP1NUMBERFORMATGETPERCENTINSTANCES1N1FORMATXS2C1FORMATXS3P1FORMATXSYSTEMOUTPRINTLNS1””S2””S3}}結(jié)果2,3451232,34512234,512,用戶自定義輸出格式用DECIMALFORMAT類和FORMAT類DECIMALFORMAT類適合貨幣之類的格式化FORMAT類(在附帶的COREJAVA包中,要把它加到CLASSPATH中)適合科技方面格式化,和C語言的PRINTF函數(shù)功能類似。DECIMALFORMAT類的范例格式串,,FORMAT的范例格式,首先加IMPORTCOREJAVAFORMATF固定格式的浮點(diǎn)數(shù)FORMATPRINTF“X的值是2F\N”,XD,I以十進(jìn)制表示的整數(shù)S字符串C字符G,G以一般格式表示浮點(diǎn)數(shù),對小數(shù)用定點(diǎn)格式,對大數(shù)用指數(shù)格式X,X以十六進(jìn)制表示的整數(shù)O以八進(jìn)制表示例FORMATPRINTF“你的工資是2F\N”,PAY,73文件操作,1JAVA程序的文件與目錄管理JAVAIO包中的FILE類專門用來管理磁盤文件和目錄。每個FILE類的對象表示一個磁盤文件或目錄,對象屬性中包含名稱、長度、所含文件個數(shù)等信息。(1)創(chuàng)建FILE類對象的三種方法FILESTRINGPATH指明磁盤文件或目錄名及其路徑注意目錄分隔符用SYSTEMDIRSEP表示如FILEF1NEWFILE“C”SYSTEMDIRSEP”SJ”FILESTRINGPATH,STRINGNAME,文件或目錄的路徑,文件或目錄名,FILEFILEDIR,STRINGNAME(2)獲取文件或目錄屬性,已經(jīng)存在的磁盤目錄,(3)文件或目錄的操作,注意由于JAVAAPPLET程序是從網(wǎng)絡(luò)上下載到本地機(jī)器運(yùn)行的,不可知也不可控,所以JAVA的安全機(jī)制禁止JAVAAPPLET程序訪問和存取本地文件,如果試圖在JAVAAPPLET程序中使用文件操作,則將引發(fā)JAVA的安全性異常。,2寫文本文件,方法一用FILEOUTPUTSTREAM打開文件MYTXT,然后用PRINTSTREAM對象P的PRINTLN方法把字符串寫入文件中。例FILEOUTPUTSTREAMFOUTNEWFILEOUTPUTSTREAM“MYTXT”PRINTSTREAMPNEWPRINTSTREAMFOUTPPRINTLN“要寫入文本文件中的內(nèi)容”PCLOSE,寫文本例子1,方法二用FILEWRITER打開文件MYFTXT,又創(chuàng)建了文本輸出流OUT,然后用OUT的PRINT(或者PRINTLN)方法把字符串寫入文件中。例FILEWRITERFWNEWFILEWRITER“MYFTXT”PRINTWRITEROUTNEWPRINTWRITERFWOUTPRINT“要寫入文本文件中的內(nèi)容”O(jiān)UTCLOSE//關(guān)于輸出FWCLOSE//關(guān)閉文件,寫文本例子2,3讀文本文件,方法一用FILEINPUTSTREAM打開文件MYTXT,然后建立DATAINPUTSTREAM的對象IN(文件流),使用IN的READLINE()方法以一行為單位讀出MYTXT文件中的所有字符串。例FILEINPUTSTREAMFSNEWFILEINPUTSTREAM“MYTXT”DATAINPUTSTREAMINNEWDATAINPUTSTREAMFSWHILEINAVAILABLE0SYSTEMOUTPRINTLNINREADLINEINCLOSE//關(guān)閉輸入流,讀文本例子1,方法二用FILEREADER打開文件MYFTXT,然后用BUFFEREDREADER類的對象BR作為文件流,用BR的READLINE()讀取文件中的字符串。例FILEREADERFRNEWFILEREADER“MYFTXT”BUFFEREDREADERBRNEWBUFFEREDREADERFRSTRINGRECORDNEWSTRINGINTRECCOUNT0WHILERECORDBRREADLINENULL{RECCOUNTSYSTEMOUTPRINTLNRECCOUNT””RECORD}BRCLOSE//關(guān)于緩存FRCLOSE//關(guān)閉文件,讀文本例子2,4程序?qū)ξ募碾S機(jī)訪問,用RANDOMACCESSFILE類可以實(shí)現(xiàn)對文件的隨機(jī)讀寫操作,即可以在文件的任意位置執(zhí)行數(shù)據(jù)讀寫;創(chuàng)建RANDOMACCESSFILE的對象例FILEMFNEWFILE“MYFTXT”RANDOMACCESSFILEMYRAFNEWRANDOMACCESSFILEMF,”RW”,訪問模式RW可讀、可寫R只讀,作為數(shù)據(jù)源的文件,對文件位置指針的操作,利用GETPOINTER方法可以獲得當(dāng)前文件位置指針從文件頭算起的絕對位置PUBLICLONGGETPOINTER利用SEEK方法可以將指針移動到POS指定的文件位置PUBLICVOIDSEEKLONGPOS利用LENGTH方法可以返回文件的字節(jié)長度PUBLICLONGLENGTH,從文件頭算起的絕對位置,,對文件進(jìn)行讀寫操作,RANDOMACCESSFILE類實(shí)現(xiàn)了DATAINPUT和DATAOUTPUT接口,在讀/寫時具備強(qiáng)大的含類型轉(zhuǎn)換的輸入/輸出功能;RANDOMACCESSFILE類的所有方法都有可能拋出IOEXCEPTION異常,在利用它實(shí)現(xiàn)文件操作時需要將相關(guān)語句放在TRY塊中,并配上CATCH塊來處理異常。,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 24
大?。?0.49(MB)
子文件數(shù):
簡介:JAVA程序設(shè)計(jì),第8章多線程,81線程及其創(chuàng)建811JAVA中的線程,JAVA程序通過流控制來執(zhí)行程序流,程序中單個順序的流控制稱為線程,多線程則指的是在單個程序中可以同時運(yùn)行多個不同的線程執(zhí)行不同的任務(wù)。單個程序內(nèi)部也可以在同一時刻進(jìn)行多種運(yùn)算。很多程序語言需要利用外部的線程軟件包來實(shí)現(xiàn)多線程,而JAVA則內(nèi)在支持多線程,它的所有類都是在多線程的思想下定義的。,線程,線程就是程序中單獨(dú)順序的流控制。JAVA的線程是通過JAVA的軟件包JAVALANG中定義的類THREAD來實(shí)現(xiàn)的。,線程體,線程的所有活動都是通過線程體RUN方法來實(shí)現(xiàn)的。在一個線程被建立并初始化以后,JAVA的運(yùn)行時系統(tǒng)就自動調(diào)用RUN方法。正是通過RUN方法才使得建立線程的目的得以實(shí)現(xiàn)。通常,RUN方法是一個循環(huán),例如一個播放動畫的線程要循環(huán)顯示一系列圖片。有時,RUN方法會執(zhí)行一個時間較長的操作,例如下載并播放一個JPEG格式的電影。,812創(chuàng)建線程對象的兩種方法,1.通過繼承THREAD類創(chuàng)建線程CLASSMYTHREADEXTENDSTHREAD{PUBLICVOIDRUN{FORINTI0I100I{SYSTEMOUTPRINT““I}}2.通過向THREAD構(gòu)造方法傳遞RUNNABLE對象來創(chuàng)建線程CLASSMYTASKIMPLEMENTSRUNNABLE{PUBLICVOIDRUN{}}THREADTHREADNEWTHREADMYTASKTHREADSTART3可用匿名類來實(shí)現(xiàn)RUNNABLE,如TESTTHREAD4ANONYMOUSJAVA,813多線程,TESTTHREAD3JAVA多線程。THREADDRAWJAVA多線程繪圖。,82線程的控制,,821線程的狀態(tài)與生命周期,在一個線程的生命周期中,它總處于某一種狀態(tài)中。線程的狀態(tài)表示了線程正在進(jìn)行的活動以及在這段時間內(nèi)線程能完成的任務(wù)。,822線程優(yōu)先級,THREAD類有三個有關(guān)線程優(yōu)先級的靜態(tài)常量MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY,823對線程的基本控制,結(jié)束線程現(xiàn)在一般采取給線程設(shè)定一個標(biāo)記變量的方法來決定線程是否應(yīng)該終止。設(shè)定線程的優(yōu)先級可以使用THREAD對象的SETPRIORITYINTPRIORITY方法,,線程的啟動START暫時阻止線程的執(zhí)行THREADSLEEPLONGMILLISECOND來掛起線程的執(zhí)行TRY{THREADSLEEP1000}CATCHINTERRUPTEDEXCEPTIONE{//}JOIN方法。調(diào)用某THREAD對象的JOIN方法,可以將一個線程加入到本線程中,本線程的執(zhí)行會等待另一線程執(zhí)行完畢。THREADT//T是另一線程TRY{TJOIN}CATCHINTERRUPTEDEXCEPTIONE{//},后臺線程,線程有兩種,一類是DAEMON線程,一類是非DAEMON線程。在JAVA程序中,若還有非DEMON線程,則整個程序就不會結(jié)束;當(dāng)正在運(yùn)行的線程都是守護(hù)線程時,JAVA虛擬機(jī)退出。使用SETDAEMONTRUE垃圾回收是后臺線程示例TESTTHREADDAEMONJAVA,83線程的同步,,多線程同步,線程都是獨(dú)立的,而且異步執(zhí)行,也就是說每個線程都包含了運(yùn)行時所需要的數(shù)據(jù)或方法,而不需要外部的資源或方法,也不必關(guān)心其它線程的狀態(tài)或行為。但是經(jīng)常有一些同時運(yùn)行的線程需要共享數(shù)據(jù),例如一個線程向文件寫數(shù)據(jù),而同時另一個線程從同一文件中讀取數(shù)據(jù),因此就必須考慮其它線程的狀態(tài)與行為,這時就需要實(shí)現(xiàn)同步來得到預(yù)期結(jié)果。示例SYNCCOUNTER1JAVA,在JAVA語言中,引入了對象互斥鎖的概念,來保證共享數(shù)據(jù)操作的完整性。每個對象都對應(yīng)于一個可稱為“互斥鎖”的標(biāo)記,這個標(biāo)記用來保證在任一時刻,只能有一個線程訪問該對象。關(guān)鍵字SYNCHRONIZED用來與對象的互斥鎖聯(lián)系。當(dāng)某個對象用SYNCHRONIZED修飾時,表明該對象在任一時刻只能由一個線程訪問。使用WAIT方法可以釋放對象鎖使用NOTIFY或NOTIFYALL可以讓等待的一個或所有線程進(jìn)入就緒狀態(tài),SYNCHRONIZED除了象上面講的放在對象前面限制一段代碼的執(zhí)行外,還可以放在方法聲明中,表示整個方法為同步方法。PUBLICSYNCHRONIZEDVOIDPUSHCHARC{}如果SYNCHRONIZED用在類聲明中,則表明該類中的所有方法都是SYNCHRONIZED的。示例SYNCCOUNTER2JAVA,生產(chǎn)者消費(fèi)者問題,示例PRODUCERCONSUMERSTACKJAVACLASSCUBBYHOLE{PRIVATEINTINDEX0PRIVATEINTDATANEWINT3PUBLICSYNCHRONIZEDVOIDPUTINTVALUE{WHILEINDEXDATALENGTH{TRY{THISWAIT}CATCHINTERRUPTEDEXCEPTIONE{}}DATAINDEXVALUEINDEXTHISNOTIFY},PUBLICSYNCHRONIZEDINTGET{WHILEINDEX0{TRY{THISWAIT}CATCHINTERRUPTEDEXCEPTIONE{}}INDEXINTVALDATAINDEXTHISNOTIFYRETURNVAL}},84并行API,JAVAUTILCONCURRENT包LOCK、REENTRANTLOCKLOCKTRYLOCKUNLOCK例NODEADLOCKDEMOJAVAREADWRITELOCK、REENTRANTREADWRITELOCKWRITELOCKLOCK,READLOCKUNLOCK例ARRAYLIST2JAVA,并行的集合類,產(chǎn)生一個線程安全的集合對象COLLECTIONSSYNCHRONIZEDARRAYLISTLISTCOPYONWRITEARRAYLIST、COPYONWRITEARRAYSET適合于很少寫入而迭代頻繁的對象ARRAYBLOCKINGQUEUE生產(chǎn)者與消費(fèi)者,使用PUT及TAKECONCURRENTHASHMAPPUTIFABSENT,REMOVE,REPLACE,線程相關(guān)的其他問題,使用JAVAUTILTIMER/TIMERTASK類示例TIMERTESTJAVA在線程中更新圖形化界面,要調(diào)用INVOKELATER示例THREADDRAWJJAVA,
下載積分: 6 賞幣
上傳時間:2024-01-05
頁數(shù): 21
大?。?0.27(MB)
子文件數(shù):