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. W3C 带来了一个新的语言

    2019年12月5日,W3C 宣布: WebAssembly 核心规范 正式成为 Web 官方标准. 继 HTML, CSS, JavaScript 之后,WebAssembly 成为了第4个 Web ...

  2. 【红外DDE算法】数字细节增强算法的缘由与效果(我对FLIR文档详解)

    [红外DDE算法]数字细节增强算法的缘由与效果(我对FLIR文档详解) 1. 为什么红外系统中图像大多是14bit(甚至更高)?一个红外系统的性能经常以其探测的范围来区别,以及其对最小等效温差指标.首 ...

  3. Oracle设置序列方法

    create sequence SEQ_LoanApplicantGuarantee minvalue 1 nomaxvalue start with 1 increment by 1 nocycle ...

  4. 51Nod 1238 最小公倍数之和V3

    题目传送门 分析: 现在我们需要求: \(~~~~\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(i,j)\) \(=\sum_{i=1}^{n}\sum_{j=1}^{n}\frac ...

  5. Python学习,第七课 - 文件操作

    Python中对文件的相关操作详解 文件的操作在今后的Python开发中也是使用非常频繁的. 先说下对文件操作的流程 打开文件,得到文件的一个句柄,赋值给一个变量 然后通过句柄对文件进行操作(内容的增 ...

  6. 学_汇编语言_王爽版 要点采集笔记(未完待续&hellip;)

    第一章 基础知识 存储器(内存)存放CPU工作的指令和数据(CPU可以直接使用的信息在内存中存放):指令和数据都是二进制数没有任何区别,由CPU决定是数据还是指令 内存单元:存储器被分为若干个存储单元 ...

  7. 3分钟接入socket.io使用

    WebSocket 简介 传统的客户端和服务器通信协议是HTTP:客户端发起请求,服务端进行响应,服务端从不主动勾搭客户端. 这种模式有个明显软肋,就是同步状态.而实际应用中有大量需要客户端和服务器实 ...

  8. Navicat premium 12 for mac 无限试用

    Mac 终端输入 sudo rm -Rf ~/Library/Application\ Support/PremiumSoft\ CyberTech 重启电脑 成功

  9. Oracle数据库、实例、用户、表空间、表之间的关系

    完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等): 2) Oracle数据库实例则是一组Ora ...

  10. kubernetes secret 和 serviceaccount删除

    背景 今天通过配置创建了一个serviceaccounts和secret,后面由于某种原因想再次创建发现已存在一个serviceaccounts和rolebindings.rbac.authoriza ...