File类:

  • 用来将文件或者文件夹封装成对象
  • 方便对文件与文件夹的属性等信息进行操作(因为流只能操作文件中的数据)
  • File对象可以作为参考传递给流的构造函数

  上下级文件夹之间使用分隔符分开:

  在Windows中分隔符为‘\’ ,在Unix/Linux中分隔符为‘/’

  跨平台分隔符:专业的做法是使用File.separatorChar,这个值会根据系统得到的相应的分隔符。

  例:new File("c:"+File.separatorChar+"a.txt");

  注意,如果是使用“\” ,则需要进行转义,写为“\\”才可以

  绝对路径与相对路径:

  绝对路径:c:\html\demo.txt

  相对路径:demo.txt

  对于UNIX平台,绝对路径名的前缀是"/"。相对路径名没有前缀。

  对于Windows平台,绝对路径名的前缀由驱动器号和一个":"组成,例"c:\\..."。相对路径没有盘符前缀。

  相对路径:

  相对路径是指相对于某位置的路径,是指相对于当前目录。

  在执行Java程序时,相对路径为执行java命令时当前所在的目录。

1.构造方法

  【代码演示】

 import java.io.File;
public class FileDemo {
public static void main(String[] args) {
//构造函数File(String pathname)
File f1=new File("a.txt");
//将a.txt封装成对象。(注意:既可以封装已存在的对象,也可以封装不存在的对象
System.out.println(f1);//(注意上面对象封装的是什么就打印什么) //构造函数File(String parent,String child)
String parent="C:\\html\\test";
String child="demo.txt";
File f2=new File(parent,child);
System.out.println(f2); //构造函数File(File parent,String child)
File parent1=new File("c:\\html\\test");
String child1="java";
File f3=new File(parent1,child1);
System.out.println(f3); File f4=new File("c:\\html\\test\\demo.txt");
//由于"c:\\html\\test\\demo.txt"代码不跨平台,在Windows中支持,在linux中却不支持
//所以建议用separator代替\\
File f5=new File("c:"+File.separator+"html"+File.separator+"test"+File.separator+"demo.txt");
System.out.println(f5);
System.out.println(f4);
}
}

2.File对象的常见方法

  创建:boolean  createNewFile():在指定位置创建文件,如果是第一次创建,返回ture,如果是第二次创建文件,由于该文件已存在,则不创建文件并返回false。

                 注意这与流对象是不同的,在流对象中创建的文件已存在时,会覆盖已存在的文件。

     static  File   createTempFile(String prefix,String suffix):在默认临时文件目录中创建一个空文件。运行时创建,运行完即删除。

     static  File   createTempFile(String prefix,String suffix,File directory):重载,在指定目录创建临时文件。

     boolean  mkdir():在指定位置创建一级目录(文件夹)。

     boolean  mkdirs():在指定位置创建多级目录。

     

  删除:boolean  delete():删除文件或目录,删除成功返回true,删除失败返回false。

     boolean  deleteOnExit():该方法实在程序运行完时,删除指定文件。

  判断

     boolean  exists():判断该文件或目录是否存在,若存在则返回true,不存在则返回false。

     bollean   isFile():判断是否为文件。

     boolean  isDirectory():判断是否为目录。

     boolean  isHidden():判断是否为隐藏文件。

     boolean  canExecute():测试该文件是否可执行。

     boolean  canRead():测试该文件是否可读。

   获取:getName():获取名字

     length():获取文件的长度

     lastModified():获取文件最后一次修改时间

     getPath():获取对象封装时的路径

     getParent():获取父目录的路径

     getAbsoluteFile():获取绝对路径(以File的形式返回)

     getAbsolutePath():获取绝对路径(以String的形式返回)

     boolean  renameTo(File  dest):重新命名。

     eg:  File f1=new File("c:\\test.java");

       File f2=new File("c:\\haha.java");

       f1.renameTo(f2);

