B08输入输出及数据库操作ppt课件(全)_第1页
B08输入输出及数据库操作ppt课件(全)_第2页
B08输入输出及数据库操作ppt课件(全)_第3页
B08输入输出及数据库操作ppt课件(全)_第4页
B08输入输出及数据库操作ppt课件(全)_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第8章 输入输出及数据库操作8.1 输入和输出8.2 数据库操作8.1 输入和输出8.1.1 流的含义8.1.2 流的层次结构8.1.3 标准输入输出8.1.4 File类8.1.5 FileInputStream类和FileOutputStream类8.1.6 DataInputStream类和DataOutputStream类8.1.7 随机访问文件8.1.8 Reader类和Writer类8.1.9 IOException类的几个子类8.1.1 流的含义流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要

2、写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图7-1:图7-1 流8.1.1 流的含义数据流是指一组有顺序的、有起点的和终点的字节集合Java将读取数据的对象称为输入流;能向其写入数据的对象称为输出流。字节流,被称作输入流(Input stream)或输出流(Output stream),基于数据的I/O是二进制(比如说表示图像的位图)字符流,被称作Reader或Writer,基于文本的I/O都是一些人们能够阅读的字符(比如说程序的源代码,字符流8.1.1 流的含义InputStream,OutputStream,Reader,Writer是

3、四个抽象类。Java中其他多种多样变化的流均是由它们派生出来的。在这四个抽象类中,InputStream和Reader定义了完全相同的接口:int read()int read(char cbuf)int read(char cbuf, int offset, int length)而OutputStream和Writer也是如此:int write(int c)int write(char cbuf)int write(char cbuf, int offset, int length)8.1.2 流的层次结构InputStream和OutputStream流层次结构如图7-2和图7-3所示

4、Reader和Writer流层次结构如图7-4和图7-5所示图7-2 InputStream输入流层次结构StringBufferInputStream字符串缓冲区输入流ByteArrayInputStream字节数组输入流FileInputStream文件输入流FilterInputStream过滤器输入流PipedInputStream管道输入流SequenceInputStream顺序输入流ObjectInputStream对象输入流BufferInputStream带缓冲区输入流PushbackInputStream回退输入流LineNumberInputStream行号输入流Data

5、InputStream数据输入流InputStream输入流图7-3 OutputStream输出流层次结构ByteArrayOutputStream字节数组输出流FileOutputStream文件输出流FilterOutputStream过滤器输出流PipedOutputStream管道输出流ObjectOutputStream对象输出流BufferOutputStream带缓冲区输出流PrintStream回退输出流DataOutputStream数据输出流OutputStream输出流图7-4 Reader流层次结构BufferReaderReaderCharArrayReaderIn

6、putStreamReaderFilterReaderPipedReaderStringReaderLineNumberReaderFileReaderPushbackrReader图7-5 Writer流层次结构Buffer WriterWriterCharArray WriterOutputStream WriterFilter WriterPiped WriterString WriterFileWriter8.1.3 标准输入输出标准输入输出都是System类中定义的类成员变量,包括:System.in:代表标准输入流,默认状态对应于键盘输入。System.out:代表标准输出流,默认

7、状态对应于屏幕输出。System.err:代表标准错误输出流,默认状态对应于屏幕输出。【实例8-1】import java.io.*;class stdIOExample1 public static void main(String args) throws IOException int ch; int count = 0; (请输入字符(当输入0时退出!)); while (char)(ch = () != 0) /输入字符 count+; System.out.print(char)ch); /输出字符 (); System.err.println(counted + count +

8、total bytes.); 说明:在本实例中,利用()不断从键盘输入字符,并在显示屏输出,count用于累计输入字符个数,当输入字符为0时,输入终止。8.1.4 File类含义:File类与InputStream / OutputStream类同属于一个包,它不允许访问文件内容。File类主要用于命名文件、查询文件属性和处理文件目录。1File类的构造方法public File(String name):指定与File对象关联的文件或目录的名称,name可以包含路径信息及文件或目录名。例如:File myFile;MyFile= new File(“D:WUabc.txt”)8.1.4 Fi

9、le类1File类的构造方法public File(String pathName,String name):使用参数pathName(绝对路径或相对路径)来定位参数name所指定的文件或目录。例如:File myFile;MyFile= new File(“D:WU”,“abc.txt”);8.1.4 File类1File类的构造方法public File(File directory,String name):使用现有的File对象directory(绝对路径或相对路径)来定位参数name所指定的文件或目录。例如:File myDir=new File(“D:WU”);MyFile= ne

