1.File类
java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建,文件的查找和文件的删除等.File对象代表磁盘中实际存在的文件和目录.
1.File的构造方法主要有:
File(File parent,String child)
复制代码
通过给定的父抽象路径名和子路径字符串创建一个新的File实例
File(String pathname)
复制代码
通过将给定路径字符串转换成抽象路径来创建一个新的File实例
File(String parent,String child)
复制代码
通过parent路径名字符串和child路径名字符串来创建一个新的File实例 2.File类中一些方法:
public String getName() 返回此抽象路径名表示的文件或目录的名称
public String getParent() 返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回null
public File getParentFile() 返回此抽象路径名的父路径名的抽象路径名,如果此路径名没有指定父目录,则返回null
public String getPath()将此抽象路径名转换为路径名字字符串
public boolean isAbsolute() 测试此抽象路径名是否为绝对路径名
public String getAbsolutePath() 返回抽象路径名的绝对路径名字符串
复制代码
更多方法可见API文档 注意:File提供的功能都是操作文件外部的能力,没有办法操作文件内部的内容,想要对文件内容进行操作,还需要流,即Stream.
2.IO流-----Stream
一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据, Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中.
1.流的分类
按照流向:
输入流 输出流
按照操作单元:
字节流:万能流:任何内容都可以转为字节,可以传输文本,图片,音频... 字符流:只能操作 纯文本数据
按照功能:
节点流: 包裹源头,实现基本功能 功能流: 对节点流增强性能,提高效率
2.字节流
先看字节流,字节流分为字节输入流和字节输出流.
- 字节输入流:InputStream------>抽象类 此抽象类是表示字节输入流的所有类的超类
- 字节输出流:OutputStream------>抽象类 此抽象类是表示字节输出流的所有类的超类
- 文件字节输入流:FileInputStream----->从文件系统中的某个文件中获得输入字节
- 文件字节输出流:FileOutputStream----->输出程序中的字节 流使用完毕,应该关闭.关闭可使用close()方法 写入时,最后应该调用flush()方法刷出流管道中剩余的数据.
下面以一次复制操作为例.对于一个复制操作应该有这样几步:
准备流,即声明且实例化文件字符流对象
读入写出数据,利用read(),write()方法实现读写
刷出,最后把管道中的数据刷出
关闭流,注意应该后打开的先关闭
示例1:
public class Test{
public static void main(String []args){
String src="E:/skr.txt";//源文件
String dest="E:/skr1.txt";//复制后得到的文件
byteCopy(src,dest);
}
//方法重载
public static void byteCopy(String src,String dest){
byteCopy(new File(src),new File(dest));
}
//方法重载
public static void byteCopy(File input,File output) {
InputStream in = null;//输入字节流声明
OutputStream os = null;//输出字节流声明
try {
in = new FileInputStream(input);//多态
os = new FileOutputStream(output);//多态
//定义一个1k的字节数组,一次读取1k的数据
byte[] b = new byte[1024];
//当文件中没有数据时,返回-1
int len=-1;
while(-1!=(len=in.read(b))){//读取
os.write(b,0,len);//写入
}
os.flush();//刷出
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//后打开的流先关闭
try {
if (os != null) {
os.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
复制代码
3.字符流
字符流同样分为字符输入流和字符输出流
字符输入流:Reader--->读取字符流的抽象类
FileReader 用来读取字符文件的便捷类
字符输出流:Writer--->写入字符流的抽象类
FileReader 用来读取字符文件的便捷类
字符流只能操作纯文本的文件.
4.缓冲流
缓冲流是一个功能流,它可以增强功能,提高性能,加快读写效率.
1. 字节缓冲流:
-
BufferedInputStream 字节输入流缓冲流
-
BufferedOutputStream 字节输出流缓冲流
没有新增方法,可以发生多态使用
2. 字符缓冲流
BufferedReader 字符输入流缓冲流 新增方法:String readLine()读取一个文本行
BufferedWriter 字符输出流缓冲流 新增方法:void newLine() 写入一个行分隔符
复制代码
复制代码
3. 缓冲流的实例化与普通节点流的实例化有所不同:
以字节输入缓冲流为例看一下构造方法: BufferedInputStream(InputStream in) 复制代码 可以看到构造方法中传入的是一个字节输入流的对象 即BufferedInputStream的构造方法中传入的不再是文件的抽象路径名字符串或抽象路径名.
3.总结
我们可以利用File类中提供的方法对文件的外部进行操作,但是当我们想操作文件的内容时就需要使用Stream. 在java中有大量而灵活地操作可以进行处理文件. 我们可以选择字节流或者字符流处理文件.当文件较大时,也可以使用缓冲流提高性能,增加读写效率.