最近看了一些关于输入输出流的视频,对于其中的知识点做了一些总结。
Java IO包
1 File 类:Java程序中此类的一个对应硬盘中的一个文件(或者文件目录)或网络中的一个资源。
File file = new File(绝对路径或者相对路径);
>File 既可以表示一个文件又可以表示一个文件目录。
>File类对象是与平台无关的。
>File类对于文件或者文件目录只能进行新建、删除、看下上层目录等操作,如果涉及到访问文件的内容,File是无能为力的,只能使用
IO流下提供的相应输入输出流来实现。
>常把File类的对象作为形参传递给相应的输入输出流的构造器中!
2 IO流的结构(精选部分)
抽象基类 节点流(文本流) 缓冲流(处理流中的一种)
InputStream FileInputStream(int read(byte[] b)) bufferedInputStream (int read(byte[] b))
OutputStream FileOutputStream(void write(b,0,len)) bufferedOutputStream(flush())(void write(b,0,len))
Reader FileReader(int read(char [] c)) bufferedReader(readline())(int read(char [] c))或者(String readLine())
Writer FileWriter(void write(c,0.len)) bufferedWriter(flush())(void write(c,0.len))或者(void write(String str))
注:1)从硬盘中读入一个文件,文件必须是存在的。若不存在,则会报FileNotFoundException的异常。
2) 从程序中输出内容到硬盘,若文件存在,那么覆盖文件原先的内容,如果不存在,那么创建文件。
3)真正开发时,使用缓冲流来代替节点流(效率高)。
4)最后要关闭相应的流,先关闭输出流,再关闭输入流,此操作放在finally里。
3 IO流的划分
1)(占位于程序的角度)按照流的流向不同:输入流、输出流
2)按照流中的数据单位的不同:字节流、字符流(纯文本文件建议使用字符流,非纯文本只能使用字节流)
3)按照流的角色的不同:节点流、处理流(节点流直接作用于文件上(4个),除此之外全是处理流)
5、其他的流
1)转换流:实现字节流与字符流之间的转换。
inputSteamReader输入时实现字节流到字符流的转换,提高操作的效率(前提数据是文本文件)。
OutputStreamWriter 输出时实现字符流到字节流的转换(前提数据是文本文件)。
例子:
键盘输入字符,遇到e或者exit时,退出,其他情况下,小写转换成大写。
@Test
public void test(){
InputStream is = System.in;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String str;
String str1;
try {
while(true){
System.out.println("请输入字符:");
str = br.readLine();
if(str.equalsIgnoreCase("e")||str.equalsIgnoreCase("exit")){
break;
}
str1 = str.toUpperCase();
System.out.println(str1);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2)标准的输入流和输出流
System.in:从键盘输入数据
System.out:从显示器输出数据
3)还有打印流、数据流、对象流、随机存取文件流