//将test文件从f1的位置(c盘中)的移到f2的位置(c盘),并改名为f2的名(haha.txt)

     eg:  File f1=new File("c:\\test.java");

       File f2=new File("d:\\haha.java");

       f1.renameTo(f2);

       //将test文件从f1的位置(c盘中)的移到f2的位置(D盘),并改名为f2的名(haha.txt)

      

           

  【代码演示】File对象的常用方法。

 import java.io.File;
import java.io.IOException; public class FileFuntionDemo {
public static void main(String[] args) throws IOException {
String parent="C:\\html\\test";
String child="funtion.txt";
File f=new File(parent,child);
System.out.println(f); System.out.println("第一次创建文件:"+f.createNewFile());
//此次为第一次创建文件,则返回true
System.out.println("第二次创建文件:"+f.createNewFile());
//此次为第二次创建文件,由于该文件已存在,则不创建文件并返回false。
// 注意这与流对象是不同的,在流对象中创建的文件已存在时,会覆盖已存在的文件。(覆盖的原理是删除已有的,创建新的)
/**
* f.mkdir();//创建目录
* f.mkdirs();//创建多级目录
* 要注意:创建的是文件还是目录是由创建方法决定的。
* 即使封装的对象是"funtion.txt",但只要使用的是mkdir()方法,创建出来的就是目录。
*
*/ //System.out.println("删除文件:"+f.delete());
/**
* 这个删除是有缺陷的,当前面代码出现异常时,执行不到这句时,就会造成文件删除失败
* 即使放在try语句的finally中,也是无法执行成功的,因为文件在运行过程中是不允许删除的
* 所以就出现了:deleteOnExit(),该方法是在程序运行完时,删除指定文件。
*/
System.out.println("获取名字:"+f.getName());
System.out.println("获取文件长度:"+f.length());
System.out.println("获取文件最后一次修改的时间:"+f.lastModified());
System.out.println("获取文件对象路径:"+f.getPath());//传进来什么打印什么
System.out.println("获取父目录的路径:"+f.getParent());//该方法返回的是绝对路径中的父目录,如果获取的是相对路径,则返回null
System.out.println("获取目录的绝对路径:"+f.getAbsolutePath());//绝对路径,即使文件不存在
System.out.println("判断文件是否存在:"+f.exists());//注意在判断该文件对象是文件还是目录时,要先判断其是否存在。
System.out.println("判断文件是否为文件:"+f.isFile());
System.out.println("判断文件是否为目录:"+f.isDirectory());
System.out.println("判断文件是否为隐藏文件:"+f.isHidden());
System.out.println("判断文件是否可执行:"+f.canExecute());
System.out.println("判断文件是否可读:"+f.canRead()); }

 运行结果:

  【代码演示】list()方法,listFiles()方法和list(FilenameFilter  filter)方法的区别。

 import java.io.File;
import java.io.FilenameFilter;
public class FileDemo2 {
public static void main(String[] args) {
File f=new File("c:\\html\\test");
//调用list()方法的File对象必须是封装了一个目录,且该目录还必须存在。否则会报空指针异常。
String[] names=f.list();//返回的是指定目录下的所有文件或目录(以相对路径的形式)
for (String name:names) {
System.out.println(name);
}
File[] fname=f.listFiles();//返回的是指定目录下的所有文件或目录(以File对象的形式:绝对路径)
for(File name:fname){
         System.out.println(name);
       }
FilenameFilter filter=new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
/**
* dir指的是该File对象封装的目录,name指的是遍历的File对象封装的目录下的各个子目录(可能是文件,也可能是目录)
*/
return name.contains("n.txt");//返回文件中包含“n.txt”字段的文件
}
};
String[] spname=f.list(filter); //该方法具有过滤功能,返回的是符合accept方法中的条件的文件。
for (String name:spname) {
System.out.println(name);
}
}
}

运行结果:

  【代码演示】打印出指定目录下的所有文件,包括所有子目录。

 import java.io.File;
