Java程序设计教程(第2版) 课件 张延军 第8、9章 Java IO技术、JavaGUI编程技术_第1页
Java程序设计教程(第2版) 课件 张延军 第8、9章 Java IO技术、JavaGUI编程技术_第2页
Java程序设计教程(第2版) 课件 张延军 第8、9章 Java IO技术、JavaGUI编程技术_第3页
Java程序设计教程(第2版) 课件 张延军 第8、9章 Java IO技术、JavaGUI编程技术_第4页
Java程序设计教程(第2版) 课件 张延军 第8、9章 Java IO技术、JavaGUI编程技术_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

第8周JavaIO技术2023年11Java

I/O技术2常见IO应用一4让我们一起来编程学习提纲3常见IO应用二21.JavaI/O技术在Java中,数据的输入和输出都是以流(Stream)的方式来处理。JDK中与输入输出相关的包和类都集中存放在java.io包中,涉及12个接口、51个类、17个异常。我们用不用逐个研究学习呢?显然不用,API帮助文档相当于一本字典,我们只需迅速查找到自己要的信息即可。java.io包其中包含5个重要的抽象类:InputStream、OutputStream、Reader、Writer和File。几乎所有与I/O相关的类都继承了这5个类。利用这些类提供的方法,Java可以方便地实现复杂的文件管理和多种I/O操作。1.1JavaI/O技术简介

31.JavaI/O技术Java中的流按单位可分为字节流和字符流。按Java的命名惯例,凡是以InputStream结尾的类均为字节输入流,以OutputStream结尾的类均为字节输出流,凡是以Reader结尾的类均为字符输入流,以Writer结尾的类均为字符输出流。1.2I/O流的分类41.JavaI/O技术按流的方向可分为输入流和输出流。输入流是任何有能力产出数据的数据源,是从键盘、磁盘文件或网络等流向程序的数据流。输出流是任何有能力接收数据的接收源,是从程序流向显示器、打印机、磁盘文件、网络的数据流。注意:判断是输入流还是输出流,请以程序为参照物,否则会出现混乱。1.2I/O流的分类51.JavaI/O技术Java中最基本的流是字节流。Java通过InputStream、OutputStream类及其子类提供了字节流的读写方法。为了方便处理双字节的Unicode字符,Java通过Reader、Writer类及其子类提供了字符流的读写等操作。为了进一步提高效率,Java通过BufferedReader、BufferedWriter等类提供了带缓冲区的字符串读写。1.2I/O流的分类61.JavaI/O技术在JDK1.4以前,Java的IO操作集中在java.io这个包中,是基于字节流或字符流的阻塞(blocking)API。IO流的好处是简单易用,缺点是效率较低。然而,一些对性能要求较高的应用,尤其是服务器端应用,往往需要一个更为有效的方式来处理IO。从JDK1.4开始,JDK提供了NIO(NewI/O),这是一个基于缓冲区和块的非阻塞(NonBlocking)IO操作的API。NIO效率很高,但编程比较复杂。JavaNIO由以下几个核心部分组成:Channels、Buffers和Selectors。1.3NIO71Java

I/O技术2常见IO应用一4让我们一起来编程学习提纲3常见IO应用二82.常见I/O应用一File类可以用来获取或处理与磁盘文件和文件夹相关等信息和操作,但不提供文件内容的存取。文件内容的存取功能一般由FileInputStream、FileOutputStream、FileReader、FileWriter等类实现。File类是对文件和文件夹的一种抽象表示(引用或指针)。File类的对象可能指向一个存在的文件或文件夹,也可能指向一个不存在的文件或文件夹。2.1File类的应用92.常见I/O应用一文件或文件夹的路径分为绝对路径和相对路径。路径分隔符:Windows操作系统下为“\”,Unix/Linux操作系统下为“/”。磁盘文件的绝对定位:盘符:\\文件夹1\\文件夹2…\\文件名。本资源定位方法缺乏灵活性,不适用于网络环境编程。Eclispe项目下文件的相对定位:相对路径是相对项目文件夹开始定位,src\\包\\…\\包\\文件名;绝对路径:\\项目名称\\src\\包\\…\\文件名。采用本方法项目开发阶段没有问题,但项目发布后没有“src”文件夹就会出现“文件找不到”的错误。

