文档章节

【56】java本地文件File类详解

fengsehng
 fengsehng
发布于 2016/11/09 09:15
字数 1979
阅读 5
收藏 0

1.java类的介绍

public class File extends Object implements Serializable, Comparable<File> 文件和目录路径名的抽象表示形式。

File既可以表示文件也可以表示目录。

用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。

2.构造方法

File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri)
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

代码

package com.qunar.bean;

import java.io.File;
import java.net.URISyntaxException;

public class FileDemo {

    public static void main(String[] args) throws URISyntaxException {
        String pathname = "E:\\Recommended system";
        // File(String pathname)
        File file1 =new File(pathname);

        // File(String parent,String child)
        File file2 =new File(pathname,"train_data.txt");

        // File(File parent,String child)
        File file3 = new File(file1, "train_data.txt");

        // File(URI uri) 
        // File file4 =new File(new URI(""));

        // separator 跨平台分隔符
        File file4 =new File("E:"+File.separator+"Recommended system");

        System.out.println(file1);
        System.out.println(file2);
        System.out.println(file3);
        System.out.println(file4);
    }
}

运行结果:

E:\Recommended system
E:\Recommended system\train_data.txt
E:\Recommended system\train_data.txt
E:\Recommended system

3.创建与删除方法

这里写图片描述

代码实例

ublic class FileDemo {

    public static void main(String[] args) throws URISyntaxException {
        String pathname = "D:\\Recommended system.txt";
        // 创建文件实例
        File file = new File(pathname);

        try {
            // 如果文件存在返回false,否则返回true并且创建文件
            if(file.createNewFile()){
                System.out.println("创建文件["+pathname+"]");
            }//if
            else{
                System.out.println("文件["+pathname+"]已存在");
            }//else
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class FileDemo {

    public static void main(String[] args) {
        String pathname = "D:\\Recommended system.txt";
        // 创建文件实例
        File file = new File(pathname);

        //如果文件存在返回true并且删除文件,否则返回false
        if(file.delete()){
            System.out.println("删除文件["+pathname+"]");
        }//if
        else{
            System.out.println("文件["+pathname+"]不存在");
        }//else
    }
}
public class FileDemo {

    public static void main(String[] args) {
        String pathname = "D:\\Recommended system";
        String pathname2 = "D:\\Recommended system2\\Paper\\News";
        // 创建文件实例
        File file = new File(pathname);
        File file2 = new File(pathname2);

        //如果目录不存在返回true并且创建目录,否则返回false
        if(file.mkdir()){
            System.out.println("创建目录["+pathname+"]");
        }//if
        else{
            System.out.println("目录["+pathname+"]已存在");
        }//else

        //如果多级目录不存在返回true并且创建多级目录,否则返回false
        if(file2.mkdirs()){
            System.out.println("创建多级目录["+pathname2+"]");
        }//if
        else{
            System.out.println("多级目录["+pathname2+"]已存在");
        }//else
    }
}

4.判断方法

这里写图片描述

代码实例

public class FileDemo {

    public static void main(String[] args) {
        String pathname = "D:\\Recommended system\\train_data.txt";
        // 创建文件实例
        File file = new File(pathname);

        // 判断文件是否可执行
        if(file.canExecute()){
            System.out.println("文件["+pathname+"]可执行");
        }//if
        else{
            System.out.println("文件["+pathname+"]不可执行");
        }//else

        // 判断文件是否可读
        if(file.canRead()){
            System.out.println("文件["+pathname+"]可读");
        }//if
        else{
            System.out.println("文件["+pathname+"]不可读");
        }//else

        // 判断文件是否可写
        if(file.canWrite()){
            System.out.println("文件["+pathname+"]可写");
        }//if
        else{
            System.out.println("文件["+pathname+"]不可写");
        }//else

        // 判断文件是否存在
        if(file.exists()){
            System.out.println("文件["+pathname+"]存在");
        }//if
        else{
            System.out.println("文件["+pathname+"]不存在");
        }//else

        // 判断文件是否是目录
        if(file.isDirectory()){
            System.out.println("文件["+pathname+"]是目录文件");
        }//if
        else{
            System.out.println("文件["+pathname+"]不是目录文件");
        }//else

        // 判断是否是一个绝对路径
        if(file.isAbsolute()){
            System.out.println("["+pathname+"]是绝对路径");
        }//if
        else{
            System.out.println("["+pathname+"]不是绝对路径");
        }//else
    }
}

5.获取方法

这里写图片描述

代码实例

public class FileDemo {

    public static void main(String[] args) {
        String pathname = "E:\\Recommended system";
        // 创建文件实例
        File file = new File(pathname);

        // 返回文件或者目录的名称
        System.out.println("GetName->"+file.getName());
        // 返回路径
        System.out.println("GetPath->"+file.getPath());
        // 返回文件长度
        System.out.println("Length->"+file.length());

        // 返回给定路径下的文件和目录字符串数组
        String[] files = file.list();
        for (String name : files) {
            System.out.println("名称:"+name);
        }//for

        File[] files2 = file.listFiles();
        for (File file2 : files2) {
            if(file2.isFile()){
                System.out.println("文件名称:"+file2.getName());
            }//if
            else if(file2.isDirectory()){
                System.out.println("目录名称:"+file2.getName());
            }//else
        }//for

        // 列出可用的系统盘
        File[] files3 = file.listRoots();
        for (File file3 : files3) {
            System.out.println("文件名称:"+file3.getPath());
        }
    }
}

运行结果:

GetName->Recommended system
GetPath->E:\Recommended system
Length->16384
名称:540135b87c6d0.csv
名称:5403c3df31780.doc
名称:baidu-salon-38-1.mp3
名称:baidu-salon-38-1.pdf
名称:TextAnalysis.rar
名称:train_data.txt
名称:中文停用词表(比较全面_有1208个停用词).txt
名称:主题提起
名称:协同过滤
名称:天猫推荐算法.mp3
名称:天猫推荐算法.pdf
名称:推荐系统入门.zip
名称:推荐系统实战经验与效果提升之道.pdf

文件名称:540135b87c6d0.csv
文件名称:5403c3df31780.doc
文件名称:baidu-salon-38-1.mp3
文件名称:baidu-salon-38-1.pdf
文件名称:TextAnalysis.rar
文件名称:train_data.txt
文件名称:中文停用词表(比较全面_有1208个停用词).txt
目录名称:主题提起
目录名称:协同过滤
文件名称:天猫推荐算法.mp3
文件名称:天猫推荐算法.pdf
文件名称:推荐系统入门.zip
文件名称:推荐系统实战经验与效果提升之道.pdf

文件名称:C:\
文件名称:D:\
文件名称:E:\
文件名称:F:\
文件名称:G:\
文件名称:H:\  

6.文件过滤例子:

public class FileDemo {

    public static void main(String[] args) {
        String pathname = "E:\\Recommended system";
        // 创建文件实例
        File file = new File(pathname);

        // 文件过滤
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File file, String filename) {
                return filename.endsWith(".mp3");
            }
        });

        // 打印输出
        for (File file2 : files) {
            System.out.println("名称:"+file2.getName());
        }//for
    }
}

