ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:65.96KB ,
资源ID:3401403      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3401403.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验13流式输入输出与文件处理编程.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验13流式输入输出与文件处理编程.docx

1、实验13流式输入输出与文件处理编程实验13 流式输入输出与文件处理13.1 实验目的(1) 掌握字节流和字符流的特点和处理差异; (2) 掌握过滤流的使用; (3) 掌握File类的使用; (4) 掌握随机文件的使用。 (5) 掌握对象系列化的概念以及访问文件时对象读写方法。13.2 知识要点13.2.1 面向字节的输入/输出流(1)类InputStream是面向字节的输入流的根。其主要方法见表13-1。表13-1 类InputStream的方法方法功能int read()读一个字节int read(byte b)读多个字节到字节数组int read(byte b, int off, int

2、len)读指定长度的数据到字节数组,数据从字节数组的off处开始存放Long skip(long n)输入指针跳过n个字节Void mark()在当前指针位置处做一标记Void reset()将位置指针返回标记处Void close()关闭流(2) 数据过滤流DataInputStream该流实现DataInput接口,主要方法有:readByte(),readBoolean()、readShort()、readChar()、readInt() 、readLong()、readFloat()、readDouble()、readUTF()等。(3)类OutputStream是面向字节输出流的根,

3、其主要方法有: void write(int b) :将参数b的低字节写入输出流 void write(byte b) :将字节数组全部写入输出流 void write(byte b,int offset, int len):将字节数组中从boffset开始处的len个字节写入至输出流。(4)类DataOutputStream实现各种类型数据的输出处理,它实现了DataOutput接口,主要方法有:writeByte(int)、writeBytes(String)、writeBoolean(boolean)、writeChars(String)、writeInt(int) 、writeLong

4、()、writeFloat(float)、writeDouble(double)、writeUTF(String)等。13.2.2 面向字符的输入与输出流类Reader是面向字符的输入流的根,其提供的方法与InputStream类似,只是将基于Byte的参数改为基于Char。类Writer是面向字符的输出流类的根,其提供的方法与OutputStream类似,只是将基于Byte的参数改为基于Char。类InputStreamReader是一个特殊的流,用来将面向字节的数据流包装转换为面向字符的流。常用于从键盘获取输入数据。例如,从键盘输入一行字符串,可以用BufferedReader的readL

