黑马程序员技术交流社区
标题:
IO总结
[打印本页]
作者:
朝花夕拾
时间:
2013-1-10 20:40
标题:
IO总结
1:IO概述:
(1)就是指程序和设备进行数据交换。
设备有很多种,所有,io流对象也有很多。
java提供了一个包java.io包下的类供我们使用。
(2)IO流的分类
A:数据的流向
程序 -- 设备 输出流
设备 -- 程序 输入流
B:数据的类型
字节流
字符流 为了方便对文本的操作。
用记事本可以打开并能够读懂的你就可以用字符流。
字节输入流
字节输出流
字符输入流
字符输出流
(3)java中对数据的常见操作就是存储在硬盘的文件,为了方便我们对文件的操作,
java就提供了一个类供我们使用。File类。
(4)学习File类
A:构造方法
**File file = new File("d:\\a.txt");
**File file = new File("d:\\","a.txt");
**File file = new File("d:\\");
File file2 = new File(file,"a.txt");
B:功能方法
创建功能:
boolean createNewFile()
boolean mkdir()
boolean mkdirs()
删除功能:
boolean delete()
判断功能:
boolean exists():文件或者文件夹是否存在
boolean isFile():是否是文件
boolean isDirectory():是否是目录
获取功能:
String getAbsolutePath:获取绝对路径
String getName:获取文件名称
高级获取功能:
String[] list() 返回的是指定目录下的所有文件和文件夹名称的数组
File[] listFiles() 返回的是指定目录下的所有文件和文件夹对象的数组
带文件名称过滤器的使用:
String[] list(FilenameFilter filter)
File[] listFiles(FilenameFilter filter)
案例:
获取指定目录下以java结尾的文件
File file = new File("指定目录");
String[] strArray = file.list(new FilenameFilter(){
public boolean accept(File dir,String name)
{
return new File(dir,name).isFile() && name.endsWith(".java");
}
});
for(String str : strArray)
{
System.out.println(str);
}
(5)递归
A:在方法定义内使用方法本身的现象就是递归。
注意事项:
递归一定要有出口
递归的次数不能过多
B:案例:
递归求斐波纳契数列的第二十项的值
// 递归求斐波纳契数列第几项目的值
public int re(int n) {
if (n == 1||n==2) {
return 1;
} else if(n==3){
return 2;
}else{
return re(n-1) + re(n-2)+re(n-3);
}
}
}
2:IO的分类及应用
(1)IO流的四个基类
A:字节流
字节输入流
InputStream
字节输出流
OutputStream
B:字符流
字符输入流
Reader
字符输出流
Writer
这四个都是抽象类。
输入流:读取数据
输出流:写入数据
(2)文件的写入数据
对文本文件写入数据:
Writer -- FileWriter
FileWriter的构造方法:
FileWriter(File file)
FileWriter(String name)
FileWriter(File file,boolean append)
FileWriter(String name,boolean append)
字符输出流写入数据的基本步骤:
A:创建字符输出流对象
B:调用该对象的write方法
C:释放资源
代码体现:
FileWriter fw = new FileWriter("fw.txt");
fw.write("hello,io,我来了");
fw.flush();
fw.close();
FileWriter fw = new FileWriter("fw.txt");做了:
创建了字符输出流对象
把字符输出流对象指向了要写入数据的文件对象
调用系统资源,创建文件对象(不管文件是否存在,都会创建)
flush和close的区别:
flush刷新缓冲区,close刷新缓冲区,并释放资源。
flush刷新缓冲区后,流对象还可以继续使用,close释放资源后,
流对象不能被使用。
流操作一定要调用close方法的原因:
创建字符输出流对象的时候:不仅仅是在堆内存创建了java对象,
并且使用了系统资源创建了文件对象,当程序结束后,java的对象
会自动变成垃圾,被回收。 而系统的资源就一直在被使用,所以,
我们需要调用close方法,就是去通知系统,你创建文件时候使用的
资源可以释放了。
两个小知识点:
如何追加数据,而不是覆盖数据:
使用带两个参数的构造方法,第二个参数表示是否是追加数据,写为true即可。
数据追加或者写入的时候,如何换行:
换行在不同的操作系统中,对应的字符不一样:
windows: \r\n
linux: \n
有些软件,对不同的换行都是识别的,比如:editplus
但是,windows自带的记事本只能识别\r\n。
加入异常处理:
public class FileReaderTest4 {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("fx.txt");
fw.write("hello,我是张雄");
fw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
作者:
李奇
时间:
2013-1-10 20:56
很有用 感谢分享
作者:
高境
时间:
2013-1-10 21:45
{:soso_e179:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2