JAVA核心技术I---JAVA基础知识(文件系统及java文件基本操作)

一:文件概述

文件系统是由OS(操作系统)管理的
文件系统和Java进程是平行的,是两套系统
文件系统是由文件夹和文件递归组合而成
文件目录分隔符
–Linux/Unix 用/隔开
–Windows用\隔开,涉及到转义,在程序中需用/或\\代替
文件包括文件里面的内容和文件基本属性
文件基本属性:名称、大小、扩展名、修改时间等

二:文件类File

java.io.File是文件和目录的重要类(JDK6及以前是唯一)
–目录也使用File类进行表示
File类与OS无关,但会受到OS的权限限制
常用方法
–createNewFile,delete,exists, getAbsolutePath, getName,
getParent,getPath, isDirectory, isFile, length, listFiles, mkdir, mkdirs
注意:File不涉及到具体的文件内容只涉及属性

(一)常用方法实现

    public static void main(String[] args) {
        File d = new File("D:\\MyJava\\Code\\JH15\\bin");
        if (!d.exists()) {    //用于判断是否存在目录/文件
            System.out.println("dir not exists");
        }else {
            System.out.println("dir exists");
        }

        File f = new File("D:\\MyJava\\Code\\JH15\\bin\\test.c");
        if(!f.exists()) {
            System.out.println("file not exist");
            try {
                f.createNewFile();    //创建文件必须捕获异常
            }catch(IOException e) {
                System.out.println("file create fail"+e.getMessage());
            }
        }

        File dd = new File("D:\\MyJava\\Code\\JH15\\bin\\aa\\bb\\cc");
        if(!dd.exists()) {
            System.out.println("create dirs");
            dd.mkdirs();    //mkdir创建一级目录 mkdirs创建多级目录
        }

        File fs[] = d.listFiles();    //listFiles返回目录下的所有文件(对象)
        for(File fitem : fs) {
            //getPath获取文件的绝对路径,getName获取文件名,length获取文件大小,lastModified获取文件最后一次修改时间(时间戳)
            System.out.println(fitem.getPath()+" "+fitem.getName()+" "+fitem.length()+" "+fitem.lastModified());
        }
    }

三:新的文件系统类(补充File类)

–是java.io.File的有益补充
• 文件复制和移动
• 文件相对路径
• 递归遍历目录
• 递归删除目录
• .......

(一)Path, Files

1.Path接口类:Path 和 java.io.File 基本类似

Path表示路径,可以是文件的路径,也可以是目录的路径
可用于在文件系统中定位文件的对象。 它通常表示系统相关的文件路径。 
Path是接口,无法实例化对象,借助辅助类Paths来实现
Files中所有成员都是静态方法,通过路径实现了对文件的基本操作。
FIles类和Path接口。他们两封装了用户对文件的所有可能的操作,相比于File类来说,使用起来方便很多。

接口方法:

int compareTo(Path other)              比较两个抽象的路径词典。
boolean endsWith(Path other)           测试此路径是否以给定的路径结束。
boolean endsWith(String other)         测试此路径是否以 Path结束,通过转换给定的路径字符串,完全按照 endsWith(Path)方法指定的方式构建。
boolean equals(Object other)           测试此路径与给定对象的相等性。
Path getFileName()             将此路径表示的文件或目录的名称返回为 Path对象。
FileSystem getFileSystem()        返回创建此对象的文件系统。
Path getName(int index)          返回此路径的名称元素作为 Path对象。
int getNameCount()             返回路径中的名称元素的数量。
Path getParent()              返回 父路径 ,或 null如果此路径没有父。
Path getRoot()                返回此路径的根组分作为 Path对象,或 null如果该路径不具有根组件。
int hashCode()               计算此路径的哈希码。
boolean isAbsolute()           告诉这条路是否是绝对的。
Iterator<Path> iterator()        返回此路径的名称元素的迭代器。
Path normalize()              返回一个路径,该路径是冗余名称元素的消除。
Path relativize(Path other)       构造此路径和给定路径之间的相对路径。
Path resolve(Path other)         根据这条路径解决给定的路径。
Path resolve(String other)        一个给定的路径字符串转换为 Path并解析它针对此 Path在完全按规定的方式 resolve方法。
Path resolveSibling(Path other)     根据此路径的 parent路径解决给定的路径。
Path resolveSibling(String other)    将给定的路径字符串转换为 Path ,并按照 resolveSibling方法指定的方式将其解析为该路径的 parent路径。
boolean startsWith(Path other)     测试此路径是否以给定的路径开始。
boolean startsWith(String other)    测试此路径是否以 Path ,通过转换给定的路径字符串,按照 startsWith(Path)方法指定的方式构建。
Path subpath(int beginIndex, int endIndex) 返回一个相对的 Path ,它是该路径的名称元素的子序列。
Path toAbsolutePath()           返回表示此路径的绝对路径的 Path对象。
File toFile()               返回表示此路径的File对象。
Path toRealPath(LinkOption... options) 返回现有文件的 真实路径。
String toString()             返回此路径的字符串表示形式。  ....

