文档章节

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

fengsehng
 fengsehng
发布于 2016/11/09 09:15
字数 1979
阅读 3
收藏 0
点赞 0
评论 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
朝阳
程序员
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank ⋅ 前天 ⋅ 0

图文详解 Java 字节码,想不懂都难!

即便对那些有经验的Java开发人员来说,阅读已编译的Java字节码也很乏味。为什么我们首先需要了解这种底层的东西?这是上周发生在我身上的一个简单故事:很久以前,我在机器上做了一些代码更改...

开源中国 ⋅ 04/23 ⋅ 0

Win10系统下eclipse的基本配置 编码格式 classpath原理 import工作机制

eclipse是用来编译java文件的一个软件 国内也有汉化版,我也不知道该怎么上传……忘了从哪里搞来了 不过用了一段时间就还原原来的配置了因为网上的教程之类的方法都是英文版的 为了和网上的配...

codingcoge ⋅ 03/17 ⋅ 0

hadoop程序员用自己5年的实战经验告诉我大数据是这样搭建环境

Hadoop由GNU / Linux平台及其版本支持。因此,我们必须安装一个Linux操作系统来设置Hadoop环境。如果您有 除Linux以外的操作系统,您可以在其中安装Virtualbox软件,并在Virtualbox内部安装L...

卢家大少 ⋅ 昨天 ⋅ 0

培训云计算学校,虚拟机基本结构讲解

我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员,认知程度达不到那么深入。一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机...

长沙千锋 ⋅ 05/17 ⋅ 0

Jenkins 教程(一)实现自动化打包及邮件通知

个人不喜欢装腔作势一堆专业术语放上去,让大多数人看不懂来提升逼格(所谓的专家),所以我简单的介绍jenkins是干啥的。本文使用jenkins,就是让它把git仓库里的东西取出来,然后在jenkins容器...

FantJ ⋅ 05/26 ⋅ 0

深入理解Java虚拟机的体系结构

JAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果...

java进阶 ⋅ 昨天 ⋅ 0

Java 实现的 SSH 库 - Java-SSH

JSSH 是一个实现了SSH 1.5客户端协议的Java类库,可以被应用于其他Java应用程序. 需要注意的是,JSSH不能用于applet,因为它需要访问本地文件系统来检查服务器的host key是否存在于~/.ssh/kn...

匿名 ⋅ 2012/04/12 ⋅ 0

类加载器ClassLoader-1

一, 类加载器深入剖析 1,Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机将结束生命周期: –执行了System.exit()方法 –程序正常执行结束 –程序在执行过程中遇到了异常或错误而...

康熙兄弟 ⋅ 06/02 ⋅ 0

JDK 源码阅读 : FileDescriptor

原文出处:木杉的博客 操作系统使用文件描述符来指代一个打开的文件,对文件的读写操作,都需要文件描述符作为参数。Java虽然在设计上使用了抽象程度更高的流来作为文件操作的模型,但是底层...

木杉的博客 ⋅ 06/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部