IO编程总结
1.什么是输入输出?如何使用输入输出?
答:1).是指程序与外部设备或其它计算机进行交互的操作。
2)把数据读到内存中,称为输入,即input,进行数据的read操作。
3).从内存往外部设备写数据,称为输出,即output,进行数据的write操作。
4).几乎所有的程序都具有输入与输出操作:
*如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等。
*通过输入和输出操作可以从外界接收信息,或者是把信息传递给外界。
5).Java把这些输入与输出操作用流来实现,通过统一的接口来表示,从而使程序设计更为简单。
6).入还是出是相对于内存来说的。
2.什么是File类?如何使用File类?
答:1).File类是java.io包中很重要的一个类;
2).File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录;
3).File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等;
4).File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作。
3.File类的构造方法有几种重载方式?如何使用File类的构造方法的重载方式?
答:有四种
例:
方法原型 |
说明 |
File(String pathname) |
指定文件(或目录)名和路径创建文件对象 |
1).//在当前目录下创建一个与aaa.txt文件名相关联的文件对象;
File f1 = new File(“aaa.txt”);
2).//指明详细的路径以及文件名,请注意双斜线或用反斜杠;
File f2 = new File(“D:\\Java\\Hello.java”);
3).//指明详细的路径以及目录名,请注意双斜线;
File f3 = new File(“D:\\Java”);
4.File类有哪些常用的方法?
方法原型 |
说明 |
boolean exists() |
判断文件是否存在,存在返回true,否则返回false。 |
Boolean isFile() |
判断是否为文件,是文件返回true,否则返回false。 |
Boolean isDictionary() |
判断是否为目录,是目录返回true,否则返回false。 |
String getName() |
获得文件的名称 |
String getAbsolutePath() |
获得文件的绝对路径 |
Long length() |
获得文件的长度(字节数) |
Boolean creatNewFile() throws IOException |
创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉 |
Boolean delete() |
删除文件,删除成功返回ture,否则返回false |
5.如何使用文件名过滤器?可以使用哪些方法进行文件名过滤?
答:1).文件名过滤器接口:interface FilenameFilter
*常用于过滤不符合文件规格的文件名
2).需重写accept方法自定义过滤规则,如下:
boolean accept(File dir,String name)
*dir:表示文件的当前目录。
*name:表示当前目录的子目录或者文件的名字。
3).File类中提供了使用文件名过滤器遍历目录的方法:
*String[] list(FilenameFilter filter)
//把满足指定过滤条件的文件和目录,返回到String数组中。
*File[] listFiles(FilenameFilter filter)
//把满足指定过滤条件的文件和目录,返回到File数组中。
6.如何使用文件过滤器?可以使用哪些方法进行文件过滤?
答:1).文件过滤器接口:interface FileFilter
*常用于检测文件是否存在
2).需重写accept方法自定义过滤规则,如下:
boolean accept(File pathName)
*pathName:表示当前目录的子目录或者文件的名字。
3).File类中提供了使用文件过滤器遍历目录的方法:
File[] listFiles(FilenameFilter filter)
*把满足指定过滤条件的文件和目录,返回到File数组中。
7.什么是输入流?什么是输出流?
答:流按着数据的传输方向分为:
1).输入流:往内存中读叫输入流。
*所有输入流都是InputStream类或者Reader类的子类。
*类名以InputStream结尾的类都是InputStream的子类。
*类名以Reader结尾的类都是Reader类的子类。
2).输出流:从内存中往外写叫输出流。
*所有输出流都是OutputStream类或者Writer类的子类。
*类名以OutputStream结尾的类都是OutputStream的子类。
*类名以Writer结尾的类都是Writer类的子类。
8.如何区分字节流与字符流?
答:字节流与字符流是从数据流的编码格式上划分的。
9.什么是字节流?字节流中有哪些常用类?
答:1).InputStream和OutputStream的子类都是字节流;
*可以读写二进制文件,主要处理音频、图片、字节流,处理单元为1个字节。
2).字节输入流 FileInputStream
字节输出流 FileOutputStream
10.什么是字符流?字符流中有哪些常用类?
答:1).Reader和Writer的子类都是字符流;
*主要处理字符或字符串,字符流处理单元为2个字节。
*字节流将读取到的字节数据,去指定的编码表中获取对应文字。
2).字符输入流 FileReader
字符输出流 FileWriter
11.如何区分节点流与处理流?
答:节点流与处理流是依据封装类型划分的。
12.什么是节点流?节点流中有哪些常用类?
答:1).如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。
2).*字节输入流 FileInputStream
*字节输入流 FileOutputStream
*字符输入流 FileReader
*字符输出流 FileWriter
13.什么是处理流?为什么要使用处理流?处理流中有哪些常用类?
1).如果流封装的是其他流对象,称为处理流。
2).处理流提供了缓冲功能,提高读写效率。
3).*缓冲字节输出流 BufferedOutputStream
*缓冲字节输入流 BufferedInputStream
*缓冲字符输入流 BufferedReader
*缓冲字符输出流 BufferedWriter
14.处理流具有哪些特点?
答:1).字符缓冲输入流提供了读取一行的方法readLine()。
2).字符缓冲输入流提供了写入一个空行的方法newLine()。
3).字符缓冲输出流,吧写入的数据先写入到内存,再使用flush()方法将内存数据刷到硬盘上。
*注意:在使用字符缓冲输出流时,一定先flush(),然后再close(),避免数据的丢失。
15.为什么要使用转换流(字节流与字符流的转换)?
答:1).字符流与字节流之间的桥梁。
2).方便了字符流与字节流之间的操作。
16.如何使用转换流(字节流与字符流的转换)?
答:字节流中的数据都是字符时,转成字符流操作更高效。
17.如何通过桥梁进行字节流转换成字符流?
答:1). InputStreamReader
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,String charsetName)
2).OutputStreamWriter
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, String charsetName)
注意:它读入字节,并根据指定的编码方式,将之转换为字符流。使用的编码方式可能由名称指定,或平台可接受的缺省编码方式。
18.如何使用图片的方式解释字节流转换为字符流?
答:
19.什么是Scanner类?如何使用Scanner类?举例说明
答:1).Scanner类位于Java.util包中,不在java.io包中,不属于IO流,Scanner是一个工具类,主要目标是简化文本的扫描,最常使用此类获取控制台输入。
2).Scanner获取控制台输入的步骤:
*使用控制台输入创建Scanner对象
Scanner scanner = new Scanner(System.in);
**调用Scanner中的nextXXX方法,获得需要的数据类型
例如:next、nextLine、nextInt、nextByte等
20.什么是IO流?分别继承哪几种抽象流类型?用图示说明
答:*JavaSE所提供的所有流位于java.io内,分别继承下列四种抽象流类型:
1) 字节输入流:
*灰色:处理流 无色:节点流
2).字节输出流:
*灰色:处理流 无色:节点流
3).字符输入流:
*灰色:处理流 无色:节点流
4). 字符输出流:
*灰色:处理流 无色:节点流
21.在进行流操作时,需要遵守那些基本规律?
答:1).明确源和目的:
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer
2).操作的数据是否是纯文本:
是:字符流。
不是:字节流。
3).明确具体设备来进行区分:
源设备:内存,硬盘,键盘。
目的设备:内存,硬盘,控制台。
4).是否有其它额外功能:
是否高效:是(加缓冲区)
否(不加缓冲区)
22.如何进行流操作?需要注意哪些事项?
答:*需求:复制一个文本文件
1).明确源和目的:
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer
2).操作的数据是否是纯文本:
是。
源:Reader
目的:Writer
3).明确具体设备来进行区分:
源设备:硬盘 File
目的设备:硬盘 File
4).是否有其它额外功能:
是否高效:是(加缓冲区)