2.补充Paths类

和Path接口相关的还有一个类Paths,这个类非常简单,只有两个方法加一个私有构造方法。

public static Path get(String first, String... more)
将路径字符串或从路径字符串连接起来的一系列字符串转换为Path 。 如果more没有指定任何元素,那么first参数的值是要转换的路径字符串。如果more指定一个或多个元素,则每个非空字符串(包括first )被认为是名称元素的序列(参见Path ),并且被连接以形成路径字符串。 关于字符串如何连接的细节是提供者特定的,但通常它们将使用name-separator作为分隔符进行连接。 例如,如果名称分隔符为“ / ”并调用getPath("/foo","bar","gus") ,则路径字符串"/foo/bar/gus"将转换为Path 。 一个Path表示空路径如果返回first是空字符串, more不包含任何非空字符串。 
参数
  first - 路径字符串或路径字符串的初始部分
  more - 要连接的附加字符串以形成路径字符串
结果
  结果 Path 

3.Files

该类只包含对文件,目录或其他类型文件进行操作的静态方法。 
整个FIles类中,都是静态方法,没有一个实例域。
这个类就是为了实现对文件的各种操作

java 文件操作(二)---Files和Path

(二) DirectoryStream, FileVisitor,FileSystem

DirectoryStream

一个对象来迭代目录中的条目。 目录流允许方便地使用for-each结构来遍历目录。 
Path dir = ...
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
   for (Path entry: stream) {
       ...
   }
} 

FileVisitor

文件访问者 该接口的实现被提供给Files.walkFileTree方法来访问文件树中的每个文件。 

FileSystem

文件系统的工厂方法。 该类定义了getDefault方法来获取默认文件系统和工厂方法来构建其他类型的文件系统。 

(三)方法实现

1.Path

        // 获得path方法一,c:/temp/abc.txt
        Path ph = FileSystems.getDefault().getPath("D:\\MyJava\\Code\\JH16\\bin", "CD.class");
        System.out.println(ph.getFileName());

        // 获得path方法二,用File的toPath()方法获得Path对象
        File fl = new File("D:\\MyJava\\Code\\JH16\\bin\\CD.class");
        Path phOth = fl.toPath();
        System.out.println(phOth.getFileName());
        // 0,说明这两个path是相等的
        System.out.println(ph.compareTo(phOth));

        // 获得path方法三
        Path phOth2 = Paths.get("D:\\MyJava\\Code\\JH16\\bin", "CD.class");
        System.out.println(phOth2.getFileName());

        //合并两个path
        Path phOth3 = Paths.get("D:\\MyJava\\Code\\JH16\\bin");
        System.out.println("Path4:"+phOth3.resolve("CD.class"));

        if(Files.isReadable(ph)) {
            System.err.println("file is readable");
        }else {
            System.err.println("file is not readable");
        }
CD.class
CD.class0
CD.class
Path4:D:\MyJava\Code\JH16\bin\CD.class
file is readable

2.Files类

