欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入浅出Java文件操作技巧(第二部分)

时间:11-22 名人轶事 提交错误

大家好,如果您还对深入浅出Java文件操作技巧(第二部分)不太了解,没有关系,今天就由本站为大家分享深入浅出Java文件操作技巧(第二部分)的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

公共最终类路径{

私有路径() { }

公共静态路径获取(字符串第一个,字符串.更多){

返回FileSystems.getDefault().getPath(first, more);

}

public static Path get(URI uri) {/*我们暂时不研究这个方法*/}

}可以看到,我们可以通过Paths的get静态方法获取到一个Path对象。事实上,我们通常通过Paths的get方法来获取Path对象。 (至于如何调用该方法返回的对象,主要是通过调用文件系统的抽象方法来实现)。获得Path对象后,我们就可以调用其中封装的所有方法了。由于方法有很多,我们一一进行。点击查看。

布尔值isAbsolute();

路径getFileName();

路径getParent();

int getNameCount();

路径getName(int index);

路径子路径(int beginIndex, int endIndex);

路径解析(路径其他);

路径resolveSibling(路径其他);

路径相对化(路径其他);

路径到绝对路径();

文件到文件();主要方法就这么多。其中一些功能甚至具体的实现代码与上一篇介绍的File类类似,这里不再赘述。 getFileName方法与File类的getName方法类似,返回路径的文件名(目录名或文件名)。两者的实现原理基本相同。

路径p=Paths.get("a","b","c","d","e");

System.out.println(p.getNameCount());

/*执行代码可以看到输出:5*/

路径p=Paths.get("a/t","b","c","d","e");

System.out.println(p.getNameCount());

/*执行代码输出结果:6*/可以看到,getNameCount方法并没有直接统计构造Path对象时传入的字符串数量。当我们调用Path.get方法并传入一个变量字符串作为路径时,它会将每个独立的字符串视为一个目录名,并使用默认的路径分隔符将这些路径名连接起来形成一个Path路径,而调用getNameCount方法是根据默认的路径分隔符的数量来统计返回。

getName方法需要传入一个int类型的索引。构建路径时,每一层都从根路径开始编号。根目录为0,子目录依次加1,因此getName方法可以获取任意一级目录的名称。

路径p=Paths.get("a","b","c","d","e");

System.out.println(p.getName(1));

/*输出:b*/subpath方法和我们String中的substring类似。给定起始位置和结束位置的索引值,获取它们之间的路径字符串。

路径p=Paths.get("a","b","c","d","e");

System.out.println(p.subpath(1,3));

/*输出结果:b/c*/需要注意一个细节,截取范围[startIndex, endIndex),即endIndex位置的值不会被截取。

solve 方法是一个非常有趣的方法。根据我的理解,这个方法实现了路径组合的操作。 p.resolve(q),如果q是绝对路径,则返回结果为q,如果q是相对路径,则返回结果为p+q,实现拼接组合。

路径p=Paths.get("a","b","c","d","e");

路径q=Paths.get("c:/users");

System.out.println(p.resolve(q));

/*输出:c:/用户*/

路径p=Paths.get("a","b","c","d","e");

路径q=Paths.get("用户");

System.out.println(p.resolve(q));

/*输出结果:abcdeusers*/resolveSibling方法通过解析当前路径的父目录生成兄弟路径。

路径p=Paths.get("a","b","c","d","e");

路径q=Paths.get("用户");

System.out.println(p.resolveSibling(q));

/*输出结果:abcdusers*/将e替换成users,因为e是当前目录,而这个方法是在当前目录下生成一个和他同级的兄弟目录。通常可以用来修改当前目录的目录名。 (生成磁盘文件之前)

接下来我们来说说relativize方法,它是用来生成相对路径的方法。需要传入一个额外的Path 对象。

路径p=Paths.get("a","b","c","d","e");

路径q=Paths.get("用户");

System.out.println(p.relativize(q));

/*输出结果:....users*/

路径p=Paths.get("a","b","c","d","e");

Path q=Paths.get("a","b","c","d","e","f");

System.out.println(p.relativize(q));

/*输出结果:f*/通过对比可以发现,所谓的相对路径生成,实际上是指q是相对于p的。从第二种情况可以看出,整个p可以作为q的父目录,所以相对路径就是当前目录f。第一种情况,因为没有找到公共目录,所以将整个p作为q的父目录。当然,相对于q来说,相对路径是这样的。

