流的使用我用3个步骤来确定具体使用哪个流
1、明确源和目的
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2、操作的数据是否是纯文本(在明确源和目的的情况下)
是:字符流
不是:字节流
3、当体系明确后,在明确要使用哪个具体对象。
通过设备来进行区分:
源设备:内存、硬盘、键盘
目的设备:内存、硬盘、控制台
例子:将一个文本文件中数据存储到另一个文件中。复制文件。
源:因为是源,所以使用读取流。 InputStream Reader
是不是操作文本文件:是,这时就可以选择Reader
这样体系就明确了。
接下来明确要使用该体系中的哪个对象。
明确设备,硬盘上一个文件
Reader体系中可以操作文件的对象是 FileReader
是否需要缓冲区(数据小的就可以不需要):是,加入Reader体系中缓冲区BuffereReader.
FileReader r = new FileReader("读取数据路径");
BuffereReader b = new BuffereReader(r);
目的:OutputStream Writer
是否是纯文本。
是,Writer.
设备:硬盘一个文件。
Writer体系中可以操作文本的对象是FileWriter.
是否需要缓冲区(数据小的就可以不需要):是,加入Writer体系中缓冲区BuffereWriter.
FileWriter r = new FileWriter("存放数据路径");
BuffereWriter b = new BuffereWriter(r);
用于操作字节数组的流对象
ByteArrayInputStream:在构造的时候,需要接受数据源,而且数据源是一个字节数组
ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象已经内部封装了可变长度的字节数组。、
这就是数据目的。
因为这个两个流对象都操作的数组,并没有使用系统资源。
所以,不用进行close()关闭
在操作规律讲解时:
源设备:
键盘 System.in , 硬盘 FileStream , 内存 ArrayStream
目的设备:
键盘 System.out , 硬盘 FileStream , 内存 ArrayStream
用流的读写思想操作数据用于操作字节数组的流对象
ByteArrayInputStream:在构造的时候,需要接受数据源,而且数据源是一个字节数组
ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象已经内部封装了可变长度的字节数组。、
这就是数据目的。
因为这个两个流对象都操作的数组,并没有使用系统资源。
所以,不用进行close()关闭
在操作规律讲解时:
源设备:
键盘 System.in , 硬盘 FileStream , 内存 ArrayStream
目的设备:
键盘 System.out , 硬盘 FileStream , 内存 ArrayStream
用流的读写思想操作数据。
File类常见的方法
1、创建
boolean createNewFile():在指定目下创建文件,如果该文件已存在就不创建(返回false),否则就创建(返回true)
跟输出流创建文件不一样,输出流对象就建立文件,而且已有文件文件,会覆盖。
举一个简单的例子:
File file = new File("E:\\myuser\\fileDemo.txt");
file.createNewFile();
2、删除
boolean detele():删除此抽象路径名表示的文件或目录。
deteleOnExit();在程序退出时删除指定文件
例如:
File file = new File("E:\\myuser\\fileDemo.txt");
file.delete();
file.deleteOnExit();
3、判断
boolean exists():判断文件是否存在。存在返回true,否则false
isFile();//判断此抽象路径名表示的文件存在且 是一个标准文件时,返回 true;否则返回 false
isDirectory();//判断此抽象路径名表示的文件存在且 是一个目录时,返回 true;否则返回 false
isHidden();判断是否是隐藏文件
isAbsolute();//判断抽象路径名是绝对路径名,则返回 true;否则返回 false
例如:
public static void renameTos(){
File file = new File("E:\\myuser\\fileDemo.txt");
File file1 = new File("E:\\myuser\\myuser\\fileDemos.txt");
file1.renameTo(file);
print("file = "+file.isFile());
print("file1 = "+file1.isDirectory());
print("file = "+file.isHidden());
print("file1 = "+file1.isAbsolute());
}
4、获取信息
getName():得到文件的名称,该名称是路径名名称序列中的最后一个名称
getPath():
getParent():得到抽象路径名指定父目录的路径名字符串(也就是得到上一级目录的名称);
如果此路径名没有指定父目录,则返回 null
length() :得到文件的长度
lastModified() :得到文件最后一次修改的时间
getAbsoluteFile() ://得到文件的相对路径
例如:
public static void getInforFile(){
File file = new File("E:\\myuser\\fileDemo.txt");
print("getName = "+file.getName());//文件的名称
print("getPath = "+file.getPath());//文件的路径
print("getParent = "+file.getParent());//文件父目录的名字
print("length = "+file.length());//文件的长度
print("lastModified = "+file.lastModified());//文件上次修改的时间
print("getAbsoluteFile = "+file.getAbsoluteFile());//文件的绝对路径
}
5、创建目录:
mkdir():当已创建目录时,返回 true;否则返回 false 。创建一级目录
mkdirs():已创建目录以及所有必需的父目录时,返回 true;否则返回 false 。创建多级目录
例如:
File f1 = new File("E:\\myuser\\FileDemo_FileDemo11.txt");
File f2 = new File("E:\\myuser\\myuser\\myuser\\FileDemo_FileDemo_.txt");
f1.mkdir();
f2.mkdirs();