import java.util.Scanner; public class digun {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请指定目录:");
String name=in.nextLine();
File file=new File(name);
showAllDir(file);
}
public static void showAllDir(File file){
System.out.println(file);
File[] filesname=file.listFiles();
for (File name:filesname) {
if (name.isDirectory()){
showAllDir(name);
}else {
System.out.println(name);
}
}
return;
}
}

运行结果:

    【代码演示】打印出指定目录下的所有符合条件的文件或目录,包括所有子目录中的。

 import java.io.File;
import java.util.ArrayList;
import java.util.Scanner; public class digun {
static ArrayList arrayList=new ArrayList();
static String ff;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请指定目录:");
String name=in.nextLine();
System.out.println("过滤条件:");
ff=in.nextLine();
File file=new File(name);
showAllDir(file);
for (int i = 0; i <arrayList.size() ; i++) {
System.out.println(arrayList.get(i));
}
}
public static void showAllDir(File file){
File[] filesname=file.listFiles();
for (File name:filesname) {
if(name.getName().contains(ff)){
arrayList.add(name);
}
if (name.isDirectory()){
showAllDir(name);
}
}
return;
}
}

  运行结果:

   【代码演示】以树状的形式打印出指定目录下的文件。

 import java.io.File;
import java.util.Scanner; public class TreeDirectory {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入指定的目录:");
String filename=in.nextLine();
File file=new File(filename);
showTreeDir(0,file);
} public static String level(int level){ //根据层级数,打印该层的前缀
StringBuilder sb=new StringBuilder();
for (int i=0;i<level;i++){
sb.append("\t");
}
sb.append("|---");
return sb.toString();
}
public static void showTreeDir(int level,File file){
level++; //先将上级目录的层级数加一,变成此目录的层级数
System.out.println(level(level)+file.getName());//然后将调用该方法的层目录打印出来
File[] names=file.listFiles();//将该层目录下的子目录或文件返回来,存储到names数组中
for (int i = 0; i <names.length ; i++) { //对各个子目录进行遍历
if (names[i].isDirectory()){ //如果是目录,则继续调用showTreeDir方法,并将此层目录的层级数传递给子目录
showTreeDir(level,names[i]);
}else {//如果是文件,则将文件名打印出来
System.out.println(level(level+1)+names[i].getName());
}
}
}
}

  运行结果:

【代码演示】如何删除一个带内容的目录。

 import java.io.File;
import java.util.Scanner; public class FileDelete {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入所要删除的目录:");
String filename=in.nextLine();
File file=new File(filename);
removeDir(file);
}
public static void removeDir(File file){
File[] subfiles=file.listFiles();
//此方法返回的是该层目录的子目录,如果存在子目录,则将子目录存放在一个数组中,然后返回数组的引用,如果不存在子目录,则返回null
if (subfiles==null){ //当数组为空时,说明不存在子目录,则直接删除此目录。
//所以此处判断数组是否为空时,应用subfiles==null来判断,如果用subfiles.length==0判断会报空指针异常
System.out.println(file.delete());
}else { //当数组不为空时,说明存在子目录,则应该先删除子目录。
for (int i = 0; i <subfiles.length ; i++) {
removeDir(subfiles[i]);
}
System.out.println(file.delete());//所有子目录删除后,再将此目录删除
}
}
}

  注意:Java删除不经过回收站。