运行结果:

名称:baidu-salon-38-1.mp3
名称:天猫推荐算法.mp3
名称:百度推荐实践.mp3

7.列出文件夹下的全部文件:

public class FileDemo {

    public static void ListAllFile(File file){
        if(!file.exists()){
            throw new IllegalArgumentException("目录["+file+"]不存在");
        }//if
        if(!file.isDirectory()){
            throw new IllegalArgumentException("["+file+"]不是目录");
        }//if
        // 列出指定路径下的全部文件或目录
        File[] files = file.listFiles();
        for (File fileName : files) {
            // 判断是否是目录 如果是递归
            if(fileName.isDirectory()){
                ListAllFile(fileName);
            }//if
            // 否则打印输出
            else{
                System.out.println(fileName.getPath());
            }//else
        }//for
    }

    public static void main(String[] args) {
        String pathname = "E:\\Recommended system";
        // 创建文件实例
        File file = new File(pathname);
        // 列出全部文件或目录
        ListAllFile(file);

运行结果:

E:\Recommended system\540135b87c6d0.csv
E:\Recommended system\5403c3df31780.doc
E:\Recommended system\baidu-salon-38-1.mp3
E:\Recommended system\baidu-salon-38-1.pdf
E:\Recommended system\TextAnalysis.rar
E:\Recommended system\train_data.txt
E:\Recommended system\中文停用词表(比较全面_有1208个停用词).txt
E:\Recommended system\主题提起\中文新闻关键事件的主题句识别.pdf
E:\Recommended system\主题提起\加入时间因素的个性化信息过滤技术.pdf
E:\Recommended system\主题提起\动态新闻主题信息推荐系统设计.pdf

E:\Recommended system\协同过滤\PatternRecognitionAndMachineLearning.pdf
E:\Recommended system\协同过滤\一种改进的Item-based协同过滤推荐算法.pdf
E:\Recommended system\协同过滤\一种电影个性化推荐系统的研究与实现.pdf
E:\Recommended system\协同过滤\个性化搜索引擎中用户协作推荐算法的研究.pdf
E:\Recommended system\协同过滤\个性化新闻推荐引擎中新闻分组聚类技术的研究与实现.caj
E:\Recommended system\协同过滤\协同过滤技术在个性化推荐中的运用.pdf
E:\Recommended system\协同过滤\基于协同过滤的个性化新闻推荐系统的研究与实现.caj
E:\Recommended system\协同过滤\基于矩阵分解的协同过滤算法.pdf
….
E:\Recommended system\天猫推荐算法.mp3
E:\Recommended system\天猫推荐算法.pdf
E:\Recommended system\推荐系统入门.zip

8.getPath、getAbsolutePath和getCanonicalPath的区别

File file = new File("./build.gradle");
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
try {
    System.out.println(file.getCanonicalPath());
} catch (IOException e) {
    e.printStackTrace();
}

结果如下

./build.gradle
/Users/wuchen/IdeaProjects/Artifact/./build.gradle
/Users/wuchen/IdeaProjects/Artifact/build.gradle

9.file.delete()

文件删除失败的几个原因:

文件或文件夹不存在
文件夹内不为空
没有权限
文件正在被以独占的方式打开

File file = new File("Exposure.java");
try {    
  FileOutputStream fileOutputStream = new FileOutputStream(file);
} catch (IOException e) {
  e.printStackTrace();
}
System.out.println(file.delete());

我的微信二维码如下,欢重点内容迎交流讨论

这里写图片描述

欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

微信订阅号二维码如下:

这里写图片描述

参考

http://blog.csdn.net/sunnyyoona/article/details/50386761
http://www.jianshu.com/p/bfbccae7ce78
http://www.itzhai.com/java-based-notebook-java-io-and-file-class-describes-the-basic-introduction-and-use-of.html

© 著作权归作者所有

共有 人打赏支持
fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
Instrumentation 实践详解

利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,有了这样的功能,开发者就可以实现更为灵活的和 了,这样的特性实际上提供了,使得开发者无需对 ...

陶邦仁
2014/12/30
0
0
多个字段中如何按其中两个进行排序(二次排序)

多个字段中如何按其中两个进行排序(二次排序) 1 原理 二次排序就是首先按照第一字段排序,然后再对第一字段相同的行按照第二字段排序,注意不能破坏第一次排序的结果。 这里主要讲如何使用...

闵开慧
2014/11/27
0
0
Java基础知识JNI 在Android中使用System.loadLibrary()

tiny6410中的部分硬件(串口、led、pwm蜂鸣器、adc等) 友善做了一个硬件库friendlyarm-hardware.so 如果android应用程序想要访问以上硬件时,就要使用java的JNI技术 1、JNI的全称为:Java ...

子曰疯
2013/09/02
0
0
ClassLoader详解及用途

ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回 这个类的class对象。 1.1 几个相关概念ClassLoader负责载入系统的所有Res...

aminqiao
2014/06/04
0
0
翻译--Gradle之Java工程入门

我们已经看到Gradle是一个通用构建工具,它可以完成相当多的任务,只要你能在脚本里定义好。如果你没写好脚本,它就啥也干不成。 大部分Java项目都是这样的流程:编译源文件,单元测试,打成...

davelet
2014/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js 对象赋值 去除关联性。

js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象 我最近在做一个vue 项目的时候,遇到了一个对象的问题。 当我们在项目需要 复制一个对象到另一个对象...

xiaogg
9分钟前
0
0
art-template4.0使用

art-template javascript 模板引擎,官网:https://github.com/aui/art-template 分为原生语法和简洁语法,本文主要是讲简洁语法 基础数据渲染 输出HTML 流程控制 遍历 调用自定义函数方法 ...

不负好时光
10分钟前
0
0
HANA tenant backup

HANA tenant backup Hello, Script from note 1651055 - Scheduling SAP HANA Database Backups in Linux isn't Multi-Tenant complient. I modified script to be able to backup tenant da......

rootliu
12分钟前
0
0
Java并发编程:阻塞队列

本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。 ...

Java小铺
14分钟前
0
0
mysql8添加用户帐户

版本8.0 MySQL 8.0参考手册 / ... / 添加用户帐户 6.3.2添加用户帐户 要创建MySQL帐户,请使用用于创建帐户和建立其权限的帐户管理语句,例如CREATE USER和 GRANT。这些语句使服务器对基础授...

SunHacker
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部