IO(Input Output)流
● IO流用来处理设备之间的数据传输
● Java对数据的操作是通过流的方式
● Java用于操作流的对象都在IO包中
● 流按操作数据分为两种:字节流与字符流
● 流按流向分为:输入流,输出流
IO流常用基类
● 字节流的抽象基类:
InputStream,OutputStream
● 字符流的抽象基类:
Reader,Writer
● 注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream
如:Reader的子类FileReader
IO程序的书写
● 导入IO包中的类
● 进行IO异常的处理
● 在finally中对流进行关闭
字符流——创建文件
● 创建流对象,建立数据存放文件
FileWriter fw = new FileWriter("Test.txt");
● 调用流对象的写入方法,将数据写入流
fw.write("text");
● 关闭流资源,并将流中的数据清空到文件中
fw.close();
完整代码:
FileWriter fw = null;
try {
fw = new FileWriter("Test.txt");
fw.write("text");
} catch (IOException e) {
System.out.println(e.toString());
}finally{
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
字符流——读取文件
● 建立一个流对象,将已存在的一个文件加载进流
FileReader fr = new FileReader("Test.txt");
● 创建一个临时存放数据的数组
char[] ch = new char[1024];
● 调用流对象的读取方法将流中的数据读入到数组中
fr.read(ch);
完整代码:
FileReader fr = null;
try {
fr = new FileReader("d:\\test.txt");
char[] buf = new char[1024];
int len = 0;
while((len=fr.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
} catch (IOException e) {
System.out.println("read-Exception:"+e.toString());
}finally{
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
System.out.println("read-Exception:"+e.toString());
}
}
}
注意:
● 定义文件路径时,可以用“/”或者“\\”。
● 在创建一个文件时,如果目录下有同名文件将被覆盖。
● 在读取文件时,必须保证该文件已存在,否则出异常。
字符流的缓冲区
● 缓冲区的出现提高了对数据的读写效率。
● 对应类
BufferedWriter
BufferedReader
● 缓冲区要结合流才可以使用。
● 在流的基础上对流的功能进行了增强。
字节流
● 基本操作与字符流相同
● 但它不仅可以操作字符,还可以操作其他媒体文件
字节流的缓冲区
● 同样是提高了字节流的读写效率
转换流
● InputStreamReader,OutputStreamWriter
● 转换流的由来
字符流与字节流之间的桥梁
方便了字符流与字节流之间的操作
● 转换流的应用
字节流中的数据都是字符时,转换成字符流操作更高校
标准输入输出流
● System类中的字段:in,out
● 它们各代表了系统标准的输入和输出设备
● 默认输入设备是键盘,输出设备是显示器
● System.in的类型是InputStream
● System.out的类型是PrintStream,是OutputStream的子类FilterOutputStream的子类
File类
● 用来将文件或者文件夹封装成对象
● 方便对文件与文件夹的属性信息进行操作
● File对象可以作为参数传递给流的构造函数
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
/**
* A 检查当前文件夹中是否包含目录 demo
* B 如果没有demo,就创建文件夹demo
* C 在demo中创建文件 test.txt
* D 显示demo 文件夹的内容
* E 显示test.txt 的绝对路径名
* F 显示test.txt 的文件长度和创建时间
*/
public class FileDemo {
public static void main(String[] args) throws IOException {
File dir = new File(".");
//显示路径
System.out.println(dir.getCanonicalPath());
//A
File demo = new File(dir, "demo");//不是在磁盘上创建
if(!demo.exists()){
//B
demo.mkdir();
}
//C
File test = new File(demo, "test.txt");
if(!test.exists()){
//空文件,长度为0
test.createNewFile();//touch
}
//D 显示目录内容
File[] files = demo.listFiles();//ls demo
System.out.println(Arrays.toString(files));
//E
System.out.println(test.getCanonicalPath());
//F
System.out.println(test.length());
System.out.println(new Date(test.lastModified()));
//删除文件和目录
test.delete();//rm
demo.delete();
}
}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------