10、w File(myDir,“abc.txt”);public File(URI rui):使用给定的同一资源定位符来定位文件。8.1.4 File类2File类常见方法String getName();得到一个文件的名称(不包括路径)String getPath();得到一个文件的路径名String getAbsolutePath();得到一个文件的绝对路径名String getParent();得到一个文件的上一级目录名String renameTo(FilenewName);将当前文件名更名为给定文件的完整路径booleanexists();测试当前File对象所指示的文件是否存在bool

11、eancanWrite();测试当前文件是否可写booleancanRead();测试当前文件是否可读8.1.4 File类2File类常见方法boolean isFile();测试当前文件是否是文件(不是目录)boolean isDirectory();测试当前文件是否是目录longlastModified();得到文件最近一次修改的时间longlength();得到文件的长度,以字节为单位booleandelete();删除当前文件booleanmkdir();根据当前对象生成一个由该对象指定的路径Stringlist();列出当前目录下的文件【实例8-3】import java.io.*

12、; public class fileTest void listAttributes(String fileName)File f=new File(fileName);if( f.exists( ) ) System.out.println(Attributes of +fileName); System.out.println(Exist: +f.exists(); System.out.println(Can read: +f.canRead(); System.out.println(Can write: +f.canWrite(); System.out.println(Is fi

13、le: +f.isFile(); System.out.println(Is director: +f.isDirectory(); System.out.println(Is absolute path: +f.isAbsolute();else System.out.println(fileName+ does not exist!); 【实例8-3】public static void main(String args )if(args.length!=1)System.out.println(Usage: java fileTest );System.exit(1); fileTest

14、 obj=new fileTest ( );obj.listAttributes(args0);编译完毕后,按照如下方式运行:g:java01java fileTest fileTest.java则得到如下结果:Attributes of fileTest.javaExist: trueCan read: trueCan write: trueIs file: trueIs director: falseIs absolute path: false FileInputStream类和FileOutputStream类1FileInputStream类FileInputStream典型地表示一

15、种顺序访问的文本文件,可以访问文件的一个字节、几个字节或整个文件。基本步骤:步骤一:利用FileInputStream打开文件。FileInputStream myFileStream;myFileStream= new FileInputStream(“D:WU”,“abc.txt”)或者File myFile;FileInputStream myFileStream;myFile= new File(“D:WUabc.txt”)myFileStream= new FileInputStream(myFile)8.1.5 FileInputStream类和FileOutputStream类1

16、FileInputStream类步骤二:使用方法read()读取信息。int read() int read(byte input) int read(byte input,int offset,int length)步骤三:读取完毕后要关闭FileInputStream对象。myFileStream.close()8.1.5 FileInputStream类和FileOutputStream类1FileInputStream类FileInputStream类常用方法:public abstract int read( ) public int read(byte b ) public int

17、 read(byte b , int off, int len) 。public int available( ) public long skip(long n) public int close( )【实例8-4】import java.io.*;public class FileInputStreamExamplepublic static void main(String args) throws IOExceptionString fname=FileInputStreamExample.java;tryFileInputStream rf = new FileInputStream

18、(fname);int n=16;byte buffer = new byten;while (rf.read(buffer,0,n)!=-1) & (n0) /读取输入流System.out.print(new String(buffer);【实例8-4】();rf.close(); /关闭输入流catch (IOException ioe)System.out.println(ioe);catch (Exception e)System.out.println(e);8.1.5 FileInputStream类和FileOutputStream类2FileOutputStream类File

19、OutputStream类用来处理以文件作为数据输出目的数据流基本步骤包括:步骤一:利用FileOutputStream打开文件。FileOutputStream myFileStream;myFileStream= new FileOutputStream(“D:WU”,“abc.txt”)或者File myFile;FileOutputStream myFileStream;myFile= new File(“D:WUabc.txt”)myFileStream= new FileOutputStream(myFile)8.1.5 FileInputStream类和FileOutputStr

20、eam类2FileOutputStream类步骤二:使用方法write ()写信息。public void write(byte b ):public void write(byte b , int off, int len) public abstract void write(int b) 步骤三:读取完毕后要关闭FileOutputStream对象。myFileStream.close()8.1.5 FileInputStream类和FileOutputStream类FileOutputStream类常用方法:public void write(byte b )public void w

21、rite(byte b , int off, int len) public abstract void write(int b) public void flush( ) public void close( )【实例8-5】import java.io.*;public class FileOutputStreamExamplepublic static void main(String args)try(输入一行字符: );int count,n=512;byte buffer = new byten;FileOutputStream wf = new FileOutputStream(

22、Output.txt);count = System.in.read(buffer);wf.write(buffer,0,count); /写入输出流wf.close(); /关闭输出流(输入行字符已保存到Output.txt!);【实例8-5】catch (IOException ioe)System.out.println(ioe);catch (Exception e)System.out.println(e);8.1.6 DataInputStream类和DataOutputStream类1DataInputStreamDataInputStream与FileInputStream差不

23、多,可以直接读取任意一种变量类型。一般来说,对二进制文件使用DataInputStream流。打开和关闭DataInputStream对象时,其方法与FileInputStream相同。也可以使用read()方法读取文件内容,同时还可以使用其它方法来访问不同类型的数据。8.1.6 DataInputStream类和DataOutputStream类1DataInputStream打开DataInputStream流DataInputStream myFileStream;myFileStream= new DataInputStream (“D:WU”,“abc.txt”)读取DataInpu

24、tStream流myFileStream.read()关闭DataInputStream流myFileStream.close()8.1.6 DataInputStream类和DataOutputStream类主要方法byte readByte()读取byte型数据int readUnsignedByte()读取unsignedbyte型数据short readShort()读取short型数据int readUnsignedShort()读取unsignedshort型数据char readChar()读取char型数据int readInt()读取int型数据long readLong()

25、读取long型数据float readFloat()读取float型数据double readDouble()读取double型数据String readLine()读取line型数据8.1.6 DataInputStream类和DataOutputStream类2DataOutputStream类DataOutputStream与FileOutputStream差不多,可以直接写任意一种变量类型。一般来说,对二进制文件使用DataOutputStream流。打开和关闭DataOutputStream对象时,其方法与FileOutputStream相同。也可以使用write()方法写文件内容,

26、同时还可以使用其它方法来访问不同类型的数据。8.1.6 DataInputStream类和DataOutputStream类1DataInputStream打开DataOutputStream流DataOutputStream myFileStream;myFileStream= new DataOutputStream (“D:WU”,“abc.txt”)读取DataOutputStream流myFileStream.write()关闭DataInputStream流myFileStream.close()8.1.6 DataInputStream类和DataOutputStream类主要方

27、法void writeByte()写入byte型数据void writeBoolean()写入boolean型数据void writeShort()写入short型数据void writeChar()写入char型数据void writeInt()写入int型数据void writeLong()写入long型数据void writeFloat()写入float型数据void writeDouble()写入double型数据void writeBytes()写入bytes型数据void writeChars()写入chars型数据8.1.7 随机访问文件对于很多场合,例如银行系统、实时销售系统,

28、要求能够迅速、直接地访问文件中的特定信息,而无需查找其他的记录。这种类型的即时访问可能要用到随机存取文件和数据库。随机文件的应用程序必须指定文件的格式。最简单的是要求文件中的所有记录均保持相同的固定长度。利用固定长度的记录,程序可以容易地计算出任何一条记录相对于文件头的确切位置。8.1.7 随机访问文件Java.io包提供了RandomAccessFile类用于随机文件的创建和访问,实现了DataOutput和DataInput接口,可用来读写各种数据类型。RandomAccessFile类有个位置指示器,对文件指针显式操作的方法有:int skipBytes(int n):把文件指针向前移动

29、指定的n个字节void seek(long):移动文件指针到指定的位置。long getFilePointer():得到当前的文件指针。8.1.7 随机访问文件1构造函数:public RandomAccessFile(String name, String mode )public RandomAccessFile( File file, String mode )mode 的取值 “r” 只读 “rw” 读写 “rws” 同步读写 “rwd” 数据同步读写8.1.7 随机访问文件2主要方法public RandomAccessFile(File f, String mode) public

30、 void setLength(long newLength)public long length() public void seek(long pos) public int skipBytes(int n) public int read() public final double readDouble()public final void writeChar(int v) public final void writeInt(int v) public long getFilePointer()8.1.7 随机访问文件3应用过程创建和打开随机文件访问方式(1)用文件名:myRAFile

31、=new RandomAccessFile(String name,String mode)(2)用文件对象:myRAFile=new RandomAccessFile(File file,String mode)随机访问读写利用read()或write()方法进行随机读写【实例8-6】import java.io.*;public class rafExampleRandomAccessFile fp;public static void main(String args) throws IOException rafExample a=new rafExample(); int MaxVa

32、lue=100;a.createprime(MaxValue);【实例8-6】public void createprime(int max) throws IOExceptionfp=new RandomAccessFile(primes.bin,rw);/创建文件对象fp.seek(0); /文件指针为0fp.writeInt(2); /写入整型int k=3;while (k=max)if (isPrime(k)fp.writeInt(k);k = k+2; ShowPrimes(max);fp.close(); /关闭文件【实例8-6】public boolean isPrime(in

33、t k) int i=0;boolean yes = false;for (i=2;ik/2) yes=true;return yes;【实例8-6】public void ShowPrimes(int max) throws IOExceptiontryfp.seek(0); System.out.println(2.+max+中有 +(fp.length()/4)+ 个素数:);for (int i=0;i(int)(fp.length()/4);i+)fp.seek(i*4); System.out.print(fp.readInt()+ );if (i+1)%5=0) (); catc

34、h(EOFException e) ();说明:在本实例中,对一个二进制整数文件实现访问操作,当以可读写方式“rw”打开一个文件prinmes.bin时,如果文件不存在,将创建一个新文件。先将2100内的素数依次写入文件prinmes.bin。8.1.8 Reader类和Writer类同类InputStream和OutputStream一样,Reader和Writer也是抽象类,只提供了一系列用于字符流处理的接口。它们的方法与类InputStream和OutputStream类似,只不过其中的参数换成字符或字符数组。Reader和Writer是所有读取字符流类的父类抽象类(面向Unicode字

35、符操作) Java使用Unicode码表示字符和字符串。【实例8-7】 import java.io.*;public class Echo public static void main(String args) BufferedReader in = new BufferedReader( new InputStreamReader(System.in); String s; try while(s = in.readLine().length() != 0) System.out.println(s); / An empty line terminates the program cat

36、ch(IOException e) e.printStackTrace(); 8.1.8 Reader类和Writer类Reader类的主要方法boolean ready() 输入字符流是否可读int read() 读取一个字符int read(char cbuf) 读取一串字符(到字符数组cbuf)long skip(long n) 跳过n个字符mark(int readAheadLimit) 在当前位置做一标记reset() 将读取位置恢复到标记处close() 关闭字符流8.1.8 Reader类和Writer类Writer类的主要方法void close() 关闭流void flush

37、() 强行写入void write(char cbuf) 写入字符串cbufvoid write(char cbuf, int off, int len) 写入字符数组cbuf中自位置off开始的len字符void write(int c) 写入cvoid write(String str) 写入字符串strvoid write(String str, int off, int len) 写入字符串str中自位置off开始的len字符8.1.9 IOException类的几个子类1public class EOFException :当碰到输入尾时,抛出这种类型的异常。2public clas

38、s FileNotFoundException:当文件找不到时,构造函数抛出这种类型的异常。3public class InterruptedIOException:当I/O操作被中断时,抛出这种类型的异常。4 public class UTFDataFormatException:当在读的字符串中有UTF语法格式错误时,由DataInputStream.readUTF( )方法抛出。8.2 数据库操作8.2.1 ODBC8.2.2 JDBC8.2.3 使用JDBC-ODBC技术访问数据库8.2.4 基本SQL语句8.2.1 ODBCODBC由应用程序、驱动持续管理器、驱动程序和数据源等组成,

39、如图7-6所示。应用程序通过ODBC接口访问不同数据源中的数据,每个不同的数据源类型由一个驱动程序支持。驱动程序管理器为应用程序装入合适的驱动程序。图7-6 ODBC层次结构数据源1数据源2数据源3应用程序ODBC接口Driver ManagerDriver1 Driver2 Driver28.2.2 JDBCJDBC(Java DataBase Connectivity) 是一种用于执行SQL语句的Java API。JDBC使开发人员既可以用纯Java语言编写完整的数据库应用程序。 JDBC完成三件事:(1)与一个数据库连接;(2)向数据库发送SQL语句;(3)处理数据库返回的结果。图7-7

40、显示了java程序通过JDBC访问数据库的过程。Java程序通过JDBC访问数据库的关系java应用程序JDBC驱动程序Sun JDBC/ODBC桥(本地)数据库ODBC驱动程序(本地)数据库客户机纯java解决方案混合解决方案:java本地代码图7-7 Java程序通过JDBC访问数据库的示意图8.2.2 JDBCJDBC API是一组由Java语言编写的类和接口,包含在java.sql和javax.sql两个包中。java.sql为核心包,包含于J2SE中。javax.sql包扩展了JDBC API的功能,使其从客户端发展为服务器端,成为了J2EE的一个基本组成部分。8.2.2 JDBCJ

41、DBC API可分为两个层次:面向底层的JDBC Driver API:主要是针对数据库厂商开发数据库底层驱动程序使用。面向程序员的JDBC API:应用程序通过JDBC API和底层的JDBC Driver API打交道。图7-8 应用程序、Driver和数据库之间的关系纯JDBC驱动程序数据库java应用程序JDBC驱动器管理器DBMS提供的本机java APIJDBC-ODBC桥接驱动程序ODBC和数据库驱动其他驱动程序JDBC APIJDBC Driver API8.2.2 JDBC一个基本的JDBC程序开发包含如下步骤:设置环境,引入相应的JDBC类选择合适的JDBC驱动程序并加载分

42、配一个Connection对象分配一个Statement对象用该Statement对象进行查询等操作从返回的ResultSet对象中获取相应的数据关闭Connection8.2.2 JDBC概念:DriverManager:处理驱动的调入并且对产生新的数据库连接提供支持DataSource:在JDBC 2.0 API中被推荐使用代替DriverManager实现和数据库的连接Connection:代表对特定数据库的连接Statement:代表一个特定的容器,容纳并执行一条SQL语句ResultSet:控制执行查询语句得到的结果集8.2.3 使用JDBC-ODBC技术访问数据库JDBC和数据库建

43、立连接的一种方式是首先建立起一个JDBC-ODBC桥接器访问步骤:步骤1:设置数据源步骤2:建立ODBC-JDBC桥接器步骤3:连接到数据库步骤4:向数据库发送SQL语句步骤5:处理查询结果8.2.3 使用JDBC-ODBC技术访问数据库JDBC和数据库建立连接的一种方式是首先建立起一个JDBC-ODBC桥接器访问步骤:步骤1:设置数据源步骤2:建立ODBC-JDBC桥接器步骤3:连接到数据库步骤4:向数据库发送SQL语句步骤5:处理查询结果8.2.3 使用JDBC-ODBC技术访问数据库步骤1:设置数据源开始-设置-控制面版-管理工具-ODBC附件给出了设置数据源的详细步骤。8.2.3 使用

44、JDBC-ODBC技术访问数据库步骤2:建立ODBC-JDBC桥接器String sDBDriver =;Class.forName(sDBDriver);异常处理try Class.forName(sDBDriver);catch ( e )System.err.println(shop(): + e.getMessage() );8.2.3 使用JDBC-ODBC技术访问数据库步骤3:连接到数据库String sConnStr =jdbc:odbc:mydatasource; / mydatasource为数据源名称conn = DriverManager.getConnection (s

45、ConnStr,user1,123);异常处理方式为:try Connection conn = DriverManager.getConnection (sConnStr,user1,123);catch (SQLException e) 8.2.3 使用JDBC-ODBC技术访问数据库步骤4:向数据库发送SQL语句try Statement Stmt = conn.createStatement(); catch (SQLException e) 步骤5:处理查询结果ResultSet RS = Stmt.executeQuery(SELECT * FROM table1);String

46、s=RS. getString(“name”)或String s=RS. getString(2)【实例8-8】/使用JDBCODBC桥接器访问access数据库import java.sql.*;import java.io.*;public class ShowAccessFile public static void main(String args)String tt=null;int count=0;String sDBDriver =;String sConnStr =jdbc:odbc:myaccess;Connection conn = null;Statement Stmt=null;ResultSet RS = null;try Class.forName(sDBDriver);【实例8-8】catch ( e ) System.err.println(shop(): + e.getMessage() );try conn = DriverManager.getConnection (sConnStr,);Stmt = conn.createStatement();Stmt.executeUpdate(INSERT INTO table1 VALUES(吴一,男) );Stmt.executeUpdate(INSERT INTO table1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论