public class FilesTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        moveFile();
        fileAttributes();
        createDirectory();
    }

    private static void createDirectory() {
        // TODO Auto-generated method stub
        Path ph = Paths.get("D:\\MyJava\\Code\\JH16\\test\\aa\\bb");
        try {
            //创建文件夹
            if(Files.notExists(ph)) {
                Files.createDirectories(ph);    //递归创建
                System.out.println("create dir");
            }else {
                System.out.println("dir exists");
            }

            //设置文件路径
            Path f1 = ph.resolve("A.java");
            Path f2 = ph.resolve("B.jpg");
            Path f3 = ph.resolve("C.txt");
            Path f4 = ph.resolve("D.c");

            Files.createFile(f1);
            Files.createFile(f2);
            Files.createFile(f3);
            Files.createFile(f4);

            //不加条件遍历,变量目录路径下的所有文件
            DirectoryStream<Path> paths = Files.newDirectoryStream(ph);
            for(Path p: paths) {
                System.out.println(p.getFileName());
            }

            System.out.println("========");

            //加上条件过滤,过滤文件一java txt结尾文件
            DirectoryStream<Path> pathFielter = Files.newDirectoryStream(ph,"*.{java,txt}");
            for(Path p: pathFielter) {
                System.out.println(p.getFileName());
            }

        }catch(IOException e) {
            e.printStackTrace();
        }
    }

    private static void fileAttributes() {
        // TODO Auto-generated method stub
        Path path = Paths.get("D:\\MyJava");    //获取路径

        System.out.println(path.isAbsolute());    //判断是否为绝对路径
        System.out.println(Files.isDirectory(path));

        try {
            //获取文件属性
            //不需要遵循符号链接NOFOLLOW_LINKS
            BasicFileAttributes attrs = Files.readAttributes(path,BasicFileAttributes.class,LinkOption.NOFOLLOW_LINKS);
            //读取文件的属性作为批量操作。
            System.out.println(attrs.isDirectory());
            System.out.println(attrs.lastModifiedTime());
            System.out.println(attrs.lastModifiedTime().toMillis());
            System.out.println(new Date(attrs.lastModifiedTime().toMillis()));    //时间戳转时间
            System.out.println(new Date(attrs.lastModifiedTime().toMillis()).toLocaleString());
        }catch(IOException e) {
            e.printStackTrace();
        }
    }

    private static void moveFile() {
        // TODO Auto-generated method stub
        Path form = Paths.get("D:\\MyJava","test.txt");
        Path to = form.getParent().resolve("Code\\JH17\\tt.txt");    //注意这个路径后面是加上新的文件名

        try {
            //path获取文件名 Files。size获取文件大小
            System.out.println(form.getFileName()+": "+Files.size(form));
            //Files.move移动文件 Files.copy拷贝文件
            Files.copy(form, to,StandardCopyOption.REPLACE_EXISTING);
        }catch(IOException e) {
            System.err.println(e.getMessage());
        }
    }

}
test.txt: 2014
true
true
true
2019-01-09T02:44:41.085042Z
1547001881085
2019-01-09
2019年1月9日 上午10:44:41
dir exists
D:\MyJava\Code\JH16\test\aa\bb\A.java
A.java
B.jpg
C.txt
D.c
========
A.java
C.txt

原文地址:https://www.cnblogs.com/ssyfj/p/10242695.html

时间: 2025-01-18 02:40:56

JAVA核心技术I---JAVA基础知识(文件系统及java文件基本操作)的相关文章

[基础] Java目录(摘自Java核心技术·卷1 基础知识)

Java核心技术·卷1 基础知识(原书第9版) 第1章 Java程序设计概述 1.1 Java程序设计平台 1.2 Java"白皮书"的关键术语 1.2.1 简单性 1.2.2 面向对象 1.2.3 网络技能 1.2.4 健壮性 1.2.5 安全性 1.2.6 体系结构中立 1.2.7 可移植性 1.2.8 解释型 1.2.9 高性能 1.2.10 多线程 1.2.11 动态性 1.3 Java applet与Internet 1.4 Java发展简史 1.5 关于Java的常见误解

《java核心技术 卷1 基础知识》二

<Java核心技术 卷1 基础知识>第4-5章 在Java中没有类就无法做任何事情 new操作符的返回值是一个引用 在Java中,如果使用一个未初始化的指针,运行系统会产生一个运行时错误. Date 用来表示时间点 LocalDate 日历表示法 同时不推荐使用Date类来处理日历 推荐使用LocalDate来处理日历 每一个拥有名字的类都会被编译生成对应的class文件 所有的Java对象都是在堆中构造的,构造器总是随着new操作符一起使用 在Java中,所有的方法都必须在类的内部定义,但并

