流的文件操作(File)
一、流的分类:
1、流按照方向分类:分为输入流和输出流,流的操作是相对于内存而言。
输入流的定义:当我们从数据源中将数据读取到内存中就称为输入流,也叫读取流。
输出流的定义:当我们将内存中处理好的数据写入数据源,就称为输出流,写入流。
2、流按照内容分类:可以分为字节流、字符流、对象流。
数据的传输在底层都是以二进制的方式传输,所以无论是哪种流,其实都是字节流。而字符流和对象流只是在字节的基础上做了一层封装,以便于对字符数据和对象数据进行操作。
二、流的父类
1、所有字节流的父类都是:InputStream和OutputStream;
2、所有字符流的父类都是:Reader和Writer。
三、流的操作步骤
1、建立流。所谓建立流就是建立内存和数据源之间传输数据的通道。
2、操作流。操作传输的数据。
3、关闭流。关闭内存和数据源之间的通道,释放资源。
例:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class StreamTest{
public StreamTest(){
InputStream in = null;
try {
//建立流
in = new FileInputStream("info.txt");
int data = 0;
//操作流,一次读取一个字节。如果为-1,那么表示读取完毕
while((data = in.read()) != -1){
System.out.println(data);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//关闭流
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
备注:流使用完毕后,必须关闭,如果不关闭会浪费内存资源,另外,写入流有可能写不进数据。关闭的顺序必须是先建立的流后关闭,后建立的流先关闭。
四、建流的目的是:完成内存数据和磁盘数据的转换。
五、以下是部分流的文件操作
//第二个参数为true,表示已追加的方式向资源文件中写入数据,运行代码几次,资源文件就会追加几次数据,并且不会覆盖资源文件原来的数据。
OutputStream out = null;
out = new FileOutputStream("info.txt",true);
out.write("Java技术".getBytes());
注:、当使用OoutputStream写入流时,如果文件不存在,读取流会抛出FileNotFoundException异常。写入流会自动创建新文件。但是前提是该文件所在的目录必须存在。
//创建文件对象
File f = new File("c:/abc/a.txt");
//或得文件名
String name = f.getName();
System.out.println(name);
//得到文件所在目录
String dir = f.getParent();
system.out.println(dir);
//得到文件的绝对路径
String path = f.getAbsolutePath();
System.out.println(path);
//判断文件对象所代表的文件或目录是否存在,如果存在,结果就为true
boolean isEx = f.exists();
System.out.println(isEx);
//判断文件对象代表的是否是存在 的文件
System.out,pritln(f.isFile());
//判断文件对象代表的是否是目录
System.out.println(f.isDirectory());
//得到一个目录中偶有文件列表,包含文件和目录,但是不包含子目录中的内容
File f = new File("D:/KwDownload");
File[] fs = f.listFiles();
for(File ft : fs){
System.out.println(ft.getName());
}
//删除指定目录下的文件
File f = new File("D:/KwDownload/a.docx");
f.delete();
//删除文件对象所代表的文件或目录,前提必须是空文件才删得掉
File f = new File("D:/KwDownload/aaa");
f.delete();
//得到指定目录下所有文件及子文件夹中的文件
public static void (String[] args){
list(new File("D:/KwDownload"));
}
public static void list(File dirFile){
File[] fs = dirFile.listFiles();
for(File f : fs){
if(f.isFile()){
System.out.println(f.getAbsolutePath());
}else{
list(f)
}
}
}
//创建制定路径的目录
File f = new File("D:/aaa");
f.mkdir();
//创建文件选择对象
JFileChooser jfc = new JFileChooser;