Java IO 之File操作

一.File中的两个常量分隔符

package File;

import java.io.File;

/**
 * 两个常量
 * 1、路径分隔符  ;
 * 2、名称分隔符     \ (windows)    /(linux等)
 */
@SuppressWarnings("all")
public class Demo01 {
    public static void main(String[] args) {
        System.out.println(File.pathSeparator);
        System.out.println(File.separator);
        //路径表示形式
        String path = "E:\\xp\\test\\2.jpg"; //不推荐
        //适合动态生成时使用
        path = "E:"+File.pathSeparator+"win7"+File.separator+"test"+File.separator+"2.jpg";
        path = "E:/win7/test/2.jpg";//推荐使用      
    }
}

运行结果:

;
\

二.相对路径与绝对路径

package File;

import java.io.File;

/**
 * 相对路径与绝对路径 构造File对象
 * 1.相对路径
 *    File(String parent,String child) ==>File("E:/xp/test","2.jpg");
 *    File(File parent,String child)  ==>File(new File("E:/xp/test"),"2.jpg");
 * 2.绝对路径
 *    src = new File("E:/xp/test/2.jpg");
 *    
 *  getName()  返回名称
 *  getPath()  如果是绝对的,返回绝对路径;如果是相对的,返回相对路径。
 *  getAbsolutePath()  返回绝对路径
 */

public class Demo02 {
    public static void main(String[] args) {
        String parentPath = "E:/xp/test";
        String name = "2.jpg";
        //相对路径
        File   src = new File(parentPath,name);
        //src = new File(new File(parentPath),name);
        //输出
        System.out.println(src.getName());
        System.out.println(src.getPath());
        System.out.println("-------------");
        //绝对路径
        src = new File("E:/xp/test/2.jpg");
        System.out.println(src.getName());
        System.out.println(src.getPath());
        System.out.println("-------------");
        //没有盘符,一user.dir构建
        src= new File("test.txt");
        //src= new File(".");//当前路径,通过这种方式可以找到当前工作空间路径。
        System.out.println(src.getName());//返回名称
        System.out.println(src.getPath());//如果是绝对的,返回绝对路径;如果是相对的,返回相对路径。
        System.out.println(src.getAbsolutePath());
    }
}

运行结果:

2.jpg
E:\xp\test\2.jpg
-------------
2.jpg
E:\xp\test\2.jpg
-------------
test.txt
test.txt
G:\program\javase\IOFile\test.txt

三.File的常用方法

package File;

import java.io.File;
import java.io.IOException;
/**
 * 常用方法
 * 1、文件名
 *      getName() 文件名、路径名
 *      getPath()  路径名
 *      getAbsoluteFile() 绝对路径所对应的File对象
 *      getAbsolutePath() 绝对路径名
 *      getParent() 返回父目录
 *   
 * 2、判断信息
 *      exists()
 *      canWrite()
 *      canRead()
 *      isFile()
 *      isDirectory()  
 *      isAbsolute()   消除平台差异,如以盘符开头,其他以/开头        
 * 3、长度(字节数) 不能读取文件夹的长度
 *      
 * 4、创建、删除文件
 *      createNewFile  创建新文件,如果不存在,进行创建;如果存在,返回false。
 *      临时文件
 */

@SuppressWarnings("all")
public class Demo03 {
    public static void main(String[] args) {
        test01();
        System.out.println("========");
        test02();
        System.out.println("========");
        try {
            test03();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件操作失败");
        }
    }

    //1、获取文件名称
    public static void test01()
    {
        //File src = new File("E:/xp/test/2.jpg");
        File src = new File("test/2.txt");
        System.out.println(src.getName());//名称
        //如果是绝对路径,返回完整路径,否则相对路径
        System.out.println(src.getPath());
        //返回绝对路径
        System.out.println(src.getAbsolutePath());
        //返回上一级目录,如果是相对路径,可能返回null;如new File("2.txt");
        System.out.println(src.getParent());
    }

    //2、判断信息    读取相关信息,不是读取内容,而是位置,大小,占用空间,创建时间等属性
    public static void test02()
    {
        //String path = "2.txt";
        String path = "G:/love.txt";
        File src = new File(path);      
        System.out.println("文件是否存在:"+src.exists());     
        //是否可读写
        System.out.println("文件是否可写:"+src.canWrite());       
        //isFile()、isDirectory()        
        if(src.isFile())
        {
            System.out.println("文件");   
        }   
        else if(src.isDirectory()) {
            System.out.println("文件夹");
        }
        else {
            System.out.println("文件不存在");
        }       
        System.out.println("是否为绝对路径:"+src.isAbsolute());
        System.out.println("长度为:"+src.length());//这个长度是字节数
    }