《Java核心技术 卷1 基础知识》三

<Java核心技术 卷1 基础知识> 第六章 接口和内部类 接口不是类,而是对类的的一组需求描述. 接口不能包含实例域--接口没有实例 可以将接口看作没有实例域的抽象类 要将类声明为实现某个接口,需要使用关键字implements. 类实现一个接口的具体步骤为: 1)使用implements关键字进行声明要实现的接口 2)对接口中的所有方法进行定义 接口中的所有方法默认为public 但在实现接口时需要声明为public 这里介绍了Comparable接口,该接口只有一个方法,compareT

《Java核心技术 卷1 基础知识》七

<Java核心技术 卷1 基础知识> 第10章 图形程序设计 在Java1.0刚出现时,就包含了一个基本GUI程序设计的类库,即抽象窗口工具箱(Abstract Window Toolkit,AWT) 基本AWT库采用将处理用户界面元素的任务委派给每个目标平台(如windows.Macintosh等)的本地GUI工具箱的方式, 由本地工具箱负责用户界面元素的创建和动作 但由于在不同的平台上,操作行为有一些微妙的差别 因此,AWT也由"一次编写,随处使用"变为"一次

《Java核心技术 卷1 基础知识 原书第9版》pdf

下载地址:网盘下载 内容简介 编辑 CayS.Horstmann等编著,公飞编译的<Java核心技术>(CoreJava)自第1版出版以来,一直备受广大Java程序设计人员的青睐,畅销不衰,是Java经典书籍.第8版针对JavaSE6平台进行了全面更新,囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识.面向对象程序设计.接口与内部类.事件监听器模型.swing图形用户界面程序设计.打包应用程序.异常处理.登

《Java核心技术 卷1 基础知识》一

<java核心技术卷1 第1-3章> JDK Java Development Kit ,即Java开发工具包 但这个工具包的1.2-1.4版本被称为Java SDK,随后才改名为JDK JRE Java运行时环境,它包含虚拟机但不包括编译器 Java SE,Java Standard Edition,Java标准版本 Java EE,Java Enterprise Edition,Java企业版本 Java ME,Java Micro Edition,Java微观版本 Java2 这种提法始

Java核心技术 卷1 基础知识-第一天

基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长度是一定的,不会因为跨平台造成整数溢出 浮点型 两种 double float double的长度是float长度的两倍,双精度数值 但部分都是使用double ,在表示的时候 如果写作3.24 编译器会人会认为是double型 3.24F是float型 浮点数有三个特殊值 正无穷大 (正整数除以0

Java details from Java核心技术 卷1 基础知识(1)

Java是一种包括语言.虚拟机.即时编译.类库.执行环境的平台: 执行环境提供安全性.跨操作系统的可移植性.自动垃圾收集等服务: 设计初衷:简单性.面向对象.网络技能.健壮性.安全性.体系结构中立.可移植性.解释型.高性能.多线程.动态性 简单性:Java剔除了C++中的:头文件.指针运算(甚至指针语法).结构.联合.操作符重载.虚基类等: 面向对象:一种程序设计技术.C++多继承:Java单继承+接口.Java中元类模型(metaclass): 网络技能:Java应用程序能够通过URL打开和访

Java 核心技术 卷1 基础知识 List 13.1

List 13.1  LinkList/LinkedListTest.java java容器之LinkList package linkList; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; public class LinkListTest{ public static void main(String args[]){ List<String> a=new Linked

《Java核心技术 卷1 基础知识》四

第7章 异常.断言和日志 异常 在Java中,所有异常对象都是派生于Throwable类的一个实例. 如果Java内置的异常类不能够满足需求,用户可以创建自己的异常类 Error类层次结构描述了Java运行时系统的内部错误和自愿耗尽错误,应用程序不应该抛出这种类型的对象. Exception层次结构又分解为两个分支,一个分支派生于RuntimeException:另一个分支包含其他异常. 划分这两个分支的规则为: 由程序错误导致的异常属于RuntimeException: 程序本身没有问题,但由