《输入输出操作》由会员分享,可在线阅读,更多相关《输入输出操作(28页珍藏版)》请在金锄头文库上搜索。
1、第9章 I/O操作,流File类的使用读取文件写入文件,9.1 流,Java的数据流在java.io包中。数据流(stream)是指一组有顺序的、有起点和终点的字节集合,是对输入输出的总称。数据流完成从键盘接收数据、读写文件以及打印等数据传输操作。,9.1 流 I/O流,数据流分为输入流(InputStream)和输出流(OutputStream)两大类。I/O流提供一条通道程序,可以使用这条通道把源中的字节序列送给目的地。 输入流的指向称作源,程序从指向源的输入流中读取源中的数据。 输出流的指向是字节要去一个目的地(或用户),程序通过向输出流中写入数据把信息传递到目的地。,9.1 流 缓冲流
2、,为提高数据的传输效率,通常使用缓冲流(buffered stream),即为一个流配一个缓冲区(buffer),一个缓冲区就是专门用于传递数据的一块内存。 缓冲流的作用就在于提高了内存与外部设备之间的数据传输效率。,9.1 流 常用流操作,Java的标准数据流是指在字符方式下(如DOS),程序与系统进行交互的方式,分三种即标准输入、标准输出和标准错误输出。第一种方式的对象是键盘,而后两种方式的对象是屏幕。 Java通过系统类System实现标准输入输出的功能。,9.1 流 标准输入流,标准输入流对应于键盘输入或者由主机环境或用户指定的另一个输入源。 System.in作为字节输入流类Inpu
3、tStream的对象in实现标准输入,其中接收数据采用方法read,如下: public in read() throws IOException public in read(byte b) throws IOException,例,标准输出流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。 System.out作为打印流类PrintStream的对象out实现标准输出。其中有print和println两个方法,如下: public void print(long l) public void println(),9.1 流 标准输出流,例P219,9.1 流 标准错误输出流,Sy
4、stem.err和System.out相同,以PrintStream类的对象err实现标准错误输出。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。,例P219,9.2 文件类的使用,WF蛋糕店的蛋糕记录存在文本文件中,进行文件的读取和写入前需要知道该文件是否存在,在必要时需要更改文件名或删除文件等各种文件操作。,9.2 文件类的使用 File类,File类提供了一些方法来操作文件和获得文件的信息。 创建File对象的构造方法有3个,如下: File(String filename); File(String directoryPath, String filename);
5、 File(String dir, String filename);,判断文件是否存在的应用:String FILEDBNAME = SaleData.txt;/创建SaleData.txt对象File fileDB = new File(FILEDBNAME); if(!fileDB.exists()/exists()方法判断文件SaleData.txt是否存在 ,9.2 文件类的使用 获取指定文件的描述信息,9.2 文件类的使用 创建新文件,把信息存入文件时,判断文件是否存在后,如果不存在该文件则需创建一个文件。,9.2 文件类的使用 创建新文件,创建新文件,应用代码如下:if(!fil
6、eDB.exists()tryfileDB.createNewFile(); /创建新文件catch(Exception ex) ex.printStackTrace();,9.2 文件类的使用 文件改名和文件删除,boolean renameTo(File dest)可用于重命名文件;boolean delete()可用于删除文件对象;,例,例,9.2 文件类的使用 获取文件目录下的文件,目录操作方法,如下:boolean mkdir() 创建指定目录String list() 用字符串形式返回目录下的所有文件名File listFiles() 用FILE对象形式返回目录下的所有文件,。,9
7、.3 读取文件,WF蛋糕店的销售记录都是以文本的方式存储,而且是一行一行的记录,每行的字段以半角逗号隔开,在读取时需一次读取文本的一行,并将其以对象的形式保存在内存中。,9.3 读取文件 读取文件并显示,创建BufferedReader对象读取销售记录文件,应用如下: public static final String FILEDBNAME = SaleData.txt; FileReader fr = new FileReader(FileInfo.FILEDBNAME); BufferedReader br = new BufferedReader(fr);,9.3 读取文件 读取文件并
8、显示,while(line != null) /循环读取文本文件if(line.length() = 0) break; maxSaleIdCounter+; /将一行变成一个记录对象 SaleRecord obj = this.convertStrToObj(line); FileInfo.saleList.add(obj); line = br.readLine(); /读取一行记录,9.3 读取文件 字节流文件的读取,FileInputStream类是从InputStream类中派生出来的输入类。 FileInputStream类的构造方法如下: FileInputStream(Stri
9、ng name) FileInputStream(File file),9.3读取文件 字节流文件的读取,read方法给程序提供一个从输入流中读取数据的基本方法。read方法的格式如下: int read(); int read(byte b); int read(byte b, int off, int len); close()方法被用来在文件的最后一个字节被读取后关闭该文件流。,9.3 读取文件 字符流文件的读取,与FileInputStream类等价的读取器是FileReader类,它是Reader类的子类。FileReader类则采用字符流读取文件。 字符输入流是通过使用构造方法:
10、FileReader(Sting filename),9.3读取文件 字符流文件的读取,创建FileReader类对象后,可以调用如下方法来从文件中读取字符: read() 以整数的形式返回流中下一个字符 read(char,int,int) 将字符读入特定的字符数组中,它具有指定的起始点和读取字符数量。,9.3读取文件 读取字符行记录,逐行读取文件可以将FileReader类和BufferedReader类结合起来使用。将FileReader流对象外接到BufferedReader对象上,从BufferedReader流上一行一行读取字符。 BufferedReader流可以使用readLi
11、ne()方法来读取一行文本,也可以使用在FileReader中介绍的read方法进行读取。,9.4 写入文件 字节流文件的写入,FileOutputStream类提供了基本的文件写入能力,从OutputStream类继承来。一个文件输出流可以使用FileOutputStream自己的构造方法来创建。 其构造方法如下: FileOutputStream (String name) FileOutputStream (File file),9.4写入文件 字节流文件的写入,文件输出流可以使用write方法把字节发送给输出流,write方法的格式如下: public void write(int b
12、) public void write(byte b) public void write(byte b,int off, in len),9.4写入文件 字符流文件的写入,FileWriter被用来将一个字符流写入文件中。它是OutputStreamWriter的子类,它可以将Unicode代码转换成字节。FileWriter也有两个和FileReader类似的构造方法,如下: FileWriter(String b) FileWriter(String b, boolean f),9.4写入文件 字符流文件的写入,FileWriter用来将数据写入到流中的方法有: write(int) write(char,int,int) write(String,int,int),小结,通过本章的学习,我们学到了流的概念和操作,并了解到了文件的基本操作。在学习文件类使用后,我们又学习了如何读取和写入文件。,