java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建,文件的查找和文件的删除等.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.
一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据, Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中.
输入流 输出流
字节流:万能流:任何内容都可以转为字节,可以传输文本,图片,音频... 字符流:只能操作 纯文本数据
节点流: 包裹源头,实现基本功能 功能流: 对节点流增强性能,提高效率
先看字节流,字节流分为字节输入流和字节输出流.
下面以一次复制操作为例.对于一个复制操作应该有这样几步:
准备流,即声明且实例化文件字符流对象
读入写出数据,利用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(); } } } } 复制代码
字符流同样分为字符输入流和字符输出流
字符输入流:Reader--->读取字符流的抽象类
FileReader 用来读取字符文件的便捷类
字符输出流:Writer--->写入字符流的抽象类
FileReader 用来读取字符文件的便捷类
字符流只能操作纯文本的文件.
缓冲流是一个功能流,它可以增强功能,提高性能,加快读写效率.
BufferedInputStream 字节输入流缓冲流
BufferedOutputStream 字节输出流缓冲流
没有新增方法,可以发生多态使用
BufferedReader 字符输入流缓冲流 新增方法:String readLine()读取一个文本行 BufferedWriter 字符输出流缓冲流 新增方法:void newLine() 写入一个行分隔符 复制代码
复制代码
以字节输入缓冲流为例看一下构造方法: BufferedInputStream(InputStream in) 复制代码 可以看到构造方法中传入的是一个字节输入流的对象 即BufferedInputStream的构造方法中传入的不再是文件的抽象路径名字符串或抽象路径名.
我们可以利用File类中提供的方法对文件的外部进行操作,但是当我们想操作文件的内容时就需要使用Stream. 在java中有大量而灵活地操作可以进行处理文件. 我们可以选择字节流或者字符流处理文件.当文件较大时,也可以使用缓冲流提高性能,增加读写效率.