Java语言的输入输出
java语言的输入输出功能必须借助于输入输出包java.io来实现。 输入流:将数据从外设或外存(如键盘、鼠标、文件等)传递到应用程序的流称为输入流 输出流:将数据从应用程序传递到外设或外存(如屏幕、打印机、文件等)的流称为输出流。 注意:对于输入流只能从其读取数据而不能向其写入数据,同样对于输出流只能向其写入数据而不能从其读取数据。 输入输出的最大特点是数据的获取和发送是沿着数据序列顺序进行,每一个数据都必须等待排在它前面的数据读入或送出之后才能被读写,每次读写操作处理的都是序列中剩余的未读写数据中的第一个,而不能随意选择输入输出位置。 缓冲流即为一个流配有一个缓冲区,这个缓冲区就是专门用于传送数据的一块内存。 缓冲流作用:提高了数据的传输效率。 缓冲流的作用过程:当向一个缓冲流写入数据时,系统将数据发送到缓冲区,而不是直接发送到外部设备。缓冲区自动记录数据,当缓冲区满时,系统将数据全部发送到相应的外部设备。当从一个缓冲流读取数据时,系统实际是从缓冲区中读取数据。当缓冲区空时,系统就会从相关的外部设备自动读取数据,并读取尽可能多的数据填满缓冲区。
使用InputStream和OutputStream流类
InputStream和OutputStream流类时Java语言中用来处理以位(bit)为单位的流,它除了可用来处理二进制文件的数据之外,也可用来处理文本文件。 注意:流中的方法都声明抛出异常,所以程序中调用流方法时必须处理异常,否则编译不能通过。 在使用I/O流进行输入输出操作时,可以使用try-with-resources语句处理异常。 对于OutputStream中的flush()方法的应用:当在某些情况下,缓冲区中的数据不满时就需要将它们写到外设上,此时应使用flush()方法强制清空缓冲区并执行外设的写操作。 文件输入输出流:FileOutputStream和FileIntputStream分别是InputStream和OutputStream的直接子类,这两个子类主要是负责完成对本地磁盘文件的顺序输入与输出操作的流。 注意:在生成FileOutputStream类时,若指定的文件不存在,则创建一个新的文件,若已存在,则清楚原文件的内容。 每个File类对象表示一个磁盘文件或文件夹,其对象属性中包含了文件或文件夹的相关信息,如名称、长度、所含文件个数等,调用它的方法可以获取文件或文件夹的有关信息。 注意:执行read()和write()方法时可能因I/O错误,系统抛出IOException异常,因此创建输入输出流并调用构造方法语句以及执行读写操作的语句应该被包含在try语句块中,并有相应的catch语句块来处理可能产生的异常。但也可以使用自动关闭资源语句try-with-resources处理异常。
使用Reader和Writer流类
Reader和Write类是用来处理"字符流"的,即文本文件。 注意:在平时的使用时,Java把每个汉字和英文字母均作为一个字符对待,但把enter键生成的回车换行符"\r\n"作为两个字符。 缓冲字符输入流类BufferedReader继承自Reader类,BufferedReader类是用来读取缓冲区里的数据。 注意:使用BufferedWriter时,缓冲区内的数据最后必须要用flush()方法将缓冲区清空,也就是将缓冲区中的数据全部写到文件内。 BufferWriter类中的newLine()方法可以写入回车换行符,而且与操作系统无关,使用它可确保程序的跨平台运行。
文件的管理
Java语言不仅支持文件管理,还支持文件夹管理。 每个File类对象表示一个磁盘文件或文件夹,其对象属性中包含了文件或文件夹的相关信息。 使用File类的构造方法时,要注意以下几点: (1)path参数可以是绝对路径,如“d:\java|myfile\sample.java”,也可以是相对路径,如"myfile\sample.java",path参数还可以是磁盘上的某个文件夹。 (2)由于不同的操作系统使用的文件夹分隔符不同,如Windows操作系统使用反斜线"",UNIS操作系统使用正斜线"/".为了使Java程序能在不同的平台上运行,可以利用File类的一个静态变量File.sepatator。该属性保存了当前系统规定的文件夹分隔符,使用它可以组合成在不同操作系统都通用的路径。例如:“d:”+File.separator+“java”+File.separator+“myfile”
|