2.1File类的应用102.常见I/O应用一查阅API帮助文档,掌握File类的常用构造方法和常用方法:publicFile(Stringpathname)publicbooleanexists()publicbooleanisDirectory()publiclonglastModified():返回毫秒数publiclonglength()publicStringgetName()、getParent()、getPath():2.1File类的应用112.常见I/O应用一publicFile[]listFiles()publicbooleanmkdirs()publicbooleanrenameTo(Filedest)publicbooleandelete()

2.1File类的应用122.常见I/O应用一【编程实践】1.获取指定文件的信息:是否存在、文件名、路径、文件长度、最后修改时间、是否文件夹。2.文件改名、删除3.建立文件夹:d:\hb\hd\hdc4.显示某文件夹的内容2.1File类的应用132.常见I/O应用一FileInputStream用于从本地文件系统中的一个文件中读取字节数据。FileOutputStream:用于将数据写入文件字节输出流。

2.2利用字节流完成文件的读写142.常见I/O应用一查阅API帮助文档,掌握FileInputStream、FileOutputStream类的常用构造方法和常用方法:publicFileInputStream(Filefile)throwsFileNotFoundExceptionpublicFileInputStream(Stringname)throwsFileNotFoundExceptionpublicint

read()throwsIOException:返回下一个字节的数据,如果到达文件结尾则返回-1。publicvoidwrite(intb)throwsIOException2.2利用字节流完成文件的读写152.常见I/O应用一【编程实践】用字节流的方式将OO.png复制到D:\【编程步骤】1.建立文件输入字节流对象,建立文件输出字节流对象。2.从输入流循环读取字节,写入到输出流中3.关闭输入流和输出流4.注意捕获异常处理或声明抛出的异常2.2利用字节流完成文件的读写162.常见I/O应用一我们可以以字符串、输入流、文件等作为参数来直接构建Scanner对象,然后就可以逐行逐字(根据正则表达式来分隔)来扫描整个文本,并对扫描后的结果做想要的处理。PrintStream在OutputStream基础之上提供了增强的功能,即可以方便地输出各种类型的数据的格式化表示形式。

publicstaticfinalPrintStreamout2.3利用Scanner和PrintStream完成文件的读写172.常见I/O应用一查阅API帮助文档,Scanner类中需要重点掌握常用构造方法和常用方法:publicScanner(Filesource)throwsFileNotFoundExceptionpublicbooleanhasNextLine()publicStringnextLine()PrintStream类中需要重点掌握常用构造方法和常用方法:publicPrintStream(Filefile)publicPrintStream(StringfileName)publicvoidprintln(Stringx)2.3利用Scanner和PrintStream完成文件的读写182.常见I/O应用一【编程实践】将九九乘法表输出到一个文本文件。【编程实践】1.以源文件sg.txt为参数,建立Scanner对象,以目标文件为参数建立PrintSream对象2.从输入流循环读取一行字符串,写入到输出流中。3.关闭输入流和输出流4.注意捕获异常处理或声明抛出的异常2.3利用Scanner和PrintStream完成文件的读写191Java

I/O技术2常见IO应用一4让我们一起来编程学习提纲3常见IO应用二203.常见I/O应用二DataInputStream类能够使Java应用程序以一种与机器无关的方式,直接从底层输入流读取Java的八种基本类型数据。而DataOutputStream类能够将Java八种基本类型数据写出到一个输出流,然后可以用DataInputStream输入流读取这些数据。3.1基本类型数据的读写213.常见I/O应用二查阅API帮助文档,掌握DataInputStream、DataOutputStream类的常用构造方法和常用方法:publicDataInputStream(InputStreamin)publicfinaldoublereadDouble()throwsIOExceptionpublicDataOutputStream(OutputStreamout)publicfinalvoidwriteDouble(doublev)throwsIOException