最后我还想说几句。 Path中有一个toFile方法。该方法对应于FIle中的toPath。为什么要实现这两种方法呢?其实就是为了兼容旧的File类,方便一些旧系统成功过渡到新系统。 java标准。

二、Files类如上所述,整个FIles类都有静态方法,并且没有实例字段。 (看这个类就是实现对文件的各种操作就够了)首先我们看一下对文件的读写操作。

公共静态InputStream newInputStream(路径路径,OpenOption.选项)

公共静态OutputStream newOutputStream(路径路径,OpenOption.选项)

公共静态BufferedReader newBufferedReader(路径路径,字符集cs)

公共静态BufferedReader newBufferedReader(路径路径)

公共静态BufferedWriter newBufferedWriter

公共静态字节[] readAllBytes(路径路径)

公共静态ListreadAllLines(路径路径)

公共静态路径写入(路径路径,字节[]字节,OpenOption.选项)

公共静态长复制(InputStream in,路径目标,CopyOption.选项)

有许多公共静态长复制(Path source、OutputStream out)方法。我们来看一下。首先有两个方法可以根据Path路径返回InputStream/OutputStream字节流对象。这两个方法为我们下面的一些方法提供了一定的保证。为了方便起见,还有两个方法通过Path 对象返回BufferedReader/BufferedWriter 对象。这些对我们的其他方法很有帮助。

readAllBytes 在内部创建一个InputStream 对象来将所有字节读取到给定的字节数组中并返回它。 readAllLines 在内部创建了一个List 数组,并使用BufferedReader 创建了一个字符缓冲流来逐行读取。最后返回List集合。写操作基本上是读的逆操作,这里不再赘述。

copy方法有多个重载,即:

私有静态长复制(InputStream源,OutputStream接收器)

公共静态长复制(InputStream in,路径目标,CopyOption.选项)

public static long copy(路径源,OutputStream输出)

public static Path copy(Path source, Path target, CopyOption. options) 第一个重载是一个私有方法,它是一个被别人调用的工具方法。主要功能是:从源流中读取所有字节并写入到接收流中,并返回实际读取或写入的字节数。第二个重载通过方法newOutputStream选择Path对象,构造一个OutputStream对象,然后调用第一个重载方法实现复制。完成的功能是:从InputStream流中读取所有字节并写入到指定文件中。第三个重载方法主要从Path文件中读取所有字节并将其写入OutputStream对象流。操作过程类似,不再赘述。最后一个重载方法实现了从一个Path 对象到另一个Path 对象的复制。

//根目录下只有hello.txt文件,没有world文件

路径p=Paths.get("hello.txt");

路径q=Paths.get("world.txt");

文件.copy(p,q);

/*创建world文件,并将hello的内容复制到这里*/对于这个操作,有几点需要注意:如果磁盘位置q处的文件已经存在,则复制操作将无法完成。如果磁盘位置不存在p,则该操作对于相应的文件仍然会失败。如果p是目录文件,则将复制名为world的目录文件。如果q是目录文件,则会创建一个无类型文件(hello中的内容已被复制)。

说完文件的读写操作,我们再来说说文件或目录的创建以及获取文件的基本信息。

公共静态路径createFile(路径路径,FileAttribute? attrs)

公共静态路径createDirectory(路径dir,FileAttribute? attrs)

公共静态路径createDirectories(路径dir,FileAttribute? attrs)

public static Path createTempFile 因为Path路径中存储的路径可以是文件类型,也可以是目录类型。那么在创作的时候就需要区分。 createFile 根据指定路径创建指定类型的文件。 createDirectory 和createDirectories 的区别在于,如果Path 路径上有未创建的目录,则后者会将其全部创建。关于临时文件的创建,由于用得不多,就不讲了。

获取文件信息主要有以下几种方法:

公共静态布尔isSameFile(路径路径,路径路径2)

公共静态布尔isHidden(路径路径)

公共静态字符串probeContentType(路径路径)

public static boolean isDirectory(Path 路径, LinkOption. 选项)

public static boolean isRegularFile(Path 路径, LinkOption. 选项)

public static long size(路径路径)

公共静态布尔存在(路径路径,LinkOption.选项)

公共静态布尔值isReadable(路径路径)

公共静态布尔isWritable(路径路径)

