一:文件概述

文件系统是由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.class
0
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:
true
true
true
--09T02::.085042Z --
2019年1月9日 上午10::
dir exists
D:\MyJava\Code\JH16\test\aa\bb\A.java
A.java
B.jpg
C.txt
D.c
========
A.java
C.txt

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

  1. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

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

    基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...

  3. Linux基础知识第三讲,拷贝文件跟移动文件命令

    目录 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命令 1.tree命令常用选项 2.cp复制文件命令 3.mv 命令的使用 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命 ...

  4. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

  5. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  6. Java中浮点数的基础知识

    偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...

  7. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  8. java 程序运行的基础知识【Java bytecode】

    聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...

  9. Java学习1——计算机基础知识

    本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.

  10. java面试题:基础知识

    类和对象 Q:讲一下面向对象OOP思想. 面向对象主要是抽象,封装,继承,多态. 多态又分为重载和重写.重载主要是方法参数类型不一样,重写则是方法内容不一样. Q:抽象类和接口有什么区别? 抽象类中可 ...

随机推荐

  1. Gym100496H-House of Representatives-树

    树上每个元素有一个p,元素之间有距离d,计算一个元素u,使得sigma(d(i,u)*pi)最小. 两次dfs,第一次计算本节点以下的sigma(),第二次利用sump求解出ans. #include ...

  2. 洛谷P1781宇宙总统题解

    题目 此题原本是一个简单的排序,但因为数据范围的限制,所以变成了一个需采用字符串排序的题目,接下来我将给大家讲一下如何字符串排序. 首先先判断为位数上是否相同,如果不同再比较那一位的数就可以了 #in ...

  3. socket 10060错误解决方案

    错误提示: socket 10060 无法加载或初始化请求的服务提供程序 解决方案: 打开cmd命令行工具,运行  netsh winsock reset

  4. shell中,2>&1详解

    我们在Linux下经常会碰到nohup command>/dev/null 2>&1 &这样形式的命令.首先我们把这条命令大概分解下,首先就是一个nohup表示当前用户和系 ...

  5. python爬虫解析库学习

    一.xpath库使用: 1.基本规则: 2.将文件转为HTML对象: html = etree.parse('./test.html', etree.HTMLParser()) result = et ...

  6. 编写高质量代码:改善Java程序的151个建议 --[26~36]

    提防包装类型的null值 public static int testMethod(List<Integer> list) { int count = 0; for (Integer i ...

  7. js 正则表达式的使用(标志 RegExp exec() test() compile() $1...$9)

    一,标志 g (global,全局匹配标志) 执行正则表达式匹配或替换时,一般只要搜索到一个符合的文本就停止匹配或替换.使用该标志将搜索所有符合的文本直到文本末尾. i (ignoreCase,忽略大 ...

  8. 【洛谷P2257】YY的GCD

    题目大意:有 \(T\) 个询问,每个询问给定 \(N, M\),求 \(1\le x\le N, 1\le y\le M\) 且 \(gcd(x, y)\) 为质数的 \((x, y)\) 有多少对 ...

  9. 【CF1141F1】Same Sum Blocks

    题目大意:给定一个 N 个值组成的序列,求序列中区间和相同的不相交区间段数量的最大值. 题解:设 \(dp[i][j]\) 表示到区间 [i,j] 时,与区间 [i,j] 的区间和相同的不相交区间数量 ...

  10. Python之常用模块--collections模块

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...