3.1基本类型数据的读写223.常见I/O应用二【编程要求】将100个随机生成的小数(0-1000之间)写入文件,要求以’#’分隔。然后从该文件依次读出每一个小数。编程提示:DataOutputStream类的相关方法实现。3.1基本类型数据的读写233.常见I/O应用二通常状况下,当Java程序运行结束时,JVM内存中的相关对象将随之销毁。如果我们想将对象以某种方式保存下来,在程序的下次运行时再恢复该对象,可以通过对象的序列化和反序列化来实现。序列化指将内存中对象的相关信息(除transient以外的全部属性值等)进行编码,然后写到外存的过程。注意:用transient修饰的对象变量将不会被序列化。3.2序列化与反序列化243.常见I/O应用二反序列化的顺序正好相反,反序列化将序列化的的对象信息从外存中读取,并重新解码组装为对象的过程。Java提供了ObjectInputStream/ObjectOutputStream类来实现序列化与反序列化。只有实现Java.io.Serializable接口的类的对象才能被序列化和反序列化,否则会出现java.io.NotSerializableException。3.2序列化与反序列化253.常见I/O应用二查阅API帮助文档,ObjectInputStream、ObjectOutputStream类中需要重点掌握常用构造方法和常用方法:publicObjectInputStream(InputStreamin)throwsIOExceptionpublicfinalObjectreadObject()publicObjectOutputStream(OutputStreamout)throwsIOExceptionpublicfinalvoidwriteObject(Objectobj)throwsIOException3.2序列化与反序列化263.常见I/O应用二【编程要求】

Student类(sno,sname,password,sex)。将password设置为transient,要求覆盖父类Object的toString()方法。至少生成5个Student对象,sno为键,Student对象为值,放入到HashMap<String,Student>。将HashMap序列化到一个文件d:\\student.dat(要求不序列化password)。从d:\\student.dat中反序列化得到HashMap<String,Student>,并输出。3.2序列化与反序列化271Java

I/O技术2常见IO应用一4让我们一起来编程学习提纲3常见IO应用二284.让我们一起来编程【编程作业】单词统计(WordCount.java)编程要求:给定英文文本文件,统计每一个英文单词出现的次数,要求按字母顺序排列。编程提示:用TreeMap<String,Integer>实现。循环遍历该文本文件的每一个字符串,如果TreeMap中已经存储该字符串,则出现次数加1,否则,存储该字符串,出现次数为1。"\\s|,|\\.|\"|“|”|\\)|\\("4.1利用Scanner和PrintStream完成文件的读写293.常见I/O应用二ApachePOI是Apache软件基金会的开放源码程序库。POI提供通过Java语言对MicrosoftOffice文件进行读写的API,支持Office97-2008文档格式(包括XLSX,DOCXandPPTX)。下载地址:/,其框架结构如下:

HSSF:提供读写Excel格式文件的功能。HWPF:提供读写Word格式文件的功能。HSLF:提供读写PowerPoint格式文件的功能。HDGF:提供读写Visio格式文件的功能。3.3利用POI读写Excel敬请批评指正,谢谢!2023年第9周JavaGUI编程技术321JavaGUI技术简介2JavaGUI相关接口和类4让我们一起来编程学习提纲3利用WindowBuilder进行swing应用开发9.3

利用WindowBuilderPro进行swing应用开发

331.JavaGUI编程技术简介Java的GUI库最主要的有三种:AWT、swing和SWT/JFace。AWT和swing是Sun随JDK一起发布的,无需安装直接可以使用,SWT/JFace需要跟随Eclipse安装或单独安装。341.JavaGUI编程技术简介AWT(AbstractWindowToolkit)最原始最基础的JavaGUI工具包。AWT相关的类和接口集中存放在java.awt包中。AWT提供了创建GUI的工具包,包括了基础组件、布局管理器、绘图、事件处理等。AWT主要由C语言开发,灵活性差,运行时系统消耗资源多,属重量级的Java组件,很难做到美观,功能也比较简陋。1.1AWT351.JavaGUI编程技术简介针对AWT存在问题,Sun公司1998年对AWT进行了扩展,开发出了swing组件。swing相关的类和接口集中存放在javax.swing包中。swing中大部分是轻量级组件,由纯Java代码实现,没有本地代码,不依赖操作系统的支持,采用可插入的外观感觉。swing组件包括了AWT中已经提供的GUI组件,同时包括一套高层次的GUI组件,swing继续使用AWT的事件处理模型。1.2swing