5、ine()方法,但在此前必须使用InputStreamReader将字节流转化为字符流。BufferedReader in=new BufferedReader(new InputStreamReader(System.in); String x=in.readLine() 13.2.3 文件的顺序读写(1)面向字节的文件访问 以二进制文件作为数据源。FileInputStream类和FileOutputStream类分别用于文件的读、写访问。 利用InputStream和OutputStream的方法可实现文件的读写操作。 可用DataInputStream对FileInputStream流

6、进行过滤;用DataOuputStream对FileOutputStream流进行过滤,以实现特定数据类型数据的读写。(2)面向字符的文件访问 以字符文件作为数据源。包括:FileReader类和FileWriter类分别用于字符文件的读、写访问。 基于字符流的数据读写方法与基于字节流的类似,只是将读写的单位由字节改为字符,方法中的字节数组参数相应改为字符数组。例如:int read(char b)表示从文件读数据填满数组,返回读到的字符数。 可用BufferedReader对FileReader流进行过滤;用BufferedWriter对FileWriter流进行过滤,其中包含newLine

7、()方法可写入一个换行。13.2.4 File类借助File对象,可以获取文件和相关目录的属性信息。其主要方法见表13-2。表13-2 File类的主要方法方法功能String getName()返回文件名String getPath()返回文件或目录路径String getAbsolutePath()返回绝对路径String getParent()获取文件所在目录的父目录boolean exists()文件是否存在boolean canWrite()文件是否可写boolean canRead()文件是否可读boolean isFile()是否为一个正确定义的文件boolean isDirec

8、tory()是否为目录Long lastModified()文件的最后修改日期Long length()文件长度boolean mkdir()创建当前目录的子目录String list()列出目录中的文件boolean renameTo(File newFile)将文件改名为新文件名Void delete()删除文件boolean equals(File f)比较两个文件或目录是否相等13.2.5 随机文件 创建随机访问文件对象时要指定文件访问的“rw”参数,也就是它可以对同一打开文件进行读写两种访问。RandomAccessFile类实现了DataInput和DataOutput接口,为支持

9、流的随机读写,RandomAccessFile类还添加定义了如下方法: long getFilePointer():返回当前指针; void seek(long pos):将文件指针定位到一个绝对地址; long length():返回文件的长度注意:地址是相对于文件头的偏移量。地址0表示文件的开头。 13.2.6 对象序列化(1)对象输入流ObjectInputStream和对象输出流ObjectOutputStream将Java流系统扩充到能输入输出对象,它们提供的writeObject()和readObject()方法实现了对象的串行化(Serialized)和反串行化(Deserial

10、ized)。(2)用对象输入流的readObject()方法必须捕捉ClassNotFoundException异常。(3)为了实现用户自定义对象的串行化,相应的类必须实现Serializable接口,否则,不能以对象形式正确写入文件。Serializable接口是一个不含任何具体内容的接口。13.3 样例程序样例1: 编写一个程序实现任意文件的拷贝功能,源文件和目的文件名由命令行参数提供。【参考程序】import java.io.*; public class CopyFile public static void main(String args) if ( args.length2) S

11、ystem.out.println(usage: java CopyFile sourcefile targetfile); System.exit(0); byte b = new byte1024; try FileInputStream infile = new FileInputStream(args0); FileOutputStream targetfile = new FileOutputStream(args1); while (true) int byteRead=infile.read(b); /从文件读数据给字节数组 if (byteRead=-1) /在文件尾,无数据可

12、读 break; /退出循环 targetfile.write(b,0,byteRead); /将读到的数据写入目标文件 targetfile.close();System.out.println(copy success! ); catch(IOException e) 注:本样例演示面向字节的输入输出流的进行文件读写的方法。【编程技巧】(1) 创建一个字节数组存放从文件读取的数据;(2) 利用FileInputStream对象的带字节数组参数的read方法从文件读数据,返回读到的字节数;利用FileOutputStream对象的带字节数组的write方法可将字节数组中指定的字节写入到目标文

13、件。(3) 利用循环控制文件的连续读写操作,在处理到文件结尾时,read方法返回-1,退出循环。样例2:编写一个程序统计一个文本文件中字符A的个数,文件名由命令行参数提供。【参考程序】import java.io.*;public class readtxt static String s; /* 方法find查找字符串in中A的个数 */ public static int find(String in) int n=0; int counter = 0; while(n!=-1) n = in.indexOf(int)A,n+1); counter+; return counter-1;

