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.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文件基本操作)的更多相关文章
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- Java核心技术 卷1 基础知识-第一天
基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...
- Linux基础知识第三讲,拷贝文件跟移动文件命令
目录 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命令 1.tree命令常用选项 2.cp复制文件命令 3.mv 命令的使用 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命 ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- Java中浮点数的基础知识
偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- java 程序运行的基础知识【Java bytecode】
聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...
- Java学习1——计算机基础知识
本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.
- java面试题:基础知识
类和对象 Q:讲一下面向对象OOP思想. 面向对象主要是抽象,封装,继承,多态. 多态又分为重载和重写.重载主要是方法参数类型不一样,重写则是方法内容不一样. Q:抽象类和接口有什么区别? 抽象类中可 ...
随机推荐
- BZOJ4912 SDOI2017天才黑客(最短路+虚树)
容易想到把边当成点重建图跑最短路.将每条边拆成入边和出边,作为新图中的两个点,由出边向入边连边权为原费用的边.对于原图中的每个点,考虑由其入边向出边连边.直接暴力两两连边当然会被卡掉,注意到其边权是t ...
- 【NOIP2018 Day1】题解
T3 rp++; 今天题比较简单 而且考了很多嫌疑原题? 大家基本250+ 本蒟蒻...T3十分看脸 再次祝rp++; T1 积木大赛本赛嘛 如果d[i] < d[i - 1] ans += d ...
- AGC030 简要题解
A - Poisonous Cookies 题意 有\(A\)个能解毒的普通饼干,\(B\)个能解毒的美味饼干,\(C\)个有毒的美味饼干,求最多能吃多少个美味饼干,每次吃完有毒的饼干后要解毒后才能继 ...
- python3 hashlib模块
hashlib是一个加密模块,可以将明文加密为密文: md5,sha加密:过程不可逆转.
- poj 3666 Making the Grade(离散化+dp)
Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...
- WebService学习总结(一)——WebService的相关概念
一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...
- 纪中2018暑假培训day5提高b组改题记录
因为今天省选组也做a组,以为今天a组会很难,就做了做b组.t1和t3强行暴力,好在有t2保底.t1和正解就差一点,然而考试时死活想不起来...... 今天改题可以少改一道了!ovo 救救孩子吧!t1T ...
- JS监听滚动条进度
HTML部分: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <s ...
- SQL表的基本操作
1.创建表: create table 表名 ( [列名] [数据类型] [约束], [列名] [数据类型] [约束], ) 2.修改基本表: alert table[表名] [add 新列名 数据类 ...
- bzoj2252 矩阵距离
很好奇这种 普及- 的题为什么会是权限题...... 我一开始想用枚举 + 搜索,看书后发现自己脑抽了.直接BFS即可. #include <cstdio> #include <qu ...