361.JavaGUI编程技术简介1.2swing

371.JavaGUI编程技术简介SWT/JFace是IBM为开发EclipseIDE编写的一组GUIAPI,跟随Eclipse安装或单独安装。至今为止,SWT无论是在性能和外观上,都超越了SUN公司提供的AWT和SWING。JFace是对SWT的一个封装,它丰富、优化了SWT的功能。1.3SWT/JFace381.JavaGUI编程技术简介为简化GUI应用开发的难度,提高开发的效率,可以象在VisualStudio中一样通过拖曳控件来编写GUI程序,VisualEditor、Jigloo、Matisse、WindowBuilderPro等JavaGUI可视化开发工具也相继开发并推广。本课程将采用WindowBuilder来协助GUI应用开发。1.4GUI设计工具391.JavaGUI编程技术简介WindowBuilder是一款免费的、开源的、非常好用的Eclipse插件。在WindowBuilder设计视图中通过拖拽和设置属性,可以轻松添加众多组件并迅速创建复杂的窗口,同时会自动生成Java代码。然后在代码视图中在WindowBuilder生成代码的基础上,修改和增加功能。WindowBuilder可以保证代码和界面同步更新。总之,利用WindowBuilder可以有效降低JavaGUI编程难度,提高效率。1.4GUI设计工具40学习提纲9.3

利用WindowBuilderPro进行swing应用开发

1JavaGUI技术简介2JavaGUI相关接口和类4让我们一起来编程3利用WindowBuilder进行swing应用开发412.JavaGUI相关接口和类一个Java图形界面,由各种不同类型的“元素”组成,例如:窗口、菜单栏、对话框、标签、按钮、文本框等等,这些“元素”统一被称为组件(Component)。组件按照不同的功能,可分为顶层容器、中间容器、基本组件。基本组件不能独立地显示出来,必须将组件放在特定的对象―容器中才能显示出来。每个容器类都和一个布局管理器相关联,以确定其中组件的布局。422.JavaGUI相关接口和类顶层容器:属于窗口类组件,可以独立显示。图形界面至少要有一个顶级容器。swing顶层容器包括JFrame、JApplet、JDialog、JWindow。JFrame类是最常用的顶级容器,带有窗口标题,可最大化、最小化、还原等。JFrame默认的布局管理器是BorderLayout。publicclassGUIModelextends

JFrame2.1组件类432.JavaGUI相关接口和类中间容器:因为GridLayout、BorderLayout等布局中一个区域只能入放置一个组件,所以通常要将多个组件放入一个中间容器,再将这个中间容器放入顶级容器或其它中间容器。常见中间容器包括JPanel(轻量级面板)、JScrollPane(带有滚动条的面板)、JSplitPane(分隔面板)、JTabbedPane(选项卡面板)、JLayeredPane(多层面板)、JToolBar(工具栏)、JMenuBar(菜单栏)、JPopupMenu(弹出菜单)、JInternalFrame(内部窗口)等。JPanel:是一种无边框的中间容器,是最常用的中间容器。JPanel默认的布局管理器是FlowLayout。2.2swing442.JavaGUI相关接口和类绝大部分swing组件类的名称和对应AWT组件类的名称基本一致,只要在原来的AWT组件类名前添加“J”即可。Swing常见组件包括:JLabel(文本标签)、JButton(按钮)、JTextField(单行文本框)、JPasswordField(单行密码框)、JTextArea(多行文本框)、JRadioButton(单选按钮)、JCheckbox(复选按钮)、JComboBox(下拉式列表)、JList(列表)、JScrollbar(滚动条)、JSlider(滑块)、JFileChooser(文件选择框)、JColorChooser(颜色选择框)、JTable(表格)、JTree(树)、JProgressBar(进度条)等。2.2swing452.JavaGUI相关接口和类462.JavaGUI相关接口和类AWT提供了FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout等布局管理器类来管理各种组件在容器中的放置状态。当一个容器被创建时如果不指定布局管理器,它们就采用默认的布局管理器。Panel的默认的布局管理器FlowLayout。Window、Frame和Dialog默认的布局管理器就是BorderLayout。2.2布局管理器472.JavaGUI相关接口和类AWT提供的常见布局管理器介绍如下:FlowLayout(流式布局):FlowLayout是最简单的布局管理器。在FlowLayout中,你不必指定每个控件放在哪,FlowLayout就会根据你添加控件的顺序依次从左向右放置控件,如果空间不够,组件满一行后自动换行。2.3布局管理器