IO流之File对象的更多相关文章

  1. [javaSE] IO流(FIle对象递归文件列表)

    获取File对象,new出来,构造参数:String目录名 调用File对象的list()方法,获取String[]数组文件名称 循环数组,列出所有文件包含隐藏文件 递归列出所有的数据 定义一个静态方 ...

  2. IO流,File类的测试........课堂加总结

    package liu0926; import java.io.File; import java.io.IOException; public class Text01 { public stati ...

  3. Java笔记(二十七)……IO流中 File文件对象与Properties类

    File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果 ...

  4. IO流(File类,IO流的分类,字节流和字符流,转换流,缓冲流,对象序列化)

    1.File类 File类可以在程序中 操作文件和目录.File类是通过建立File类对象,在调用File类的对象来进行相关操作的. 示例: public class Demo01 { public  ...

  5. Java IO流中 File文件对象与Properties类(四)

    File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果 ...

  6. JAVASE(十六) IO流 :File类、节点流、缓冲流、转换流、编码集、对象流

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.File类型 1.1.File类的理解 File类是在java.io包下 File可以理解成一个文件 ...

  7. 二十、Java基础--------IO流之其他对象

    在上面两篇文章中介绍了IO体系并详细介绍了字节流以及字符流,本文主要是讲述操作文件的File.转化流.标准输入与输出.Properties.打印流以及序列流. File File英文为"文件 ...

  8. IO流(一)__File对象和字符流FileWriter FileReader

    IO流:IO流用来处理设备之间的数据传输,Java对于流的操作对象都在IO包中将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出 流分为字节流和字符流字符流的由来:其实就是字节流读取文字字节 ...

  9. Java 学习笔记 IO流与File操作

    可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件 读文件示例代码 File file = new File("D:\\test\\t.txt" ...

随机推荐

  1. Java单体应用 - Markdown - 03.高级技巧

    原文地址:http://www.work100.net/training/monolithic-markdown-advance.html 更多教程:光束云 - 免费课程 高级技巧 序号 文内章节 视 ...

  2. [洛谷P4585] [FJOI2015] 火星商店问题

    Description 火星上的一条商业街里按照商店的编号 \(1\),\(2\) ,-,\(n\) ,依次排列着 \(n\) 个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数 \(va ...

  3. JUC中的原子操作类及其原理

    昨天简单的看了看Unsafe的使用,今天我们看看JUC中的原子类是怎么使用Unsafe的,以及分析一下其中的原理! 一.简单使用AtomicLong 还记的上一篇博客中我们使用了volatile关键字 ...

  4. laravel5.5的服务容器分析

    简介 服务容器是Laravel的核心.见名知意,服务容器就是一个存放服务的地方,当我们需要某个服务的时候,我们就可以从这个容器中取出我们需要的服务.用更专业一点的术语来说,官网定义服务容器是这样的: ...

  5. 基准测试--->sysbench

    sysbench sysbench简介 sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库:主要包括以下几种测试: cpu性能 磁盘io性能 调度程序性能 内存分配及传输速度 POSI ...

  6. try catch finally的理解

    定义以及用法: try/catch/finally 语句用于处理代码中可能出现的错误信息. 错误可能是语法错误,通常是程序员造成的编码错误或错别字.也可能是拼写错误或语言中缺少的功能(可能由于浏览器差 ...

  7. 使用 web3D 技术的风力发电场展示

    前言    风能是一种开发中的洁净能源,它取之不尽.用之不竭.当然,建风力发电场首先应考虑气象条件和社会自然条件.近年来,我国海上和陆上风电发展迅猛.海水.陆地为我们的风力发电提供了很好地质保障.正是 ...

  8. ROS中的3D建模机器人(三)

    一.利用xacro理解机器人建模 当我们创建复杂的机器人模型时,URDF的灵活性将会降低,URDF缺少的主要特性是简单的.可重用性,模块化和可编程性. URDF是一个单独的文件我们不能在它里面包含其他 ...

  9. VS2013下OpenCV2.48配置

    VS2013+OpenCV2.48配置 一.下载OpenCV OpenCV下载地址http://opencv.org/ SDK下载链接在页面右侧 根据平台选择相应的SDK下载.在Windows开发下开 ...

  10. 简明 homebrew

    介绍 包管理工具几乎已经成为现代操作系统或者开发平台不可或缺的工具软件,无论做开发,或是管理服务器,都免不了用到一些第三方依赖包.包管理工具的基本功能就是提供一个集中的平台,可以在这里找到大部分流行的 ...