java第6章io流.ppt
《java第6章io流.ppt》由会员分享,可在线阅读,更多相关《java第6章io流.ppt(99页珍藏版)》请在三一办公上搜索。
1、第6章 I/O:读和写,课前思考,如何读取硬盘上的某个文件内容?如何知道文件系统中有哪些目录和子目录?如何往硬盘上写文件?如何接收键盘输入?,教学目标,与外部设备和其它计算机进行交流的输入输出操作,尤其是对磁盘的文件操作,是计算机程序重要的功能,任何计算机语言都必须对输入输出提供支持。Java也不例外,它的输入输出类库中包含了丰富的系统工具,这些类被放在java.io包中。在该类库中,除了定义文件输入输出操作外,还定义了许多用来和其他外设进行信息交换的类。本章将详细介绍I/O类库中的基本内容,主要侧重于文件的输入输出管理和流的基本概念。,流,在计算机中,“流”的概念是1984年由C语言第一次引
2、入的。“流”可以看作是一个流动的数据缓冲区,数据从数据源流向数据目的地。,I/O与流,I/O是程序设计中的重要问题,大部分的应用程序都需要I/O操作,比如从键盘获得用户输入、在屏幕输出运行结果、对磁盘文件进行读写等等。应用程序只有通过I/O操作才能实现与用户的交互及数据的处理及存储.在Java语言中,将不同类型的I/O抽象为流。所谓“流(stream)”,可以看作是数据在文件或程序之间的传递,输入流和输出流,一般来说,流有两种基本形式:输入流和输出流,根据程序是作为数据流的目的端还是源端来划分。程序首先要打开一个流,才能与数据文件进行通信。通过输入流,程序可以从数据文件读取数据,但不可向输入流
3、中写入数据;反之,通过输出流,程序可以向数据文件中写入数据。程序与其他设备间的I/O也可以使用流,这时可将设备看作是一个数据文件。,Java I/O流类的组织模式,java.io,在Java开发环境中,主要是由包java.io中提供的一系列的类和接口来实现输入/输出处理。而标准输入/输出处理则是由包java.lang中提供的类来处理的,这些类又都是从包java.io中的类继承而来的。I/O类提供了低层次和高层次的界面。每一种介质都有一对与之相关联的输入输出类,它们提供低层次的面向数据序列(字符、字节)的界面。与介质相关的各个类都分别是输入输出抽象流类的子类,它们通常具有与介质相关的构造器及方法
4、。I/O抽象类为所有与介质相关的具体输入输出类提供了一个统一的界面。反过来各个具体的与介质相关的输入输出类也扩展了抽象类,通过它们可以实现在具体介质上的输入输出操作,I/O操作的一般步骤,构造一个与介质相关的I/O对象,以提供一种低层次的方法将数据输入或输出到相应的介质;将与介质相关的对象强制类型转换为它的父类(即抽象I/O类),并利用该对象构造一个流对象。这样便建立起了流类对象与介质相关对象的关联;这时就可利用流对象的I/O方法进行相应介质上的数据读写。,字节流与字符流,从流中传输的数据单位分为两类:字节流从InputStream和OutputStream派生出来的一系列类,以字节(byte
5、)为基本处理单位。字符流从Reader和Writer派生出的一系列类,以16位的Unicode码表示的字符为基本处理单位。,字节流,InputStream类,InputStream类定义了一套所有字节输入流所需的方法,OutputStream类,OutputStream类定义了一套所有字节输出流所需的方法。,字符流类,Reader与Writer类,Reader类的相关方法:void close()void mark(int readAheadLimit)boolean markSupported()int read()int read(char cbuf)int read(char cbuf,
6、int off,int len)boolean ready()void reset()long skip(long n)Writer类的相关方法:void close()void flush()void write(char cbuf)void write(char cbuf,int off,int len)void write(int c)void write(String str)void write(String str,int off,int len),各种流的作用概述,各种流的作用概述,各种流的作用概述,各种流的作用概述,文件流,要对本机文件系统上的文件进行读写,需要使用文件流。Ja
7、va的文件流类包括字符流的FileReader、FileWriter和字节流的FileInputStream、FileOutputStream。,Java中文件的操作,而要进行文件流操作,首先必须清楚java中关于文件的基本操作,下面我们进行详细介绍。,文件与目录的描述类File File类并不用来进行文件的读/写操作,它用来描述文件对象的属性,既可以表示文件,也可以表示目录。使用它提供的方法,我们可以得到所指对象的描述信息,包括名称、存在否、读/写权限、路径等等。,需要注意的是,当我们在Windows环境使用路径时,其分隔符不能是单一的“”符号,因为与C/C+相同,符号“”已经被转意了。例如
8、:c:jbuilder3javabin路径是非法的,系统不会识别,正确的应该为c:jbilder3javabin 或者直接使用反斜杠/来作为路径分隔符。如c:/jbilder3/java/bin,文件描述,类File提供了一种与机器无关的方式来描述一个文件对象的属性。文件的生成public File(String path);public File(String path,String name);public File(File dir,String name);,文件描述,文件名的处理String getName();/*得到一个文件的名称(不包括路径)*/String getPath()
9、;/得到一个文件的路径名String getAbsolutePath();/*得到一个文件的绝对路径名*/String getParent();/*得到一个文件的上一级目录名*/String renameTo(File newName);/*将当前文件名更名为给定文件的完整路径*/,文件描述,文件属性测试boolean exists();/*测试当前File对象所指示的文件是否存在*/boolean canWrite();/测试当前文件是否可写boolean canRead();/测试当前文件是否可读boolean isFile();/*测试当前文件是否是文件(不是目录)*/boolean i
10、sDirectory();/*测试当前文件是否是目录*/,文件描述,普通文件信息和工具long lastModified();/*得到文件最近一次修改的时间*/long length();/得到文件的长度,以字节为单位boolean delete();/删除当前文件目录操作boolean mkdir();/*根据当前对象生成一个由该对象指定的路径*/String list();/列出当前目录下的文件,File类的方法及变量,下面我们给出几个File类的应用实例。通过例题的使用,希望对File类有更清楚的认识。例 import java.io.*;public class MyClass1 pu
11、blic static void main(String args)Filef=new File(c:jbuilder3myprojectsuntitled5MyClass1.java);if(!f.exists(),System.out.println(File MyClass1.java doesnt exist!);else System.out.println(This file can read+f.canRead();System.out.println(last modified+f.lastModified();System.out.println(Parent is+f.ge
12、tParent();System.out.println(File length is+f.length();public MyClass1(),图 7.3,例 import java.io.*;class FileTestpublic static void main(String args)System.out.println(path separator+File.pathSeparator);System.out.println(path separator char+File.pathSeparatorChar);System.out.println(separator+File.s
13、eparator);System.out.println(separator char+File.separatorChar);File f=new File(/dong1/test1.class);();System.out.println(f);System.out.println(exist?+f.exists();,System.out.println(name+f.getName();System.out.println(path+f.getPath();System.out.println(absolute path+f.getAbsolutePath();System.out.p
14、rintln(parent+f.getParent();System.out.println(is a file?+f.isFile();System.out.println(is a directory?+f.isDirectory();System.out.println(length+f.length();System.out.println(can read+f.canRead();System.out.println(can write+f.canWrite();System.out.println(last modified+f.lastModified();,File newF=
15、new File(newFile);(.Rename+f+.);f.renameTo(newF);System.out.println(name+newF.getName();System.out.println(f+exist?+f.exists();(.delete+newF+.);newF.delete();System.out.println(newF+exist?+newF.exists();,运行结果,path separator:path separator char:separator/separator char/dong1/test1.classexist?truename
16、 test1.classpath/dong1/test1.classabsolute path/dong1/test1.classparent/dong1,运行结果,is a file?trueis a directory?falselength 514can read truecan write truelast modified 907117020000.Rename/dong1/test1.classname newFile/dong1/test1.class exist?false.delete newFile.newFile exist?false,文件夹处理,list方法用于列出一
17、个目录中所有的文件或与某个模式相匹配的文件。列出目录中与某种模式相匹配的文件:public String list(FilenameFilter filter);在接口 FilenameFilter中定义的方法只有:boolean accept(File dir,String name);,例:import java.io.*;public class FileFilterTestpublic static void main(String args)File dir=new File(“/dongl”);Filter filter=new Filter(“htm”);System.out.p
18、rintln(“list html files in directory”+dir);String files=dir.list(filter);,for(int i=0;ifiles.length;i+)File f=new File(filesi);if(f.isFile()System.out.println(“file”+f);elseSystem.out.println(“sub directory”+f);,class Filter implements FilenameFilterString extent;Filter(String extent)this.extent=ext
19、ent;public boolean accept(File dir,String name)return name.endsWith(“.”+extent);,运行结果,list html files in directoty/donglfile cert_test.htmfile cert_sample.htmfile cert_obj.htm,例import java.io.*;public class MyClass2 public static void main(String args)File f1=new File(c:jbuilder3myprojects);if(!f1.i
20、sDirectory()System.out.println(Error:+f1+isnt a directory!);else String dirList=f1.list();for(int i=0;idirList.length;i+)System.out.println(dirListi);public MyClass2(),在该例中,我们并没有在调用File类的list方法中传递参数,这样,处在目录c:jbuilder3myprojects下的所有文件及目录将均被输出,结果如图7.4所示。,图 7.4,1Byte流(字节流)文件的读取 该类的结构如图7.1所示,我们主要用其中的Fil
21、eOutputStream和FileInputStream类,它们的父类为InputStream和OutputStream。主要的方法有:InputStream int read()int read(byte buf)int read(byte buf,int offset,int length)close(),利用流进行文件I/O处理,OutputStreamint write(int c)int write(byte buf)int write(byte buf,int offset,int length)close()下面给出一个应用实例7.4。,图 7.5,例7.4 import ja
22、va.io.*;public class FileCopy public static void main(String args)throws IOException FileInputStream f1;FileOutputStream f2;f1=new FileInputStream(FileCopy.java);f2=new FileOutputStream(acopy_of_java_file);,int temp;while(temp=f1.read()!=-1)f2.write(temp);f1.close();f1.close();public FileCopy()在该例中,
23、我们利用字节流将本程序拷贝至另一个文件acopy_of_java_file中,如果指定的文件不存在,则创建一个新文件,否则原文件的内容会被新写入的内容覆盖。当程序运行后,将生成一个与原程序相同的副本。,2Character流(字符流)文件的读取 该类如图7.2所示,输入/输出类的父类为Reader、Writer,其基本的方法有:Reader int read()int read(char buf)int read(char buf,int offset,int length)close(),Writer int write(int c)int write(char buf)int write(
24、char buf,int offset,int length)close()读者可与字节流进行比较,注意二者方法的区别。下面我们用字符流来改写例7.4:,例7.5 import java.io.*;public class FileCopy public static void main(String args)throws IOException FileReader f1;FileWriter f2;f1=new FileReader(FileCopy.java);f2=new FileWriter(acopy_of_java_file);,int temp;while(temp=f1.r
25、ead()!=-1)f2.write(temp);f1.close();f2.close();public FileCopy(),例7.6import java.io.*;public class ReadFile public static void main(String args)throws IOException FileReader fr=new FileReader(ReadFile.java);BufferedReader br=new BufferedReader(fr);String line=br.readLine();while(line!=null),System.o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java io

链接地址:https://www.31ppt.com/p-5575456.html