482.JavaGUI相关接口和类BorderLayout(边界布局):BorderLayout将容器划分为NORTH、WEST、EAST、SOUTH、CENTER五个区域。将控件放入容器时,必须指定控件放置的区域。如下图所示,每个区域只能放一个控件,组件自动扩展大小以填满该区域。2.3布局管理器

492.JavaGUI相关接口和类GridLayout(网格布局):GridLayout将容器切割为棋盘一样m行n列的网格,每个网格可以放置一个组件。添加到容器的组件从左向右自上而下依次放置。2.3布局管理器

502.JavaGUI相关接口和类Java事件处理机制由事件源、事件和事件监听器三部分组成。当用户在GUI组件上触发一个事件(如ActionEvent),AWT将事件对象封装传递给事件监听器。事件源:指能产生AWT事件的各种GUI组件,如按钮、菜单等。事件:指在java.awt.event包中定义的Java能够处理的事件(以Event结尾)。事件监听器:指一个实现了XxxListener接口或继承了XxxAdapter抽象类的类,负责监听和处理某种特定事件XxxEvent。2.4Java事件处理机制512.JavaGUI相关接口和类下面以JButton、ActionEvent、ActionListener为例说明Java事件处理的实现:建立事件监听器类,该类必须实现相关事件监听器接口,重写其中的抽象方法。classHandlerimplementsActionListener。将事件源和事件监听器关联起来。在事件处理方法中编写事件处理代码。publicvoidactionPerformed(ActionEvente){ //处理事件代码

}2.4Java事件处理机制522.JavaGUI相关接口和类【示例程序】GUIModel实现一个基本窗口,并进行了相关的设置。我们只要在此基础上稍加改造,在其中定义并添加中间容器和基本组件,编写事件处理代码,即可完成编程任务。2.5GUI模板532.JavaGUI相关接口和类542.JavaGUI相关接口和类【编程要求】用纯手工编程实现:拖动红、绿、蓝对应的JSlider组件滑块时右侧按钮颜色马上随之变化,界面要求如下。

事件源:JSlider,事件:ChangeEvent,监听器接口:ChangeListener2.6颜色调整器55学习提纲1JavaGUI技术简介2JavaGUI相关接口和类4让我们一起来编程3利用WindowBuilder进行swing应用开发563.利用WindowBuilder进行swing应用开发首先判断一下我们使用的Eclipse中是否已经安装了WindowBuilder插件:在Eclipse环境中new->other中是否有WindowBuilder选项。3.1WindowBuilder的下载和安装

573.利用WindowBuilder进行swing应用开发WindowBuilder的在线安装:在Eclipse中,选择菜单“Help->Install

New

Software……”,在弹出的对话框中WorkWith后面的文本框中粘贴与你使用Eclipse对应版本的WindowBuilder更新地址:/windowbuilder/latest/,选择要安装的插件后,单击Finish按钮,即开始下载插件,自动安装重启Eclipse后生效。

温馨提示

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

最新文档

评论

0/150

提交评论