输入输出流

  • 格式:doc
  • 大小:139.00 KB
  • 文档页数:6

下载文档原格式

  / 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

项目13 文本保存器

学习目标:

✓认识数据流的概念

✓认识JAVA流的层次结构

✓认识文件的概念

✓会从标准输入/输出设备上输入/输出数据的方法

✓能使用字节流和字符流的方法

工作任务:

编写窗口界面程序,当用户在文本框中输入内容后,单击“保存“按钮,就可将文件写到指定的文件中(1.txt)。

【任务分析】

按下按钮触发动作事件,将文本框中的字符写入文件1.txt。数据是从程序流入到文件1.txt,因此相对于程序而言数据的流向是输出方向。

【程序代码】

import java.io.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

class Save extends JFrame

{ private JTextArea text=new JTextArea();

public Save()

{

setSize(200,200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //窗口关闭时,程序退出

JButton saveButton=new JButton("Save");

saveButton.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

try

{

FileOutputStream fos=new FileOutputStream(new File("1.txt"));

OutputStreamWriter osw=new OutputStreamWriter(fos);

String saveString=text.getText().replaceAll("\n","\r\n");

osw.write(saveString);

osw.flush();

osw.close();

}catch(Exception ee)

{

ee.printStackTrace();

}

}

}

);/*给Save按钮注册一个ActionListener对象,该对象的事件处理方法为actionPerforme,

actionPerforme方法完成了将文本框中的字符作为字符输出流写入到1.txt文件中*/

add(saveButton,BorderLayout.NORTH);

add(text,BorderLayout.CENTER);

setVisible(true);

}

public static void main(String[]args) throws Exception

{

new Save();

}

}

【相关知识】

1.输入/输出流的概念

所谓的输入/输出都是相对于程序来说的。程序在使用数据时,一种角色是数据的提供者,即数据源,另一种角色时数据的使用者,即数据目的地。如果程序是数据的提供者(数据从程序流出),这种流称为“输出流”;若程序是数据的使用者(数据从外界流入程序),这种流称为“输入流”。

Java语言中的流从功能上分为两大类:输入流和输出流;从流的结构上分为:字节流(以字节为处理单位)和字符流(以字符为处理单位)。

2.字节流的层次结构

对字节流,其stream类的层次结构如下:

从图中可以看出,InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。

1). InputStream

该类是一个抽象类,其方法包括:

int read()

int read(byte[])

int read(byte[],int,int)

这三个方法可从输入流读入字节或字节数组。要注意的是无参数的read()方法返回一个0至

255之间的整数或-1, -1代表遇到了流的结束,其它对应读入的字节。后两种方法则将字节读入参数给定的字节数组,返回值是实际读入的字节数或-1(遇到了流结束)。第三个read方法的后两个参数分别给出读入的起始位置和读入的最大字节数。

InputStream还有一些其它方法,如:

void close() //关闭流

int available() //报告流中直接可读的字节数

skip(long) //跳过流中指定的字节

2). OutputStream

OutputStream也是一个抽象类。它的主要方法包括:

void write(int)

void write(byte[])

void write(byte[],int,int)

其中第一个方法的int型的参数对应要写入的字节,后两个方法的参数与InputStream类似。void close() //关闭输出流

void flush() //强行将写入缓冲区中剩余的数据写入

3). FileInputStream和FileOutputStream

这两个类属于结点流,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。

如:

FileInputStream infile = new FileInputStream("myfile.dat");

FileOutputStream outfile = new FileOutputStream("results.dat");

要注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时,如输出文件已存在,则必须是可覆盖的。

4). BufferedInputStream和BufferedOutputStream它们是过滤器流,其作用是提高输入输出的效率。

5). DataInputStream和DataOutputStream这两个类创建的对象分别被称为数据输入流和数据输出流。这是很有用的两个流,它们允许程序按与机器无关的风格读写Java数据。

所以比较适合于网络上的数据传输。这两个流也是过滤器流,常以其它流如InputStream或OutputStream作为它们的输入或输出。

案例:字节流文件访问

【案例简介】使用字节流读取一个文本文件,并显示其内容。

import java.io.FileInputStream;

import java.io.IOException;

public class ReadFile {

public static void main(String[] args)

{

try {

// 创建文件输入流对象

FileInputStream is = new FileInputStream("Hello.java");

int n = 512; // 设定读取的字节数

byte buffer[] = new byte[n]; // 读取输入流

while ((is.read(buffer, 0, n) != -1) && (n > 0))

{

System.out.print(new String(buffer));

}

System.out.println();

is.close();// 关闭输入流

}

catch (IOException ioe)

{

System.out.println(ioe);

}