1.File类
File类简介
在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些与平台无关的方法来操作文件,File类主要用来获取或处理与磁盘文件相关的信息,像文件名、 文件路径、访问权限和修改日期等,还可以浏览子目录层次结构。
File 类表示处理文件和文件系统的相关信息。也就是说,File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。
File类的相关方法
1、构造方法
File(File parent,String child):以父抽象路径名和子路径名字符串创建新的File实例。
File(String pathName):给定路径名字符串转换为抽象路径名来创建新的File实例。
File(String parent,String child):以父路径和子路径名字符串创建新的File实例。
File(URI uri):将给定的 file: URI转换为抽象路径名来创建新的 File实例。
2.常用方法:
方法 |
作用 |
boolean exists() |
判断抽象路径代表的文件或目录是否存在 |
boolean createNewFile() |
创建一个文件,当且仅当具该名称的文件不存在时 |
File[] mkdir() |
创建抽象路径名表示的目录中,当且仅当父抽象路径的目录全部存在时才能创建成功 |
File[] mkdirs() |
创建抽象路径名表示的目录中,会一次性创建抽象路径中所有的目录,假如某些目录不存在时 |
boolean isFile() |
判断抽象路径是否为普通文件 |
boolean isDirectory() |
判断抽象路径是否为目录 |
boolean delete() |
删除此抽象路径代表的文件或者路径,只有当前文件夹下没有文件的情况才能删除 |
File[] listFile() |
抽象路径名表示的目录中的文件 |
String getName() |
返回由此抽象路径名表示的文件或目录的名称 |
String getParent() |
抽象路径名的父的路径名字符串,如果此路径名未命名为父目录,则返回null |
String getAbsolutePath() |
返回此抽象路径名的绝对路径名字符串 |
String[] list(FilenameFilter filter) |
抽象路径名表示的目录中满足指定过滤器的文件和目录 |
示例:删除文件(文件夹)
public static void deleteAllFile(String st){ File f = new File(st); if(!f.exists()) return; if(f.isFile()) f.delete(); deleteDic( f); } public static void deleteDic(File f ){ File[] listFiles = f.listFiles(); if(listFiles != null && listFiles.length > 0){ for (File file : listFiles) { if(file.isFile()){ file.delete(); }else{ deleteDic(file); } } f.delete(); } } public static void main(String[] args) throws IOException { deleteAllFile("D:\\FILE"); }
2.IO简要介绍
JAVA中io相关的类都在java.io包下
输入流:都是抽象类InputStream(字节输入流)或者Reader(字符输入流)的子类
输出流:都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类
文件输入输出流
数据输入输出流
ZIP输入输出流
缓存输入输出流
3.文件字节流实例
文件字节流:
FileInputStream
FileOutputStream
public static void readAndWrite() throws IOException{ File f = new File("D:\\stream2.txt"); if(!f.exists()){ f.createNewFile(); } FileInputStream in = new FileInputStream("D:\\stream.txt"); //FileOutputStream out = new FileOutputStream(f) FileOutputStream out = new FileOutputStream(f,true); //这里第二个参数代表在写入的时候不会覆盖文件f原有的数据 byte[] b = new byte[1024]; int len; while((len = in.read(b)) > 0){ out.write(b, 0, len); } in.close(); out.close(); }
文件缓存字节流: public static void BufferreadAndWrite() throws IOException{ File f = new File("D:\\stream2.txt"); if(!f.exists()){ f.createNewFile(); } FileInputStream in = new FileInputStream("D:\\stream.txt"); BufferedInputStream bi = new BufferedInputStream(in); FileOutputStream out = new FileOutputStream(f,true); BufferedOutputStream bo = new BufferedOutputStream(out); byte[] b = new byte[1024]; //定义一个数组用来接收读取的字节,每次读取都会覆盖之前的字节 int len; while((len = bi.read(b)) > 0){ bo.write(b, 0, len); } bi.close(); bo.close(); }
4.ZIP压缩流实例
4.1 zip压缩文件
ZipOutputStream
package mytest; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipStream { public static void createZip(String file,String zip) throws IOException{ File f = new File(file); //源文件 if(!f.exists()){ return; } ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream(zip)); //输出流-目标zip文件 packetZip(f,zipout); // 参数1 源文件 参数2.目标文件输出流 zipout.close(); } @SuppressWarnings({ "unused" }) public static void packetZip(File f,ZipOutputStream zipout) throws IOException{ byte[] arr = new byte[1024]; if(f.isFile()){ //文件压缩 FileInputStream in = new FileInputStream(f); ZipEntry en = new ZipEntry("" + f); //创建要压缩文件的zipEntry zipout.putNextEntry(en); int len; while(( len = in.read())!= -1){ zipout.write(len); //开始压缩 读是文件字节输入流 FileInputStream in ,写是zaip输出流ZipOutputStream zipout } in.close(); }else{ File[] listFiles = f.listFiles(); if(listFiles != null && listFiles.length > 0){ for (File file : listFiles) { packetZip(file,zipout ); } } }
} public static void main(String[] args) { try { createZip("D://HT","D://HT.zip"); } catch (IOException e) { e.printStackTrace(); } } }
4.2 Zip解压
/** * 解压文件 * @param zipfileSt zip文件系统路径 * @throws IOException */ public static void decompressionZip(String zipfileSt) throws IOException{ File zf = new File(zipfileSt); FileInputStream in = new FileInputStream(zf); ZipInputStream zipin = new ZipInputStream(in); //读取zip文件的ZipEntry ZipFile zipfile = new ZipFile(zipfileSt); //把ZIPEntry转换成输入流 zipin.getNextEntry(); //跳过根目录 ZipEntry entry = null; while((entry = zipin.getNextEntry()) != null && (!entry.isDirectory()) ){ File f = new File( entry.getName()); if(!f.exists()){ f.getParentFile().mkdirs(); f.createNewFile(); } FileOutputStream out = new FileOutputStream(f); InputStream inputStream = zipfile.getInputStream(entry); //相对压缩而言,解压多了一个步骤,把entry转换为字节流 byte[] arr = new byte[1024]; while( inputStream.read(arr) != -1){ out.write(arr); //读是字节流 InputStream inputStream,写是文件字节输出流FileOutputStream out } out.close(); inputStream.close(); } zipfile.close(); zipin.close(); }