其实本来该学网络编程的,但是感觉好像网络编程也算是IO的一种扩展,只不过是本地计算机内部的IO扩展到更大范围内的IO操作,而IO操作前段时间大致的学习了一下,但是不算系统,只是在博客上大致的学习了主要梗概。今天再来继续深入一点的学习一下,希望更加深的了解IO,更好的为网络编程打基础。
关于IO这几篇说的主要部分有以下几点:
- File类的使用
- IO原理和流的分类
- 文件流(FileInputStream/FileOutputStream和FileReader/FileWriter)
- 缓冲流(BufferedInputStream/BufferedOutputStream和Buffered/BufferedWriter)
这一篇先来个大致的了解。主要有File类,流的基本划分,和FileInputStream和FileOutputStream等内容。
File类:
这里就说明两点:第一:File可以是文件,也可以是目录。
第二:创建File可以用绝对路径,也可以相对路径。
例如:
<span style="font-size:14px;"> File f1=new File("D:\\Work\\workspace\\testtemp\\hello.txt");
File f2=new File("kitty.txt");</span>
对于File的操作,大致就是创建和删除,重命名等操作,都不涉及到内容,大致的方法如下图:
流的划分:
根据方向:输入流和输出流
根据单位:字节流和字符流(专门处理文本文件)
根据角色:节点流(直接作用于文件)和处理流
FileInputStream和FileOutputStream:
这里包括的步骤是:
- 创建File对象
- 创建FileInputStream(FileOutputStream)对象
- 进行写(读)操作
- 关闭流
<span style="font-size:14px;"> public void CopyFile(String src,String dest)
{
//该函数是字节流的处理方式,所以可以是任何格式的文件。
File f1=new File(src);
File f2=new File(dest);
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream(f1);//输入流
fos=new FileOutputStream(f2);//输出流
byte[] b=new byte[1000];//根据文件大小适当调节
int len;//判断读取是否结束-1时表示读取结束
while((len=fis.read(b))!=-1)
{
fos.write(b, 0, len);//这里一定注意不是fos.write(b)或者fos.write(b,0,b.length).
}
} catch (IOException e) {
e.printStackTrace();
}
finally
{ //一定记得关闭流操作
if(fos!=null)
{
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fis!=null)
{
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}</span>
这里主要提到的一点是 while((len=fis.read(b))!=-1)fos.write(b, 0, len);这里最后一个参数,一定是len,不能缺省的fos.write(b),也不可是b.length。FileReader和FileWriter:
这里跟FileOutputStream和FileInputStream基本上就是单位的差别,这个只能处理字符的文件,不能处理其他类型的文件,这里也是一个文件拷贝的函数来比较:
<span style="font-size:14px;">public void CopyFileString(String src,String desc)
{
File f1=new File(src);
File f2=new File(desc);
FileReader fr=null;
FileWriter fw=null;
try {
fr=new FileReader(f1);
fw=new FileWriter(f2);
char[] c=new char[20];
int len;
while((len=fr.read(c))!=-1)
{
fw.write(c, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
finally
{
if(fw!=null)
{
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fr!=null)
{
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}</span>