Java程序员面试宝典——第7章 输入输出流.pdf
《Java程序员面试宝典——第7章 输入输出流.pdf》由会员分享,可在线阅读,更多相关《Java程序员面试宝典——第7章 输入输出流.pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第 7 章 输入/输出流 125 第 7 章 输入/输出流 输入与输出是任何计算机程序都需要涉及的问题,Java 程序也不例外。Java 是伴随着网络的发展而发展的,而 I/O(输入与输出)正是网络通信的基础,Java 的 I/O 设计是很合理的,使用起来也非常方便。关于 IO 的 API 是相当的多,不可能全部都记住,也不可能全都会用,关键在于理解 java.io 包下的 API 的几个核心概念。例如,流、字节流、字符流、缓存等,大多数的类或接口都是围着这些概念来进行的。本章将讲解包含关于 Java 的 I/O的一些常见面试题,并且分析这些题目和知识点,帮助读者梳理这些方面的知识。7.1
2、File 类 磁盘是数据的主要存储目的地。磁盘存储数据最基本的单位就是一个文件(File)。Java提供了关于文件的各种 API,包括:File、FileInputStream、FileOutputString、RandomAccessFile等,对这些接口和类的熟练使用是许多开发所必须的。面试题 071 目录和文件操作 目录和文件是磁盘树形结构中最基本的组成单元,Java 用 File 类来统一表示它们,也是通过它来完成目录和文件的创建、删除、查询等操作。本例在回答该问题的同时,详细地讲解关于 File 类的使用方法。【出现频率】【关键考点】File 类的概念;如何用 File 类来操作目录
3、和文件。【考题分析】Java 对待目录和文件都统一使用 File 来表示,并且在创建 File 对象的时候,并不检查该目录或文件是否存在,只作为一种代表,开发者在需要时使用 isDirectory()或 isFile()方法进行判断。以下代码为一个操作目录和文件示例程序。import java.io.File;import java.io.IOException;public class FileDirTest public static void main(String args)File file1=new File(D:/test/a.txt);/创建文件对象 file1 if(!fil
4、e1.exists()/判断它是否已经存在 try file1.createNewFile();/创建新文件 第 3 篇 Java 高级特性 126 catch(IOException e)e.printStackTrace();File dir=new File(D:/test);/创建 dir 目录对象 if(dir.isDirectory()/判断它是否为目录 String files=dir.list();/调用 list()方法获取它的所有文件 for(String fileName:files)/遍历文件 /用目录和文件名生成 File 对象 File f=new File(dir
5、.getPath()+File.separator+fileName);/进行分类打印 if(f.isFile()System.out.println(file:+f.getName();else if(f.isDirectory()System.out.println(dir:+f.getName();本示例程序的功能很简单,首先检查“d:/test”文件夹是否存在文件 a.txt,若不存在则创建一个新文件。然后,将该文件夹下的所有文件和目录遍历以后,分类打印出来。其中,以下是一些 File 类经常会使用的方法。构造方法:一般可以通过传递字符串形式的文件路径的方式来创建 File 对象,其中
6、 File 并不会检查该目录或文件是否已经存在;isDirectory()和 isFile()方法:用于检查该 File 对象所代表的是目录还是普通文件;createNewFile()方法:创建新文件,采用 File 对象所存储的路径和文件名进行创建;list()方法:用于目录,得到目录下所有的文件名,类型为字符串数组;getName()方法:得到文件名,不包含它的路径;delete()方法:删除文件。说明:Java 的 I/O 操作一般都需要进行异常检查,大多数时候均是 IOException。【答案】Java 提供了 java.io.File 类对目录和文件进行操作。主要的操作方法包括:路
7、径字符串构造方法、isDirectory、isFile、createNewFile、list、getName、delete。面试题 072 写一个复制文件的程序 本题目主要考察的是面试者对 FileInputStream 和 OutputStream 的使用,本质上也就是先从一个文件读出数据,然后再往另外一个文件写入数据。本例在回答该问题的同时,详细地讲解关于 File 输入/输出流的使用方法。【出现频率】【关键考点】InputStream 的使用方法;OutputStream 的使用方法。第 7 章 输入/输出流 127【考题分析】Java 的所有数据读/写,都是通过流进行的,因此要完成一个
8、复制文件的程序,就得有两个流对象,一个是输入流,另一个是输出流。其中,FileInputStream 类中最主要是 read()方法,通过它把数据从流中读到内存里来。read()方法的参数为一个 byte 数组,有一点像缓存,也就是把数据线读到内存中暂存,然后再进行相关操作。而 FileOutputStream 是用于打开一个输出流的,这里就需要把 byte 数组中的数据写入到输入流中。如果每次读出的数据等于 byte 数组的大小,就可以直接把数据写出;如果数据不足 byte 数组那么大,则需要控制写出数据的长度,也就是 read()方法的返回值。根据以上的思路,该程序具体如下所示:impor
9、t java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileCopy public static void main(String args)throws IOException /生成输入文件的输入流对象 FileInputStream fin=new FileInputStream(d:/test/a.txt);/生成输出文件的输出流对象 FileOutputStream fout=new FileOutputStream(d:/test/b.tx
10、t);byte buff=new byte256;/定义一个永固暂存数据的 byte 数组 int len=0;/每次读取数据的长度 /循环读取到 buff 中,如果文件到底,则读取数据的长度小于 0 while(len=fin.read(buff)0)fout.write(buff,0,len);/把数据一次写进输出文件中 fin.close();/关闭输入流 fout.close();/关闭输出流 以上的文件路径是用硬代码写的,而实际的程序应该是从命令提示窗口中接收文件路径参数,也就是命令行参数。读者可以把以上的示例代码进行修改,用 main()方法的 args参数来获取输入和输出文件名。
11、注意:程序的最后两行代码是关闭输入和输出流。其实,关闭流是一种非常重要的编程习惯。如果不关闭流,就会造成资源的浪费,从而影响程序的性能,还有可能会让文件锁住,其他程序无法操作它。【答案】本题目的设计思路可以有以下几个步骤。(1)用被复制文件的路径创建一个 InputStream 对象。(2)用复制文件的新路径创建一个 OutputStream 对象。(3)用 read()方法循环把数据读出到一个 byte 数组中,直到读出数据的长度小于 0。(4)用 write()方法把 byte 数组中的字节写入输出流。(5)最后关闭输入流和输出流。第 3 篇 Java 高级特性 128 面试题 073 如
12、何使用随机存取文件 RandomAccessFile 类 InputStream 和 OutputStream 都只能单方面的读和写文件的内容,如果有随机的读取和写入文件内容的需要那又该怎么办呢?Java 为开发者提供了一个 RandomAccessFile 类,它就是专门用来随机存取文件内容的。通过回答本例问题,可以了解到 RandomAccessFile 类的常见用法。【出现频率】【关键考点】RandomAccessFile 的用法【考题分析】RandomAccessFile 操作文件内容的时候,就好像操作一块内存区域一样。把字节用下标数字来进行定位,通过调用 RandomAccessFi
13、le 的 API 方法,把指针的指向进行移动,达到随机存取数据的目的,主要的方法如下:length()。得到文件内容的字节长度。seek()。设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。read()和 write()。读取和写入字节数据。以下是将文件中所有字母 a 都换成字母的 c 的示例程序。public class RanAccFileTest public static void main(String args)throws IOException /创建随机读取文件对象 RandomAccessFile file=new RandomAccessFile
14、(d:/test/a.txt,rw);/遍历 file 的字节数据 for(int i=0;i 0)fout.write(buff,0,len);/把数据一次写进输出文件中 fin.close();/关闭输入流 fout.close();/关闭输出流 第 3 篇 Java 高级特性 130 read()和 write()方法,是字节流的主要使用方法,它们的处理目标通常是一个 byte 数组,也就是把这些 byte 写入或读出。byte 是计算机的基本单位,所以字节流可以应付几乎所有的流的处理。只不过,在处理具体数据格式的时候,效率没有具体的实现类高,如字符格式、对象格式等。但是,字节流式一切流
15、的基础,其他的高级流类型都是基于字节流模型的。【答案】字节流处理的是计算机最基本的单位 byte,它可以处理任何数据格式的数据。主要的操作对象就是 byte 数组,通过 read()和 write()方法把 byte 数组中的数据写入或读出。面试题 075 字符流的处理方式 针对文本文件,Java 提出了字符流的概念,使用字符流来写入和读出字符数据。无需再使用字节流进行包装,Java 已经为开发者提供了现成的字符流处理的接口和类。在现 实的开发中,字符数据是最常用的数据格式,如何针对不同的字符需要进行类型的选择 也是开发中需要具备的技能。通过回答本例问题,可以了解到字符流的相关概念和使用 方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java程序员面试宝典第7章 输入输出流 Java 程序员 面试 宝典 输入输出
限制150内