/*这些方法的名称是注释。相信大家一眼就能认出各自的功能*/最后说一下迭代和过滤器。上一篇文章的最后,我们讲到了FIle的过滤和迭代,因为在File类中,通常会一次性返回一个File数组或者String数组,这样往往效率很低。在Files类中,设计了一个方法newDirectoryStream来返回目录流,这样可以显着提高效率。

公共静态DirectoryStreamnewDirectoryStream(路径目录)

公共静态DirectoryStreamnewDirectoryStream(路径dir,字符串glob)

公共静态DirectoryStreamnewDirectoryStream(路径目录,

目录流过滤器? super Pathfilter) 这是三个目录流的重载方法。第一个方法只需要提供一个Path路径,第二个方法提供一个Path对象和一个glob字符串。全局模式:

在这里写下图片描述

第三种方法也在外部指定一个过滤器。具体使用说明请参见下面的代码。

DirectoryStreamd=Files.newDirectoryStream(Paths.get("f:/360"));

对于(路径p : d){

System.out.println(p.getFileName());

}

//输出结果:

360卫士

360sd安装程序

360zip

//这是我的f盘360文件下的所有文件DirectoryStreamd=Files.newDirectoryStream(Paths.get("f:/360"),"*.exe");

对于(路径p : d){

System.out.println(p.getFileName());

}

//输出结果:

360sdSetup.exeDirectoryStreamd=Files.newDirectoryStream(Paths.get("f:/360"),new DirectoryStream.Filter(){

@覆盖

公共布尔接受(路径条目){

return Files.isDirectory(entry)?true:false;

}

});

对于(路径p : d){

System.out.println(p.getFileName());

}

//输出结果:

360卫士

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

用户评论

七级床震

这篇文章讲的是写JAVA文件吗?

    有5位网友表示赞同!

枫无痕

之前好像没看过Java文件处理相关的教程。期待学习一下。

    有10位网友表示赞同!

笑叹★尘世美

"(二)"感觉前边还有文章呢!要看的话不知道在哪儿找到。

    有17位网友表示赞同!

花海

最近需要自己写Java程序处理一些文件,这篇文章好像挺适合我的需求啊。

    有13位网友表示赞同!

|赤;焰﹏゛

java文件操作,是不是主要讲的是读和写的概念?

    有12位网友表示赞同!

情深至命

学习完这篇文章后,我想能自己搞定各种文件操作了!

    有10位网友表示赞同!

爱你心口难开

我一直想深入理解Java的文件处理方式,这篇文章正好可以帮我解决这个问题。

    有8位网友表示赞同!

绳情

不知道文章里会讲解哪些常用的函数或者方法?

    有19位网友表示赞同!

莫飞霜

之前用C++做过文件操作,感觉Java的实现应该有很大的区别吧。我很期待学习这种差异之处。

    有16位网友表示赞同!

凉凉凉”凉但是人心

希望这篇文章能够清晰地解释每个概念,让新手也能轻松理解。

    有10位网友表示赞同!

晨与橙与城

我有一个关于文件处理的小问题,不知道这篇文章会解答吗?

    有12位网友表示赞同!

一点一点把你清空

看了标题就知道这篇文章肯定会很有用!期待学习学习!

    有11位网友表示赞同!

像从了良

Java在软件开发中用途很广,学会文件操作能让我更加熟练地使用它。

    有16位网友表示赞同!

可儿

以前处理文件的时候总是遇到各种问题,也许这篇文章能给我一些解决方案。

    有6位网友表示赞同!

青楼买醉

我想尝试将这篇文章中的知识应用到我的项目中,看看效果如何。

    有7位网友表示赞同!

半梦半醒半疯癫

这篇文章是基础教程吗? 感觉挺适合我这种刚接触Java的人学习的。

    有19位网友表示赞同!

尘埃落定

看了标题,觉得这篇文章应该对文件处理有很好的总结和讲解!

    有15位网友表示赞同!

微信名字

我要好好认真看一篇讲文件操作的文章,提升自己的编程水平。

    有5位网友表示赞同!

毒舌妖后

文件操作是软件开发中很重要的技能,希望能从这篇文章学到很多新的知识。

    有5位网友表示赞同!

◆乱世梦红颜

感谢作者分享这篇关于Java文件操作的文章!

    有11位网友表示赞同!

【深入浅出Java文件操作技巧(第二部分)】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活