14、public static void main(String args) try int n=0; FileReader file =new FileReader(args0); BufferedReader in=new BufferedReader (file); boolean eof=false; while(!eof) String x=in.readLine(); /从文件读一行 if(x=null) /判是否文件结束 eof=true; else s=s+x; /将内容拼接到字符串s上 System.out.print(the number of A is :+find(s);

15、in.close(); catch(IOException e) ; 注:本样例演示文本文件的数据读取方法。【编程技巧】(1) 循环利用BufferedReader的readLine()方法从文件读一行内容,读到文件尾部时将返回null;(2) 将读到的数据拼接到字符串s中,最后执行find方法找出A的个数。样例3: 设计一个图形界面的文本文件查阅工具,在窗体中安排一个文本域和一个按钮(如图13-1所示),文本域用来显示文件的内容,点击打开按钮将弹出文件选择对话框(如图13-2所示),从而可以选择要查看的文件。【参考程序】import java.awt.*;import java.awt.ev

16、ent.*;import java.io.*;public class FileViewer extends Frame implements ActionListener String directory; /文件选择对话框的默认目录 TextArea textarea; / 显示文件内容的文本域 public FileViewer() this(null, null); public FileViewer(String filename) this(null, filename); public FileViewer(String directory, String filename) a

17、ddWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) dispose(); ); textarea = new TextArea(, 24, 80); textarea.setFont(new Font(宋体, Font.PLAIN, 12); textarea.setEditable(false); this.add(Center, textarea); Panel p = new Panel(); p.setLayout(new FlowLayout(FlowLayout.RIGHT, 1

18、0, 5); this.add(p, South); Button openfile = new Button(Open File); openfile.addActionListener(this); openfile.setActionCommand(open); openfile.setFont(new Font(SansSerif, Font.BOLD, 14); p.add(openfile); this.pack();/ 根据文件名路径得到目录,否则为系统当前目录. if (directory = null) File f; if (filename != null) & (f =

19、 new File(filename).isAbsolute() /如果文件名中给出了绝对路径,则可根据创建的File对象得到文件的目录路径和文件名 directory = f.getParent(); filename = f.getName(); else directory = System.getProperty(user.dir); /系统当前目录 this.directory = directory; /记住文件打开对话框的默认目录 setFile(directory, filename); / 装载显示文件 /* 从特定目录装载文件 */ public void setFile(

20、String directory, String filename) if (filename = null) | (filename.length() = 0) return; File f; FileReader in = null; try f = new File(directory, filename); / 创建文件对象 in = new FileReader(f); / And a char stream to read it char buffer = new char4096; / 每次读 4K字符 int len; / 每次读到的字符数 textarea.setText()

21、; while(len = in.read(buffer) != -1) String s = new String(buffer, 0, len); textarea.append(s); /读到的字符串添加到文本域 this.setTitle(FileViewer: + filename); / 设置窗体标题 textarea.setCaretPosition(0); /将光标定到文本域的开头 catch (IOException e) textarea.setText(e.getClass().getName() + : + e.getMessage(); this.setTitle(F

22、ileViewer: + filename + : I/O Exception); / 任何情况下均要记住关闭流 finally try if (in!=null) in.close(); catch (IOException e) public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand(); if (cmd.equals(open) FileDialog f = new FileDialog(this, Open File, FileDialog.LOAD); f.setDirectory(dire

23、ctory); /设置文件打开对话框的默认目录 f.show(); directory = f.getDirectory(); / 记住新的默认目录 setFile(directory, f.getFile(); / 装载显示文件 f.dispose(); / 得到文件后自动关闭对话框 public static void main(String args) throws IOException Frame f = new FileViewer(args.length = 1)?args0:null); f.addWindowListener(new WindowAdapter() publi

24、c void windowClosed(WindowEvent e) System.exit(0); ); f.setVisible(true); 注:本样例演示File对象的使用以及读取文本文件数据的方法。【编程技巧】(1) 如何利用File对象处理文件的目录和文件名,系统的当前目录如何得到;(2) 创建一个字符数组用于存放从文件读到的字符,利用FileReader的read方法可从文件读数据填入字符数组,无数据可读时返回-1,利用它作为循环控制标记;(3) FileViewer构造方法的多态性编写,从而适应各种应用情形;(4) FileDialog的使用,文件默认目录路径的设置和获取新默认

25、路径的办法,新默认路径由对话框选择的路径决定。13.4 上机练习 基本题1) 编写一个程序将多个文件的内容合并为一个文件,被合并的文件的文件名由命令行参数输入。例如: java merge x1.txt x2.txt x3.txt x4.txt2)从一个文本文件中读入30个学生的姓名和成绩,计算所有学生的最高分、最低分、平均分,将情况写入另一个文本文件中。 提高题1)编写一个程序从一个文本文件中读入数据,统计其中不含重复的单词个数,并按单词出现频度有高到低输出。2) 编写应用程序实现图形的存储管理. 能实现直线和圆的绘制; 将绘制的图形以对象形式写入到文件中; 载入文件时能将图形绘制和修改,继

26、续保存到文件中。 3) 利用随机文件存储人员电话号码,编程支持如下功能:查询某人的电话号码;增加、删除人员;修改人员电话号码。13.5 思考题1)以下哪个是RandomAccessFile文件的构造方法:ARandomAccessFile(data, r); BRandomAccessFile(r, data); CRandomAccessFile(data, read); DRandomAccessFile(read, data); 2)设有如下代码: import java.io.*;public class Th public static void main(String argv) Th t = new Th(); t.amethod(); public void amethod() try ioCall(); catch(IOException ioe) 以下哪个最有可能是ioCall方法的方法体? A public void ioCall () throws IOException DataInputStream din = new DataInputStream(System.in); din.readC

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1