=============================================
File类型
java.io.File类型,可以对硬盘上的文件以及目录,进行操作。
如查看文件/目录的属性信息,创建,删除文件/目录。此类型
不能查看和修改文件里的内容。
常用构造器:
File(String pathname):
指定一个路径,创建一个File对象
路径:
(1)文件的路径,要写到文件的扩展名为止
(2)目录的路径,要写到当前目录的名称为止
一、概念
可以用来创建,删除文件/目录,还可以查看文件/目录的属性信息。
但是不可以修改文件里的数据。如果需要修改,应该使用输入/输出流。
二、常用构造器
File(String pathname)
创建一个指定路径的File对象
File(File parent,String child)
在指定parent路径下,创建一个child的file对象
File(String parent,String child)
在指定parent路径下,创建一个child的file对象
三、
绝对路径:是从根目录开始写的路径
window: 从盘符开始书写:
D:\a\f1.txt
D:\a\b
linux: /home/scott/f1.txt
/home/scott
相对路径: 相对某一文件/目录的路径,不是从根路径书写。
reg: f2.txt相对于a目录的路径:
window: b\f2.txt
linux: b/f2.txt
reg: f3.txt相对于f2.txt的路径
../c/f3.txt
四、常用方法
boolean exists();判断指定的路径是否存在
boolean isFile();判断指定路径是不是文件
boolean isDirectory();判断指定路径是不是目录
String getName());获取文件/目录名称
long lastModified();获取文件/目录的最后修改时间
boolean isAbsolute();判断指定路径是不是绝对路径
String getAbsolutePath();获取绝对路径
String getParent();获取父目录的路径
long length();获取文件大小
文件/目录创建方法:
boolean createNewFile();创建文件
boolean mkdir();创建目录
boolean mkdirs();创建多级目录
文件/目录的删除方法
boolean delete()
可以删除文件,删除目录时,需要目录下没有文件或子目录
File[] listFiles()
获取目录里的file对象
递归:
递归思想:分成递与归。一层层递进,最后再一层层归。
两种递归:
(1) 方法调用自己
(2) 方法A调用方法B,方法B调用A
举例:
n*(n-1)*......*1
z = f(n) 计算n的阶乘
= n*f(n-1)
= n*(n-1)*f(n-2)
= n*(n-1)*......*1
f(n)是一个函数:
里的逻辑:
n*f(n-1)
练习:
斐波那契数列: 第n个数是第n-1个数与第n-2个数的和。
1,1,2,3,5,8,13,.......
计算第10个数的值。
===============================================
IO流:(Input,Output)
我们在做项目时,除了自定义的一些数据外,还可能需要从"外界"
引入数据,或者将数据导出到"外界"。这时,我们需要I/O操作。
外界:指的可能是 键盘,显示器,硬盘,另外一个程序。
输入:又叫读入操作
数据时从"外界"流向程序
输出:又叫写出操作
数据时从程序流向"外界"
流: 就是数据序列, 一经创建成功,就会打开一个通道。所以使用完
应该进行关闭操作。
IO流的分类:
(1)按照流向分类:
输入流
输出流
(2)按照处理的数据单位分类:
字节流
字符流
(3)按照功能分类:
节点流:直接连接两个设备的流类型
处理流:对节点流再次封装与处理的流类型
======================================
字节流:
抽象父类 InputStream/OutputStream
文件字节流:
FileInputStream/FileOutputStream
(1)构造器:
FileInputStream(File file)
创建一个指定路径的File对象的文件输入流对象
FileInputStream(String name)
创建一个指定路径的字符串的文件输入流对象
常用方法:
int read()
读取该流中的一个字节数据,即8位二进制,存储到一个int数
据的低八位上
如果返回-1,读至文件末尾,
long skip(long n)
跳过流中n个字节
int read(byte[] b)
读取字节存入byte数组中,最多能读b.length个字节
返回的是实际读取的字节个数
int available()
查看此输入流中剩余的字节数量
(2)构造器
FileOutputStream(File file)
FileOutputStream(File file, boolean append)
FileOutputStream(String name)
FileOutputStream(String name, boolean append)
创建一个指定路径的输出流对象,append表示在文件末尾追加
PS:如果指定路径下的文件名不存在,会自动创建。
如果父路径不存在,则报异常FileNotFoundException
常用方法:
void write(int b)
写出参数b中的一个字节,int类型的低八位。
void write(byte[] b)
将字节数组b中的字节按顺序写出
void write(byte[] b,int off,int len)
将字节数组b中的字节按顺序写出,从下标off,写len个
File:可以创建,删除,查看文件/目录的信息。但是不
能查看/修改文件里的内容
删除目录时:需要注意使用递归思想(不能直接删除不为空的目录)
IO流:
用途,传输数据。
输入:读取数据
输出: 写出数据
流:数据序列
分类:
(1)按照流向分类
(2)按照处理的单位分类
(3)按照功能分类
字节流:
抽象父类:
InputStream:定义了字节输入流的常用方法
int available()
void close();
int read():读取一个字节,存入int的低八位上,范围是0-255
int read(byte[] b):
读取字节存入字节数组b中,返回的是读取的有效字节个数。
int read(byte[] b,int off,int len)
skip(int n);
OutputStream:定义了字节输出流的常用方法
void close();
void flush();//冲刷,作用是将流的数据,冲刷进文件中
void write(int b);写一个字节
void write(byte[] b);写一个字节数组
void write(byte[] b,int off,int len)
子类:
FileInputStream/FileOutputStream
继承了字节流的抽象父类。重写了方法,并且提供了自己独有的方法
构造器:
FileInputStream(File file)
FileInputStream(String path)
FileOutputStream(File file)
FileOutputStream(File file,boolean append)
FileOutputStream(String pathname)
FileOutputStream(String pathname,boolean append)
PS:所有的输出流,对于指定的路径中的文件若是不存在,
都会自动创建。
===================================================
缓冲流:
BufferedOutputStream:字节缓冲输出流
在写数据时,如果一个字节一个字节的写,写的次数明显很多,效率就会变得很低。
如何提高效率呢。
缓冲输出流的特点是:在流里维护了一个缓冲区,写字节时,先将字节
写入缓冲区, 当缓冲区满时,再一次性的将数据写到文件里。这样就
降低了写的次数,因此提高了效率。
因此缓冲输出流缺失即时性,可以使用flush方法进行冲刷
常用构造器:
BufferedOutputStream(OutputStream out)
创建一个指定字节输出流的缓冲流对象
BufferedOutputStream(OutputStream out,int size)
创建一个指定字节输出流的缓冲流对象,并设置缓冲区的大小
PS:当一次写的字节超出缓冲区大小,会出现溢出情况,溢出的字节
会先写出到文件中
常用方法:
void write(int b):
写int数据的低八位,写入缓冲区内
void write(byte[] b,int off,int len)
写指定长度len的字节数组,写入缓冲区
BufferedInputStream:字节缓冲输入流
在读取字节时,也是一个字节一个字节的读,次数多,效率低。
使用缓冲输入流,内部维护了一个缓冲区,默认8k,先一次性将缓冲区装满
等待读取.
当将缓冲区的数据读完,缓冲区再次存储后续数据。读取的次数明显降低
效率高
构造器:
BufferedInputStream(InputStream is);
BufferedInputStream(InputStream is,int size);
常用方法:
int read(byte[] bs)
读取缓冲区里的字节存储bs中,
当一次性得去的字节小于缓冲区,我们是从缓冲区里读数据。
此时,效率高
当一次性读取的字节超出缓冲区大小。
不使用缓冲区,直接从文件里读。
int read(byte[] bs,int off,int len)
================================================
数据字节流,与缓冲流一样,父类都是过滤字节流(
FilterOutputStream/FilterInputStream
)
这两个类提供了几个特殊的方法,可以直接写基本数据类型
数据输出流:DataOutputStream
构造器:
DataOutputStream(OutputStream os)
创建一个指定字节输出流的数据输出流对象
常用方法:
除了提供写一个字节和写一个字节数组的方法外,还提供了如下方法
writeByte(int b)
writeShort(int s)
writeInt(int i)
writeLong(long l)
writeFloat(float f)
writeDouble(double d);
writeChar(int c);
writeBoolean(boolean b)
writeUTF(String s);