一、带缓存的数据流
为了减少设备的输入输出次数,加快输入输出速度,Java提供了带缓冲的输入输出流类。
BufferedInputStream和BufferedOutputStream,将输入输出定向到一个缓冲区中,这个区域足够容纳许多数据,简称缓冲过滤流类。
二、基于字符流的文件操作
在java中用unicode表示字符和字符串。
尽管字节流提供了处理任何类型输入/输出操作的足够的功能,它们不能直接操作Unicode字符。
操作字符流,使用Reader和Writer的各子类。类java.io.Reader 和java.io.Writer 是抽象 (abstract )类,是基于文本的其它读写器的父类(superclasses) 。
三、常用字符流类
(1)FileReader类创建了一个可以读取文件内容的Reader类。
eg.FileReader fr = new FileReader("test");
(2)FileWriter创建一个可以写文件的Writer类。
eg.FileWriter fw = new FileWriter(“test");
(3)BufferedReader类java.io.Reader的子类,通过缓冲输入提高性能。
当读取数据量很大时,一个很好的方法是: 通过类BufferedReader,这时需要 给Reader的子类(如: FileReader)“外包”上类BufferedReader。
eg. BufferedReader br = new BufferedReader(new FileReader("test"));
(4)BufferedWriter是一个增加了flush( ) 方法的Writer。
flush( )方法可以用来确保数据缓冲器确实被写到实际的输出流。
四、随机访问文件
随机访问文件方式可以在指定位置读/写字节内容。
RandomAccessFile 实例对象,同时具有类DataInputStream和类DataOutputStream的功能。
类RandomAccessFile实现了接口DataInput和DataOutput。
eg1. new RandomAccessFile(“file1.txt”, “r”);
eg2. new RandomAccessFile(“file2.txt”, “rw”);
随机文件可以同时完成读和写操作。
readXXX()或writeXXX():读或写。
skipBytes(); 将指针向下移动若干字节。
seek(): 将指针调到所需位置。
getFilePointer(): 返回指针当前位置。
length(): 返回文件长度。
利用seek(long pos)方法查找随机文件中的信息。
五、java GUI-- Swing
大多数的Swing组件不依赖本地窗口部件。
Swing缺省情况下采用本地平台的显示外观。 它还可以采用插件式的显示外观。因此Swing应用程序可以看起来像Windows应用程序,Motif应用程序,Mac应用程序……
Swing应用程序可以完全忽略它运行时所在的操作系统环境并且仅仅看起来像自己。
不依赖于底层平台的Swing组件,称为轻量级组件。
六、AWT、Swing、SWT区别
AWT、SWT都依赖底层平台,都基于对等体实现的,在不同的操作系统上开发出来的程序显示效果不一样, SWT提供比AWT更为丰富的组件集;
Swing 是基于AWT的架构之上的,在不改变大量的程序代码前提下允许程序中每个组件观感的变化。可更换观感技术的引入允许Swing组件在模拟原生组件外观的同时又保持了平台独立的优点。对底层平台的依赖很少,所以给不同用户一致的感觉,还拥有一个丰富、便捷的用户界面元素集合。
由于AWT和SWT都持有对本地组件的引用,它们必须以正确的方式释放这些引用以避免内存泄露和JVM崩溃。
七、容器与控制组件
容器(Container):一系列相关组件的集合,是用于组织界面成分和元素的单元。 它是一种比较特殊的组件,可以包含其他组件。
例如:Window、Frame……
控制组件:用于完成与用户的交互,是 GUI的最小单元之一,里面不再包含其他的成分。
例如:Button、CheckBox、TextField……
八、Swing组件分类
顶层容器(“根面板”):JFrame , JApplet , JDialog , JWindow
中间容器:JPanel , JScrollPane , JSplitPane , JToolBar,JInternalFrame , JLayeredPane , JRootPane
基本控件:实现人机交互的组件,如 JCheckBox ,JButton, JList , JMenu , JSlider , JTextField等。
显示不可编辑的信息:向用户显示不可编辑信息的组件,例如:JLabel , JProgressBar , JToolTip等。
显示可编辑的信息:向用户显示能被编辑的格式化信息的组件,如:JTable , JTextArea ,JColorChooser , JFileChooser等。
九、框架结构
(1)玻璃面板:默认是不可见的。可接受键盘或鼠标的响应事件。(glass pane)
(2)内容面板:一个可见的容器,不包括菜单条; (content pane)
(3)工具条:可选组件。(tool bar)
(4)分层的面板:定位内容面板和菜单条。(layered pane)
JFrame(窗口)下面有JRootPane(根面板),JRootPane(根面板)下面有GlassPane(玻璃面板)和LayeredPane(分层面板),LayeredPane(分层面板)下面有ContentPane(内容面板)和Menu Bar(菜单条)。
jframe.add(new JButton("ENTER"));
//平时添加到JFrame(窗口)的组件,都是添加到了ContentPane(内容面板)里,<=>jframe.getContentPane().add(new JButton("ENTER"));
十、常用组件
(1)JLable:可以显示: 单行的只读的文本信息;图像;同时显示文本与图像信息。
(2)Jbutton:用户单击按钮,触发特定的动作。
十一、GUI事件
GUI是由事件(event)驱动的,当用户与GUI交互可以产生事件(events) 。
GUI组件的事件处理机制中包含三个部分:(1)事件源;(2)事件对象;(3)监听器。
十二、事件处理机制(委托事件处理模型)
Java中的事件处理机制,简单来说,就是各个元素对不同事件的响应。它是一种事件处理框架,其设计目的是把GUI交互动作转变为调用相关的事件处理程序进行处理。它首先调用事件源本身的方法,为将要产生事件的组件注册监听器。然后当事件发生时监听器接受事件对象,并处理事件对象。