    //3、创建,删除文件
    public static void test03() throws IOException
    {
        //创建文件
        //con 系统关键字,不能创建成功。
        String path = "F:/100.txt";
        File src = new File(path);
        if(!src.exists())
        {
            boolean flag = src.createNewFile();
            System.out.println(flag?"创建成功":"创建失败");
        }

        //删除文件
        boolean flag = src.delete();
        System.out.println(flag?"删除成功":"删除失败");

        //static createTempFile(前缀3个字节长,后缀默认.temp) 默认临时空间
        //static createTempFile(前缀3个字节长,后缀默认.temp,目录)       
        File temp = File.createTempFile("tes", ".temp",new File("G:/"));        
        try {
            Thread.sleep(2000);
            temp.deleteOnExit();//退出即删除
        } catch (InterruptedException e) {
            e.printStackTrace();
        }       
    }
}

运行结果:

2.txt
test\2.txt
G:\program\javase\IOFile\test\2.txt
test
========
文件是否存在:true
文件是否可写:true
文件
是否为绝对路径:true
长度为:32
========
创建成功
删除成功

四.创建目录

package File;

import java.io.File;
import java.io.FilenameFilter;
/**
 *  创建目录
 *  mkdir() 创建目录  必需确保父目录存在,如果不存在,创建失败。
 *  mkdirs() 创建目录  如果父目录链不存在,一同创建。
 *  String[] list()  文件|目录名   字符串形式
 *  File[] listFiles()  文件|目录名   File对象形式
 *  File[] listFiles(FilenameFilter filter)  过滤
 */

@SuppressWarnings("all")
public class Demo04 {
    public static void main(String[] args) {
        test01();
        test02();
    }

    public static void test01()
    {
        String path = "G:/try/123/123/325";
        File src = new File(path);
        //src.mkdir();
        src.mkdirs();
        System.out.println("创建成功。");
    }
    public static void test02()
    {
        //String path = "G:/try/123";
        String path = "G:/work";
        File src = new File(path);//文件夹
        if(src.isDirectory())//存在并且为目录
        {
            System.out.println("======子目录|子文件名 《字符串的表现形式》======");
            String[] subNames = src.list();
            for(String temp:subNames)
            {
                System.out.println(temp);
            }

            System.out.println("====子目录|子文件 《File对象》=====");
            File[]  subFiles = src.listFiles();         
            for(File temp:subFiles ) 
            {
                System.out.println(temp.getAbsolutePath());
            }

            System.out.println("======子文件,Java对象======");
            //命令设计模式
            subFiles = src.listFiles(new FilenameFilter() {
                /**
                 * dir代表src
                 */
                @Override
                public boolean accept(File dir, String name) {
                    //System.out.println(dir.getName());
                    //System.out.println(dir.getAbsolutePath());
                    //必须是文件且后缀是.java
                    return  new File (dir,name).isFile()&&name.endsWith(".rar");
                }
            });
            for(File temp:subFiles)
            {
                System.out.println(temp.getAbsolutePath());
            }
        }
    }
}

运行结果:

创建成功。
======子目录|子文件名======
123
324
dsafds.java
sdafd.java
新建文件夹 (3)
新建文件夹 (4)
====子目录|子文件File对象=====
G:\try\123\123
G:\try\123\324
G:\try\123\dsafds.java
G:\try\123\sdafd.java
G:\try\123\新建文件夹 (3)
G:\try\123\新建文件夹 (4)
======子文件,Java对象======
G:\try\123\dsafds.java
G:\try\123\sdafd.java

五.输出子孙级目录或文件的名称

package File;

import java.io.File;
import java.util.Arrays;

/**
 * 输出子孙级目录|文件的名称
 * 1、listFile()
 * 2、递归
 * 
 * static listRoots() 根路径
 * @author liguodong
 */
public class Demo05 {
    public static void main(String[] args) {
        String path = "G:/try/123";
        File parent = new File(path);
        printName(parent);
        System.out.println("----------");
        File[] roots = File.listRoots();
        System.out.println(Arrays.toString(roots));
    }

    public static void printName(File src){
        if(null==src||!src.exists()){
            return;
        }
        System.out.println(src.getAbsolutePath());
        if(src.isDirectory()){
            for(File sub:src.listFiles()){
                printName(sub);
            }
        }
    }
}

运行结果:

G:\try\123
G:\try\123\123
G:\try\123\123\325
G:\try\123\432
G:\try\123\432\1.txt
G:\try\123\432\2.txt
G:\try\123\432\3.txt
G:\try\123\4344
----------
[C:\, D:\, E:\, F:\, G:\, H:\, K:\]

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。