三十六、Java基础之File类
一、File类
import java.io.File; import java.io.IOException; /** * 使用IO流读写文件的内容,如果对文件/文件夹操作,可以使用File类 * 创建File对象 */ public class Test01 { public static void main(String[] args) throws IOException { //1.通过File构造方法的参数创建指定路径,File对象可以是文件夹,也可以是文件 File dir1 = new File("/Users/photo/meinvNo1"); File dir2 = new File("/Users/photo/meinvNo2"); dir1.mkdir();//创建文件夹 dir2.createNewFile();//创建文件 //通过File构造方法的第一个参数指定的上级目录 File dir3 = new File("/Users/photo/meinvNo1","sub1"); File dir4 = new File("/Users/photo/meinvNo1","sub2"); dir3.mkdir(); dir4.createNewFile(); File dir5 = new File(dir3,"sub3"); File dir6 = new File(dir3,"sub3"); dir5.mkdir(); dir6.createNewFile();//创建sub3文件夹,出现了重名现象 //在创建File对象,也可以使用绝对路径 File dir7 = new File("folder"); dir7.mkdir(); } }
输出:
二、File中的分割符
import java.io.File; /** * separator文件分割符 与 pathSeparator 路径分割符 */ public class Test02 { public static void main(String[] args) { System.out.println(File.separator);// / 在windows中是反斜杠,在其他操作系统中是/ System.out.println(File.pathSeparator);// :路径分割符。 win系统中为; } }
三、File类中的常用操作
/** *File类中常用操作: * 1、createNewFile :创建一个新的文件 * 2、delete 删除file对象 * 3、exists :判断file对象是否存在 * 4、getAbsoluteFile: 返回file对象的绝对路径形式(返回file对象) * 5、getAbsolutePath: 返回file对象的绝对路径 * 6、getFreeSpace:返回指定盘符的空闲空间大小 * 7、getName:返回file对象的名称 * 8、getParent:返回file对象的上一级目录 * 9、getParentFile:返回file对象的上一级目录(返回的file对象) * 10、getPath:返回路径 * 11、getTotalSpace:返回路径磁盘的总大小 * 12、getUsableSpace:返回路径磁盘的可用大小 * 13、isAbsolute:判断是否为绝对路径 * 14、isDirectory:判断是否为文件夹 * 15、isFile:判断是否为文件 * 16、isHidden:判断file是否隐藏 * 17、lastModified:返回最后一次修改时间,是从1970-01-01 00:00:00 经过的毫秒数 * 18、list:列出文件夹的内容 * 19、length:文件的长度 * 20、list:列出文件夹中的内容(Stirng[]) * 21、listFiles:列出文件夹中的内容(File[]) * 22、mkdir:创建文件夹,如果上一级目录不存在,则创建失败 * 23、mkdirs:创建文件夹,如果上一级目录不存在,先创建上一级目录,在创建当前文件 * 24、renameTo(File dest):重命名,如果dest对象和当前对象不在同一目录中,相当于文件移动 * 25、 */
例1:
import java.io.File; import java.io.IOException; import java.util.Date; /** *File类中常用操作: * 1、createNewFile :创建一个新的文件 * 2、delete 删除file对象 * 3、exists :判断file对象是否存在 * 4、getAbsoluteFile: 返回file对象的绝对路径形式(返回file对象) * 5、getAbsolutePath: 返回file对象的绝对路径 * 6、getFreeSpace:返回指定盘符的空闲空间大小 * 7、getName:返回file对象的名称 * 8、getParent:返回file对象的上一级目录 * 9、getParentFile:返回file对象的上一级目录(返回的file对象) * 10、getPath:返回路径 * 11、getTotalSpace:返回路径磁盘的总大小 * 12、getUsableSpace:返回路径磁盘的可用大小 * 13、isAbsolute:判断是否为绝对路径 * 14、isDirectory:判断是否为文件夹 * 15、isFile:判断是否为文件 * 16、isHidden:判断file是否隐藏 * 17、lastModified:返回最后一次修改时间,是从1970-01-01 00:00:00 经过的毫秒数 * 18、list:列出文件夹的内容 * 19、length:文件的长度 * 20、list:列出文件夹中的内容(Stirng[]) * 21、listFiles:列出文件夹中的内容(File[]) * 22、mkdir:创建文件夹,如果上一级目录不存在,则创建失败 * 23、mkdirs:创建文件夹,如果上一级目录不存在,先创建上一级目录,在创建当前文件 * 24、renameTo(File dest):重命名,如果dest对象和当前对象不在同一目录中,相当于文件移动 * 25、 */ public class Test03 { public static void main(String[] args) throws IOException { File dir = new File("/Users/chushujin/chushujin/photo/meinvNo1"); //dir.createNewFile(); //dir.delete(); dir.exists(); System.out.println(dir.getAbsoluteFile()); System.out.println(dir.getAbsolutePath()); System.out.println(dir.getFreeSpace()); System.out.println(dir.getName()); System.out.println(dir.getParent()); System.out.println(dir.getParentFile()); System.out.println(dir.getPath()); System.out.println(dir.getTotalSpace()); System.out.println(dir.getUsableSpace()); System.out.println(dir.isAbsolute()); System.out.println(dir.isDirectory()); System.out.println(dir.isFile()); System.out.println(dir.isHidden()); System.out.println(dir.lastModified()); System.out.println(new Date(dir.lastModified())); System.out.println(dir.list()); System.out.println(dir.length()); System.out.println(dir.listFiles()); System.out.println(dir); } }
例2
import java.io.File; import java.io.FilenameFilter; public class Test04 { public static void main(String[] args){ String folder = "/Users/photo/"; listsubDir1(folder); /** * out.txt * WechatIMG2.jpeg * WechatIMG3.jpeg * .DS_Store * meinvNo1 * javabak.txt * bos.txt * input.txt * log.txt * myjava.java * 888.jpg * QQ20190615-0.jpg * meinvNo2 * java.java * javaauto.txt * output.txt * zhangsan.txt */ System.out.println("----------------------------------"); listsubDir2(folder); /** * /Users/photo/out.txt * /Users/photo/WechatIMG2.jpeg * /Users/photo/WechatIMG3.jpeg * /Users/photo/.DS_Store * /Users/photo/meinvNo1 * /Users/photo/javabak.txt * /Users/photo/bos.txt * /Users/photo/input.txt * /Users/photo/log.txt * /Users/photo/myjava.java * /Users/photo/888.jpg * /Users/photo/QQ20190615-0.jpg * /Users/photo/meinvNo2 * /Users/photo/java.java * /Users/photo/javaauto.txt * /Users/photo/output.txt * /Users/photo/zhangsan.txt */ System.out.println("----------------------------------"); listsubDir3(folder); /** * Users/photo/out.txt * /Users/photo/javabak.txt * /Users/photo/bos.txt * /Users/photo/input.txt * /Users/photo/log.txt * /Users/photo/myjava.java * /Users/photo/java.java * /Users/photo/javaauto.txt * /Users/photo/output.txt * /Users/photo/zhangsan.txt */ } private static void listsubDir3(String folder) { File dir = new File(folder); File[] files = dir.listFiles(new FilenameFilter() { //在匿名内部类中重写抽象方法 @Override public boolean accept(File dir, String name) { return name.endsWith(".txt") || name.endsWith("java"); } }); for (File file:files ) { System.out.println(file.getAbsolutePath()); } } private static void listsubDir1(String folder) { File dir = new File(folder); String[] list = dir.list(); for (String str: list ) { System.out.println(str); } } private static void listsubDir2(String folder) { File dir = new File(folder); File[] files = dir.listFiles(); for (File file : files ) { System.out.println(file.getAbsolutePath()); } } }
四、将一个文件夹中的所有内容复制到另一新文件夹
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 文件夹的递归显示与复制 * */ public class Test05 { public static void main(String[] args){ String folder = "/Users/java"; //文件夹的递归调用 listsubdir(folder); /** * /Users/photo/out.txt * /Users/photo/WechatIMG2.jpeg * /Users/photo/WechatIMG3.jpeg * /Users/photo/.DS_Store * /Users/photo/meinvNo1 * /Users/photo/meinvNo1/sub1 * /Users/photo/meinvNo1/sub1/sub3 * /Users/photo/meinvNo1/a.txt * /Users/photo/meinvNo1/log.java * /Users/photo/meinvNo1/sub2 * /Users/photo/javabak.txt * /Users/photo/bos.txt * /Users/photo/input.txt * /Users/photo/log.txt * /Users/photo/myjava.java * /Users/photo/888.jpg * /Users/photo/QQ20190615-0.jpg * /Users/photo/meinvNo2 * /Users/photo/java.java * /Users/photo/javaauto.txt * /Users/photo/output.txt * /Users/photo/zhangsan.txt */ copyDir(folder,"/Users/java1"); } private static void copyDir(String srcFolder, String destFolder) { //判断目标文件夹是否存在,如果不存在,需要创建新的文件夹 File dest = new File(destFolder); if (!dest.exists()){ dest.mkdir(); } // 遍历srcFolder中的文件,复制到destFolder中 File src = new File(srcFolder); File[] files = src.listFiles(); for (File file: files ) { //如果是文件夹,先在destFile中创建新的文件夹,如果是文件,直接复制 if (file.isDirectory()){ //先需要知道要创建的文件名 File destsubDir = new File(destFolder,file.getName()); destsubDir.mkdir(); //复制文件 copyDir(file.getAbsolutePath(),destsubDir.getAbsolutePath()); }else{ //直接复制 File destFile = new File(destFolder,file.getName()); copyFile(file,destFile);//复制文件 } } } private static void copyFile(File srcFile,File destFile){ FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(srcFile); fos = new FileOutputStream(destFile); byte[] bytes = new byte[8]; int len = fis.read(bytes); while(len != -1 ){ fos.write(bytes,0,len); len=fis.read(bytes); } } catch (IOException e) { e.printStackTrace(); } finally { if (fis !=null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos !=null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static void listsubdir(String folder) { File dir = new File(folder); File[] files = dir.listFiles(); for (File file : files ) { System.out.println(file.getAbsolutePath()); if (file.isDirectory()){ listsubdir(file.getAbsolutePath());//递归调用 } } } }
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。