版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Java編程基礎(chǔ)知識簡要回顧:面向?qū)ο缶幊痰幕靖拍顑深惢镜腏ava程序編寫及運(yùn)行方式Java語言的語法結(jié)構(gòu)在Java中如何定義類( 關(guān)鍵:修飾符的使用) 在Java中如何實(shí)現(xiàn)繼承與多態(tài)如何利用系統(tǒng)提供的工具類如何設(shè)計圖形用戶界面(關(guān)鍵:將控件的響應(yīng)與類的方法聯(lián)系起來)淮海工學(xué)院 計算機(jī)課程第7章 JAVA高級編程7.1 Java的數(shù)據(jù)庫編程(重點(diǎn))7.2 輸入輸出流和文件處理7.3 Java的多線程機(jī)制(難點(diǎn))7.4 Java的網(wǎng)絡(luò)編程7.5 Java的多媒體技術(shù) 淮海工學(xué)院 計算機(jī)課程學(xué)習(xí)要求掌握J(rèn)ava數(shù)據(jù)庫編程的基本技術(shù)-Jdbc 理解流的概念,掌握在Java中進(jìn)行文件讀、寫操作的方
2、法理解Java的多線程機(jī)制了解Java網(wǎng)絡(luò)編程的一般原理 了解Java多媒體技術(shù)的基本知識 淮海工學(xué)院 計算機(jī)課程程序中數(shù)據(jù)的存儲方法有:單個、臨時的:變量多個、同類型、臨時的(退出即消失):數(shù)組多個、不同類型、臨時的:向量思考:若Java應(yīng)用程序中需要用到大量的數(shù)據(jù),或需要長久保留的數(shù)據(jù),或需要進(jìn)行反復(fù)查詢、 統(tǒng)計、維護(hù)等操作的數(shù)據(jù),該用什么方式進(jìn)行存儲和調(diào)用更有效呢?淮海工學(xué)院 計算機(jī)課程數(shù)據(jù)庫編程基礎(chǔ)知識(1) 數(shù)據(jù)設(shè)計常識(2) Java數(shù)據(jù)類型與數(shù)據(jù)表中的字段對應(yīng)(3) 創(chuàng)建數(shù)據(jù)源(ODBC)(4) 常用的數(shù)據(jù)庫操作SQL語句 淮海工學(xué)院 計算機(jī)課程(1)數(shù)據(jù)庫設(shè)計常識u 常用數(shù)據(jù)庫
3、管理系統(tǒng)微軟: Access(桌面數(shù)據(jù)庫,小型應(yīng)用,新版2010 )微軟: SQL Server (大、中、小型應(yīng)用,新版2005 )甲骨文:Oracle(大型應(yīng)用,新版 11g )u 數(shù)據(jù)庫設(shè)計原則 規(guī)范化滿足第三范式,將多對多(m:n)關(guān)系轉(zhuǎn)化為2個各一對多(1: m ) 和(1:n)關(guān)系 數(shù)據(jù)冗余盡量減少數(shù)據(jù)重復(fù)VS空間換時間 字段數(shù)據(jù)類型恰當(dāng),長度夠用且不浪費(fèi) 淮海工學(xué)院 計算機(jī)課程 一個記錄學(xué)生成績的數(shù)據(jù)表學(xué)號姓名性別課程號課程名學(xué)時學(xué)分成績11011S01C+80578張桂男張桂如何男避 免S:021101164485數(shù)據(jù)結(jié)構(gòu)張插桂入/更男新 重S復(fù)03、11011Java6447
4、5刪除異常?11012S01C+80585李云女11012S0264485李云女?dāng)?shù)據(jù)結(jié)構(gòu)11013S01C+80556楊彬男11014S04UML32290吳霞女11013S03Java64475楊彬男添加楊彬java成績:加全信息刪除UML課C+學(xué)時改為64:多處淮海工學(xué)程院:計吳算霞機(jī)被課程 如何改進(jìn)設(shè)計庫設(shè)計? 成績表1:mm:n 課程表1:n 淮海工學(xué)院 計算機(jī)課程課程號課程名學(xué)時學(xué)分S01C+805S02數(shù)據(jù)結(jié)構(gòu)644S03Java644S04UML322學(xué)號課程號成績11011S017811011S028511011S037511012S018511012S028511013S01
5、5611014S049011013S0375學(xué)生表學(xué)號姓名性別11011張桂男11012李云女11013楊彬男11014吳霞女 (2)Java數(shù)據(jù)類型與數(shù)據(jù)表中的字段對應(yīng)、 淮海工學(xué)院 計算機(jī)課程數(shù)據(jù)庫字符類屬性數(shù)值類屬性Access文本( char 、 String) 數(shù)字(int、long、float double)其中“字節(jié)”只可數(shù)字SQLServerchar字母占1位漢字占2位int 、bigintvarcharsmallint、tinyintnchar字母占1位漢字占1位floatnvarcharnumericText ntext保存不定長字符串?dāng)?shù)據(jù)real char、varchar
6、、text和nchar、nvarchar、ntext辨析char和varchar的長度都在1到8000之間;它們的區(qū)別在于char是定長字符數(shù)據(jù),而varchar 是變長字符數(shù)據(jù);所謂定長就是長度固定的,當(dāng)輸入的數(shù)據(jù)長度沒 有達(dá)到指定的長度時將自動以英文空格在其后面 填充,使長度達(dá)到相應(yīng)的長度;而變長字符數(shù)據(jù)則不會以空格填充;text存儲可變長度的非Unicode數(shù)據(jù),最大長度為231-1(2,147,483,647)個字符。 淮海工學(xué)院 計算機(jī)課程后面三種多了個字母“n”,它表示存儲的是Unicode數(shù)據(jù)類型的字符。它所有的字符都用兩個 字節(jié)表示,即英文字符也是用兩個字節(jié)表示。nchar、n
7、varchar的長度是在1到4000之間。和char、varchar比較:nchar、nvarchar則最多存 儲4000個字符,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字??梢钥闯鍪褂胣char、nvarchar數(shù)據(jù)類型時不用擔(dān) 心輸入的字符是英文還是漢字,較為方便,但在存儲英文時數(shù)量上有些損失。 淮海工學(xué)院 計算機(jī)課程淮海工學(xué)院 計算機(jī)課程淮海工學(xué)院 計算機(jī)課程(3)創(chuàng)建數(shù)據(jù)源以ACCESS為例任務(wù)欄“開始” 設(shè)置控制面板管理工具數(shù)據(jù)源(ODBC) 系統(tǒng)DSN添加Microsoft Access Driver(*.mdb) 完成輸入數(shù)據(jù)源名字選擇
8、在對話框中找到所需要的數(shù)據(jù)庫 ( 高級 輸入用戶名) 確定 淮海工學(xué)院 計算機(jī)課程以SQL Server 2000為例先在數(shù)據(jù)庫里建立一個帳戶、,指定其可以訪問的數(shù)據(jù)庫,再點(diǎn)任務(wù)欄“開始”按鈕設(shè)置控制面板管理工具數(shù)據(jù)源(ODBC) SQL Server 完成系統(tǒng)DSN添加輸入數(shù)據(jù)源的名稱選擇下拉列表中的服務(wù)器下提示失敗) 完成 淮海工學(xué)院 計算機(jī)課程ODBC 數(shù)據(jù)源管理中的用戶DSN和系統(tǒng)DSN有什么區(qū)別?用戶DSN是與用戶相關(guān)的,不同用戶建立的DSN相互不可見; 而系統(tǒng)DSN與用戶無關(guān),所有用戶都可見 ;用戶DSN保存在注冊表中的HKEY_CURRENT_USERSoftwareODBC項(xiàng)下
9、(不包括ODBC驅(qū)動)系統(tǒng)DSN保存在注冊表中的HKEY_LOCAL_MACHINESoftwareODBC項(xiàng)下 淮海工學(xué)院 計算機(jī)課程(4)常用的數(shù)據(jù)庫操作SQL語句SELECT語句查詢記錄INSERT語句插入記錄UPDATE語句更新記錄DELETE語句刪除記錄CREATE語句創(chuàng)建表 淮海工學(xué)院 計算機(jī)課程 淮海工學(xué)院 計算機(jī)課程語句功能語法格式建立數(shù)據(jù)表CREATETABLE數(shù)據(jù)表名 (字段名1數(shù)據(jù)類型(長度),字段名2數(shù)據(jù)類型(長度),)舉例:createtablestudent( xhtext(9),xmtext(8) ,cjsingle(4), nl integer(2)建立含有xh
10、、xm、cj、nl4個字段的student表添加字段ALTERTABLE數(shù)據(jù)表名ADDCOLUMN字段名 數(shù)據(jù)類型(長度)舉例:altertablestudentadd columnxbtext(2)在學(xué)生表中添加性別字段刪除字段ALTERTABLE數(shù)據(jù)表名 DROPCOLUMN字段名舉例: altertablestudentdropcolumnnl將學(xué)生表中的年齡字段刪除SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY子句HAVING子句 ORDER BY 子句 INTO 子句舉例:selectxh, xm from student wherexb=男order b
11、y xh數(shù)據(jù)查詢從學(xué)生表中查詢性別為男的學(xué)生,顯示其學(xué)號和姓名并使結(jié)果按學(xué)號升序排列。INSERT INTO 數(shù)據(jù)表名(字段名1,字段名2)VALUES(數(shù)據(jù)1,數(shù)據(jù)2)添加記錄舉例:insertintostudent (xh, xm,xb)values(015200101, 王小二, 男)DELETEFROM數(shù)據(jù)表名WHERE 條件表達(dá)式刪除記錄舉例:deletefromstudentwherexb=男UPDATE式數(shù)據(jù)表名 SET新數(shù)據(jù)值 WHERE條件表達(dá)更新記錄舉例:updatestudentsetcj=cj+5wherexb=女淮海工學(xué)院 計算機(jī)課程課堂練習(xí)設(shè)計數(shù)據(jù)庫:所選課題數(shù)據(jù)表
12、建立數(shù)據(jù)源:ODBC在查詢分析器中練習(xí)SQL命令:插入、更新、查詢編寫java程序,通過圖形用戶界面讀取數(shù)據(jù)表中信息 淮海工學(xué)院 計算機(jī)課程7.1 Java的數(shù)據(jù)庫編程Java中專門設(shè)置了一個java.sql包,定義了很多用來實(shí)現(xiàn)SQL功能的類,使用這些類,編程人員就可 以很方便地開發(fā)數(shù)據(jù)庫前端的應(yīng)用。因?yàn)镾QL是一種直接對數(shù)據(jù)庫進(jìn)行操作的非過程掃描語言,不適合整個數(shù)據(jù)庫應(yīng)用程序的前端編程, 所以需要其他語言來實(shí)現(xiàn)SQL語言的功能以完成對 數(shù)據(jù)庫的操作。 淮海工學(xué)院 計算機(jī)課程7.1.1 JDBC的概念JDBC(Java DataBase Connectivity)是一種用于執(zhí)行SQL語句的J
13、ava API,由一組用Java語言編寫的類和接口組成,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,即用Java實(shí)現(xiàn)的數(shù)據(jù)庫接術(shù)。輔助Java程序?qū)崿F(xiàn)數(shù)據(jù)庫功能的配套支持技術(shù)通稱為JDBC。JDBC的用途:(1)與數(shù)據(jù)庫建立連接(2) 發(fā)送SQL語句(3) 處理結(jié)果淮海工學(xué)院 計算機(jī)課程示例:/與數(shù)據(jù)庫建立連接Connectioncon=DriverManager.getConnection(“jdbc:odbc:student”,”user”,”pwd”);/發(fā)送SQL語句,從數(shù)據(jù)庫中提取記錄Statement stmt=con.createStatement();ResultSet rs=stmt.
14、excuteQuery(“select id,name,score from table_student ”);/對讀出的記錄結(jié)果進(jìn)行處理賦給變量While (rs.next()int sid=rs.getInt(“id”);String sname=rs.getString(“name”); Float scj=rs.getFloat(“score”); 淮海工學(xué)院 計算機(jī)課程負(fù)責(zé)與java應(yīng)用程序通信,向java應(yīng)用程序提供數(shù)據(jù)JDBC APIJDBC Driver API負(fù)責(zé)與具體數(shù)據(jù)環(huán)境的連接數(shù)據(jù)庫JDBC 和數(shù)據(jù)庫的通信路徑數(shù)據(jù)庫淮海工學(xué)院 計算機(jī)課程Java 應(yīng)用程序JDBC 驅(qū)動
15、程序管理器JDBC/ODBC橋供應(yīng)商提供的JDBC驅(qū)動程序ODBC驅(qū)動程序四類JDBC驅(qū)動程序第一類把JDBC轉(zhuǎn)換成ODBC,靠ODBC驅(qū)動程序與數(shù) 據(jù)庫通信第二類其源代碼由兩部分組成,一部分是java語言代碼, 另一部分是本地代碼,這類驅(qū)動程序和一個數(shù)據(jù)庫客戶的API通信;第三類是一個純Java客戶庫,它使用一個獨(dú)立于數(shù)據(jù)庫 的協(xié)議,把數(shù)據(jù)庫請求傳送給一個服務(wù)器組件,這個組 件把數(shù)據(jù)庫請求轉(zhuǎn)換成指定數(shù)據(jù)庫協(xié)議接受的請求;第四類是一個純Java庫,直接把JDBC請求轉(zhuǎn)換成指定 數(shù)據(jù)庫協(xié)議接受的請求。數(shù)據(jù)庫廠商一般都為其數(shù)據(jù)庫提供第三或第四類驅(qū)動程 序。 淮海工學(xué)院 計算機(jī)課程JDBC-ODBC
16、橋的概念ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)是微軟公司開放服務(wù)結(jié)構(gòu)(WOSA, Windows Open Services Architecture)中有關(guān)數(shù)據(jù)庫的一個組成部分,它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。 ODBC的最大優(yōu)點(diǎn)是能以統(tǒng)一的方式處理所有的數(shù)據(jù)庫。 淮海工學(xué)院 計算機(jī)課程JDBC-ODBC橋是一個JDBC驅(qū)動程序,它通過將JDBC操作轉(zhuǎn)換為ODBC操作來實(shí)現(xiàn)JDBC操作。 通過odbc子協(xié)議,使
17、用URL打開JDBC連接即可使用橋,建立連接前必須將橋驅(qū)動程序類sun.jdbc.odbc.JdbcOdbcDriver添加到名為jdbc.drivers的java,lang.System屬性中,或者用代碼顯示加載:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 淮海工學(xué)院 計算機(jī)課程7.1.2 用JDBC連接數(shù)據(jù)庫1. 建立數(shù)據(jù)源加載Java應(yīng)用程序所用的數(shù)據(jù)庫的驅(qū)動程序。以JDBC-ODBC橋?yàn)槔嚎刂泼姘骞芾砉ぞ邤?shù)據(jù)源(ODBC)系統(tǒng)DSN添加選擇數(shù)據(jù)庫: SQL server(或MS Access Driver) 給出數(shù)據(jù)源名和服務(wù)器名選擇
18、SQL驗(yàn)證方式、輸入用戶名選擇需要連接的數(shù)據(jù)庫確定。和例: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);String url=”jdbc:odbc:student”; 淮海工學(xué)院 計算機(jī)課程2.建立連接DriverManager類用來處理驅(qū)動程序的調(diào)入,并且對新的數(shù)據(jù)庫連接提供支持.與數(shù)據(jù)庫建立連接的標(biāo)準(zhǔn)方法是調(diào)用方法創(chuàng)建對象:Connection con= DriverManager.getConnection ( Stringurl, String user, String password);訪問數(shù)據(jù)源的用戶名訪問數(shù)據(jù)源的數(shù)據(jù)源的位置淮海工
19、學(xué)院 計算機(jī)課程3.執(zhí)行SQL語句JDBC提供了Statement接口來發(fā)送SQL語句,Statement接口的對象由createStatement方法創(chuàng)建;SQL語句發(fā)送后返回的結(jié)果通常存放在一個ResultSet接口的對象中;ResultSet可以看作一個表,這個表包含由SQL返回的列名和相應(yīng)的值, ResultSet對象中維持了一個指向當(dāng)前行的指針,通過一系列g(shù)etxxx方法檢索當(dāng)前行的各個列,從而顯示出來。 淮海工學(xué)院 計算機(jī)課程4.關(guān)閉連接statement.close();connection.close(); 淮海工學(xué)院 計算機(jī)課程7.1.3 JDBC編程在Java中用JDBC編
20、程主要是對JDBC API的應(yīng)用, 在JDBC API中對數(shù)據(jù)庫的應(yīng)用主要是對DriverManager類、 Connection、 Statement 、PreparedStatement和 ResultSet這幾個接口的應(yīng)用。 DriverManager類是JDBC的管理層,跟蹤可用的驅(qū)動程序,并在數(shù)據(jù) 庫和應(yīng)用程序之間建立連接。通過調(diào)用Class.forName()方法可顯示地加載驅(qū)動程序,然后自動在DriverManager類中注冊。 淮海工學(xué)院 計算機(jī)課程例:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);String url=jdbc:odb
21、c:CardAccess;Connectionconn =DriverManager.getConnection(url,”uid”,”pwd”); 淮海工學(xué)院 計算機(jī)課程 Statement接口Statement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。Statement接口提供了三種執(zhí)行SQL語句的方法: executeQuery(String )用于執(zhí)行select語句executeUpdate(String)用于執(zhí)行insert 、update、 delete語句及數(shù)據(jù)定義語句(如create table)execute()用于執(zhí)行返回多個結(jié)果集、多個更新等復(fù)雜功能。例: Statement
22、stm= conn. createStatement() ;ResultSetrs=stm.executeQuery(“select * from xs”); 淮海工學(xué)院 計算機(jī)課程PreparedStatement接口PreparedStatement 代表一個預(yù)編譯的SQL語句,是從Statement接口繼承而來的,與Statement不同之處: (1) PreparedStatement實(shí)例包含已編譯好的SQL語句, 執(zhí)行速度比Statement快,需要多次執(zhí)行的SQL語句經(jīng)常創(chuàng)建為PreparedStatement對象;(2) 包含在PreparedStatement中的SQL語句中可
23、以具有一個或者多個IN參數(shù),SQL語句中的參數(shù)先用作占位符.?號一般Statement用于SELECT語句,PreparedStatement用于UPDATE語句,ResultSet用于SELECT的結(jié)果集。 淮海工學(xué)院 計算機(jī)課程 ResultSet接口ResultSet包含符合SQL語句中條件的所有行,并通過一套get方法訪問當(dāng)前行中的不同列。ResultSet.next()方法用于移動到記錄集中的下一行,并使下一行成為當(dāng)前行。列是從左到右編號的,從列1開始。用getXXX方法輸入列名時不區(qū)分大小寫。例:ResultSetrs=stm.executeQuery(“selectxh,xm,n
24、l from tb”);String no= rs.getString(“xh”); String name= rs.getString(“xm”); int age= rs.getInt(3); 淮海工學(xué)院 計算機(jī)課程淮海工學(xué)院 計算機(jī)課程用JDBC-ODBCimport java.sql.*; public class TestJDBCpublic static void main(String args)Statement stm; ResultSet rs; Connection conn;PreparedStatement sql2,sql3;String url = jdbc:od
25、bc:CardAccess; String user= ;String password= ;try/ 使用jdbc與odbc橋創(chuàng)建數(shù)據(jù)庫連接Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/ 使用getConnection()方法建立連接,第2個參數(shù)定義用戶名, 第3個參數(shù)定義conn = DriverManager.getConnection(url,user,password); stm=conn.createStatement();連接數(shù)據(jù)庫示例淮海工學(xué)院 計算機(jī)課程sql2= conn.prepareStatement(“update STUD
26、ENT setwhere 姓名=Jane);性別=男sql3= conn.prepareStatement(“insert into STUDENT(學(xué)號,姓名,性別) values(1006,Alice,男);sql2.executeUpdate();/sql3.executeUpdate();/執(zhí)行更新/執(zhí)行插入String sql1=select * from STUDENT;rs=stm.executeQuery(sql1);庫原始記錄System.out.print(學(xué)號/得到查詢結(jié)果并打印數(shù)據(jù));System.out.print(姓名);System.out.println(性別)
27、;while(rs.next() System.out.print(rs.getLong(1)+ |); System.out.print(rs.getString(2)+ |);System.out.println(rs.getString(3); 淮海工學(xué)院 計算機(jī)課程rs.close();stm.close();conn.close();catch(SQLException sqle)System.out.println(1+sqle.toString();catch(Exception e)System.out.println(2+e.toString();7.2 輸入輸出流和文件處理
28、流的概念7.2. 1 流是指在計算機(jī)的輸入與輸出之間運(yùn)動的數(shù)據(jù)的 序列。輸入流代表從外設(shè)流入計算機(jī)的數(shù)據(jù)序列, 輸出流代表從計算機(jī)流向外設(shè)的數(shù)據(jù)序列。 流的最大特點(diǎn)是:數(shù)據(jù)的獲取和發(fā)送均按數(shù)據(jù)序 列順序進(jìn)行。 Java中的流分為兩種(被抽象為四個類): 字節(jié)流: InputStream類和OutputStream類字符流: Reader類和Writer類字符流比字節(jié)流更有效。 淮海工學(xué)院 計算機(jī)課程1. 字節(jié)流從抽象類InputStream和OutputStream派生出來的一系列類,這類流以字節(jié)(byte)為基本處理單位。字節(jié)流類功能FileOutputStream寫入文件的輸出流FileI
29、nputStream從文件讀入的輸入流DataOutputStream包含了寫Java標(biāo)準(zhǔn)數(shù)據(jù)類型的輸出流DataInputStream包含了讀取Java標(biāo)準(zhǔn)數(shù)據(jù)類型的輸入流BufferOutputStream緩沖輸出流ByteArrayInputStream從字節(jié)數(shù)組讀取的輸入流ByteArrayOutputStream寫入字節(jié)數(shù)組的輸出流PrintStream包含最常見的Print()和Println()的輸出流淮海工學(xué)院 計算機(jī)課程基本輸入流類InputStream的常用方法 從流中讀取數(shù)據(jù):int read( );/讀取一個字節(jié),返回值為所讀的字節(jié)int read( byte b );
30、讀取多個字節(jié),放置到字節(jié)數(shù)組b中,通常讀取的字節(jié) 數(shù)量為b的長度,返回值為實(shí)際讀取的字節(jié)的數(shù)量int read( byte b , int off, int len );讀取len個字節(jié),放置到以下標(biāo)off開始字節(jié)數(shù)組b中, 返回值為實(shí)際讀取的字節(jié)的數(shù)量int available( );/返回值為流中尚未讀取的字節(jié)的數(shù)量long skip( long n ); /讀指針跳過n個字節(jié)不讀,返回值為實(shí)際跳過的字節(jié)數(shù)量 關(guān)閉流: close( );/流操作完畢后必須關(guān)閉 淮海工學(xué)院 計算機(jī)課程基本輸出流類OutputStream 的常用方法 輸出數(shù)據(jù):void write( int b );/往流中
31、寫一個字節(jié)bvoid write( byte b ); /往流中寫一個字節(jié)數(shù)組bvoid write( byte b , int off, int len );把字節(jié)數(shù)組b中從下標(biāo)off開始、長度為len的字節(jié)寫入流中 flush( )/刷空輸出流,并輸出所有被緩存的字節(jié)由于某些流支持緩存功能,該方法將把緩存中所有內(nèi)容強(qiáng)制輸出到流中。 關(guān)閉流:close( );/流操作完畢后必須關(guān)閉 淮海工學(xué)院 計算機(jī)課程淮工學(xué)院 計算機(jī)課程常用字符流子類和功能InputStreamReader將字節(jié)轉(zhuǎn)換為字符的輸入流OutputStreamWriter將字節(jié)轉(zhuǎn)換為字符的輸出流FileReader從文件讀入的
32、輸入流FileWriter寫入文件的輸出流CharArrayReader從字符數(shù)組讀取的輸入流CharArrayWriter寫入字符數(shù)組的輸出流StringReader從字符數(shù)串讀取的輸入流StringWriter海寫入字符串的輸出流從抽象類Reader和Writer派生出的一系列子類,這類流以16位的Unicode碼表示的字符(一個字符由兩個字節(jié)組成)為基本處理單位。 2字符流7.2.2基本流1.鍵盤輸入和格式化輸出Java有3個內(nèi)置的標(biāo)準(zhǔn)流對象:1) 標(biāo)準(zhǔn)輸入流System.in:2) 標(biāo)準(zhǔn)輸出流System.out: 3)標(biāo)準(zhǔn)輸出流System.err:(1)鍵盤輸入:用來讀取用戶從鍵盤
33、的輸入用來在屏幕上顯示信息用來顯示出錯信息使用System.in對象的read()方法例: char c=(char)System.in.read( );使用InputStreamReader 、BufferReader流類例: InputStreamReader isr=new InputStreamReader(System.in);BufferReader br=new BufferReader(isr); 淮海工學(xué)院 計算機(jī)課程 通過Java的控制臺類Console類Console類不是Java的標(biāo)準(zhǔn)類庫,它屬于corejava包。 使用Console類時需要加:Import core
34、java.ConsoleConsole類主要方法:1)readInt(Stringprompt) 提示輸入一個整數(shù)2)readDouble(String點(diǎn)數(shù)prompt) 提示輸入一個浮3)readLine(Stringprompt) 提示輸入一個字符串,直到行結(jié)束。例:String s=Console.readLine(“請輸入你的名字”);System.out.println(“你好,”+s); 淮海工學(xué)院 計算機(jī)課程(2)格式化輸出 用Java的標(biāo)準(zhǔn)輸出System.out,可以輸出不同類型的對象:例 :Int a=20; System.out .print(a)System.out .
35、println(“大家好”)/加換行用java.text包中的NumberFormat類可以控制顯示格式,有三種方法:NumberFormat.getNumberInstance( ) /附加逗號NumberFormat.getCurrencyInstance( ) /貨幣符號NumberFormat.getPercentInstance( ) /百分號 淮海工學(xué)院 計算機(jī)課程例:import java.io.*;import java.text.*; Public class TestOutputPublic static void main(String args ) double x=2
36、345.123;String s1,s2,s3;NumberFormat n1=NumberFormat.getNumberInstance( ); NumberFormat c1=NumberFormat. getCurrencyInstance( ); NumberFormat p1=NumberFormat. getPercentInstance( ) ;s1=n1.format(x); s2=c1.format(x); s3=p1.format(x);System.out.println(s1+”+ s2+”+ s3); 結(jié)果: 2,345.123¥ 2,345.12234,512%
37、淮海工學(xué)院 計算機(jī)課程格式串范例值說明1,234.50,#0.00小數(shù)點(diǎn)后兩位,顯示尾數(shù)零$,#0.00($,#0.00)($1,234.50)用園括號包圍負(fù)數(shù)代替使用一個負(fù)號,要先加$符號0.#1234.5如果數(shù)在-1 和1之間,打印前導(dǎo)0,不顯示尾數(shù)0淮海工學(xué)院 計算機(jī)課程 用戶自定義輸出格式 用DecimalFormat類和Format類DecimalFormat類適合貨幣之類的格式化Format類(在附帶的corejava包中,要把它加到classpath中)適合科技方面格式化,和C語言的printf函數(shù)功能類似。DecimalFormat類的范例格式串Format的范例格式首先加:
38、import corejava.Format; f固定格式的浮點(diǎn)數(shù)Format.printf(“x的值是%10.2fn”, x); d,i 以十進(jìn)制表示的整數(shù)s字符串c字符g,G以一般格式表示浮點(diǎn)數(shù),對小數(shù)用定點(diǎn)格式, 對大數(shù)用指數(shù)格式x,X以十六進(jìn)制表示的整數(shù)o以八進(jìn)制表示例:Format.printf(“你的工資是%10.2fn”, pay); 淮海工學(xué)院 計算機(jī)課程7.2.3 文件類1. Java程序的文件與目錄管理Java.io包中的File類專門用來管理磁盤文件和目 錄。每個File類的對象表示一個磁盤文件或目錄, 對象屬性中包含名稱、長度、所含文件個數(shù)等信息。(1)創(chuàng)建File類對
39、象的三種方法:File(Stringpath); 指明磁盤文件或目錄名及其路徑注意:目錄分隔符用System.dirSep表示如:File f1=new File(“c:”+ System.dirSep+”sj”)File(Stringpath, Stringname);淮海工學(xué)院 計算機(jī)課程文件或目錄名文件或目錄的路徑已經(jīng)存在的磁盤目 File(Filedir, String錄name);(2)獲取文件或目錄屬性淮海工學(xué)院 計算機(jī)課程boolean exists( )若文件或目錄存在則返回trueboolean isFile( )若對象代表有效文件則返回trueboolean isDirec
40、tory( )若對象代表有效目錄則返回trueStringgetName( )返回文件名或目錄名StringgetPath( )返回文件或目錄的路徑longlength( )返回文件的字節(jié)數(shù)boolean canRead( )若文件為可讀文件則返回trueboolean canWrite( )若文件為可寫文件則返回trueboolean equals(File f )若兩個文件對象相同則返回trueString list( )將目錄中所有文件名存在數(shù)組中返回(3)文件或目錄的操作注意:由于Java Applet程序是從網(wǎng)絡(luò)上下載到本地機(jī)器運(yùn)行的,不可知也不可控,所以Java的安全機(jī)制禁止Jav
41、a Applet程序訪問和存取本地文件,如果試圖在Java Applet程序中使用文件操作,則將引發(fā)Java的安全性異常。文件操作例子 淮海工學(xué)院 計算機(jī)課程Boolean renameTo(File newFile)將文件重命名Void delete( )將當(dāng)前文件刪除Boolean mkdir( )創(chuàng)建當(dāng)前目錄的子目錄2. 寫文本文件方法一:用FileOutputStream打開文件my.txt,然后 用PrintStream 對象p的println方法把字符串寫入文件中。例:FileOutputStreamfout=new FileOutputStream(“my.txt”)PrintS
42、tream p=new PrintStream(fout); p.println(“要寫入文本文件中的內(nèi)容”); p.close();寫文本例子1 淮海工學(xué)院 計算機(jī)課程方法二:用FileWriter打開文件myf.txt,又創(chuàng)建了文本輸出流out,然后用out 的print(或者println)方法把字符串寫入文件中。例:FileWriterfw= new FileWriter(“myf.txt”);PrintWriter out=newPrintWriter(fw);out.print(“要寫入文本文件中的內(nèi)容”);out.close();fw.close();/關(guān)于輸出/關(guān)閉文件寫文本例
43、子2 淮海工學(xué)院 計算機(jī)課程3. 讀文本文件方法一:用FileInputStream打開文件my.txt,然后建立DataInputStream的 對象in(文件流),使用in的readLine()方法以一行為單位讀出my.txt文件中的所有字符串。例:FileInputStreamfs=new FileInputStream(“my.txt”)DataInputStream in=newwhile(in.available( )!=0)DataInputStream(fs);System.out.println( in.readLine() );in.close(); /關(guān)閉輸入流讀文本例子
44、1 淮海工學(xué)院 計算機(jī)課程方法二:用FileReader打開文件myf.txt,然后用BufferedReader類的對象br作為文件流,用br 的readline()讀取文件中的字符串。例:FileReader fr= new FileReader (“myf.txt”); BufferedReader br=new BufferedReader(fr); String record=new String( );Int recCount=0;While (record=br.readLine()!=null) recCount+; System.out.println(recCount+”:
45、”+ record);br.close();/關(guān)于緩存fr.close();/關(guān)閉文件讀文本例子2 淮海工學(xué)院 計算機(jī)課程4. 程序?qū)ξ募碾S機(jī)訪問用RandomAccessFile類可以實(shí)現(xiàn)對文件的隨機(jī)讀寫操作,即可以在文件的任意位置執(zhí)行數(shù)據(jù)讀寫; 創(chuàng)建RandomAccessFile的對象例:File mf= new File (“myf.txt”);RandomAccessFile myRAF=new RandomAccessFile (mf,”rw”);訪問模式:rw: 可讀、可寫r: 只讀作為數(shù)據(jù)源的文件淮海工學(xué)院 計算機(jī)課程 對文件位置指針的操作利用getPointer( )方法可
46、以獲得當(dāng)前文件位置指針從文件頭算起的絕對位置:public long getPointer( );利用seek( )方法可以將指針移動到pos指定的文件位置:public void seek( long pos );從文件頭算起的絕對位置利用length( )方法可以返回文件的字節(jié)長度:public long length( ); 淮海工學(xué)院 計算機(jī)課程 對文件進(jìn)行讀寫操作文件訪問例子RandomAccessFile類實(shí)現(xiàn)了DataInput和DataOutput接口,在讀/寫時具備強(qiáng)大的含類型轉(zhuǎn)換的輸入/輸出功能;RandomAccessFile類的所有方法都有可能拋出IOException
47、異常,在利用它實(shí)現(xiàn)文件操作時需要將相關(guān)語句放在try塊中,并配上catch塊來處 理異常。 淮海工學(xué)院 計算機(jī)課程7.3 Java的多線程機(jī)制Java中的線程7.3.11.程序、進(jìn)程與線程的區(qū)別?;春9W(xué)院 計算機(jī)課程線程是比進(jìn)程更小的執(zhí)行單位,一個進(jìn)程在執(zhí)行過程中可以 產(chǎn)生多個線程,每個線程有自己的產(chǎn)生、存在、消亡的過程。 線程間可以共享相同的內(nèi)存單元,實(shí)現(xiàn)數(shù)據(jù)交換、實(shí)時通信和同步操作。進(jìn)程是程序的一次動態(tài)執(zhí)行過程(放電影),對應(yīng)著代碼加載、 執(zhí)行到執(zhí)行完畢的全過程。每一個進(jìn)程都有自己獨(dú)立的一塊內(nèi) 存空間、一組系統(tǒng)資源。在進(jìn)程概念中,每一個進(jìn)程的內(nèi)部數(shù) 據(jù)和狀態(tài)都是完全獨(dú)立的。程序是一段靜態(tài)
48、的代碼,是應(yīng)用軟件執(zhí)行的藍(lán)本(電影膠片) Java的多線程Java內(nèi)在支持多線程,它的所有類都是在多線程下 定義的,Java利用多線程可以開發(fā)能同時處理多個 任務(wù)的功能強(qiáng)大的應(yīng)用程序。Java程序通過流控制來執(zhí)行程序流,程序中單個順 序的流控制稱為線程,多線程則指的是在單個程序 中可以同時運(yùn)行多個不同的線程,執(zhí)行不同的任務(wù)。多線程意味著一個程序的多行語句可以看上去幾乎在同一時間內(nèi)同時運(yùn)行。 淮海工學(xué)院 計算機(jī)課程使用多線程的好處:使UI交互的響應(yīng)更塊充分利用多處理器系統(tǒng)簡化建模執(zhí)行異步和處理 淮海工學(xué)院 計算機(jī)課程Java中的線程由三部分組成:1. 虛擬的CPU,封裝在java.lang.Th
49、read類中2. CPU所執(zhí)行的代碼,傳遞給Thread類3. CPU所處理的數(shù)據(jù),傳遞給Thread類應(yīng)用程序1操作系統(tǒng)線程1Java虛擬機(jī)線程3Java中的線程多任務(wù)示意圖 淮海工學(xué)院 計算機(jī)課程共享內(nèi)存局部變量局部變量局部變量線程2應(yīng)用程序22. 線程的狀態(tài)與生命周期新建其他阻塞sleep()時間到start()sleep()或join()run()方法結(jié)束運(yùn)行yield()可運(yùn)行終止scheduler()synchronizedwait()獲得鎖Interrupt()等待阻塞notify()notifyAll()對象鎖阻塞 淮海工學(xué)院 計算機(jī)課程(1)創(chuàng)建狀態(tài)(new Thread)執(zhí)行下列語句時,線程就處于創(chuàng)建狀態(tài):Thread myThread = new MyThreadClass( ); 當(dāng)一個線程處于創(chuàng)建狀態(tài)時,它僅僅是一個空的 線程對象,系統(tǒng)不為它分配資源。 淮海工學(xué)院 計算機(jī)課程(2) 可運(yùn)行狀態(tài)( Runnable )Thread myThread = new MyThreadClass( ); myThread.start( );當(dāng)一個線程處于可運(yùn)行狀態(tài)時,系統(tǒng)為這個線程分配了它需的系統(tǒng)資源,這樣該線程處于運(yùn)行就緒狀 態(tài),系統(tǒng)中可以同時有多個線程處于Runnable 狀態(tài)。(3) 運(yùn)行狀態(tài)(Running)是線程占有CPU并實(shí)際運(yùn)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度硬面堆、藥芯焊線戰(zhàn)略市場規(guī)劃報告
- 年度鐘表與計時儀器競爭策略分析報告
- 二零二五年度特種吊車租賃與運(yùn)輸服務(wù)合同3篇
- 二零二五版高管勞動合同樣本:股權(quán)激勵與競業(yè)禁止條款3篇
- 二零二五年空調(diào)銷售與節(jié)能產(chǎn)品認(rèn)證合同3篇
- 2025年度城市綠地養(yǎng)護(hù)及植物配置優(yōu)化合同4篇
- 2025年度私人診所與患者之間的遠(yuǎn)程醫(yī)療服務(wù)合同
- 2024版簡易協(xié)議管理軟件解決方案一
- 二零二五年度新能源材料采購代理協(xié)議3篇
- 二零二四年太陽能光伏發(fā)電項(xiàng)目合同
- 《向心力》參考課件4
- 2024至2030年中國膨潤土行業(yè)投資戰(zhàn)略分析及發(fā)展前景研究報告
- 【地理】地圖的選擇和應(yīng)用(分層練) 2024-2025學(xué)年七年級地理上冊同步備課系列(人教版)
- 2024年深圳中考數(shù)學(xué)真題及答案
- 土方轉(zhuǎn)運(yùn)合同協(xié)議書
- Module 3 Unit 1 Point to the door(教學(xué)設(shè)計)-2024-2025學(xué)年外研版(三起)英語三年級上冊
- 智能交通信號燈安裝合同樣本
- 安全生產(chǎn)法律法規(guī)清單(2024年5月版)
- 江蘇省連云港市2023-2024學(xué)年八年級下學(xué)期期末道德與法治試卷(含答案解析)
- 2024年大學(xué)試題(宗教學(xué))-佛教文化筆試考試歷年高頻考點(diǎn)試題摘選含答案
- JBT 14588-2023 激光加工鏡頭 (正式版)
評論
0/150
提交評論