前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java高级进阶|File文件操作

java高级进阶|File文件操作

作者头像
码农王同学
发布2020-06-04 11:11:45
5520
发布2020-06-04 11:11:45
举报
文章被收录于专栏:后端Coder后端Coder

终于开始写java对文件进行操作的这一篇内容了,因为从去年都说我去写一篇关于IO文件流操作的文章,但是,却拖到了今天去写,是的,下班的时候去写的,正好明天可以休息了,所以就加个班写这篇文章吧,以后我就不写了,因为我想写的文章终于暂时告一段落了。

先说下为什么要写这篇java文件操作的文章吧,记得17年时那个夏天自己基于装饰者模式进行对文件在不同的磁盘目录下进行拷贝时,使用了java程序进行操作了一下,但是那时的我还没有开始输出文章,所以就没有进行总结,就是靠脑海的一点回忆,我现在觉得既然自己写的java文章就缺少了java操作File的文章就写下吧,毕竟为以后自己写个学习路线埋下一点铺垫吧。

在以往的文章中,写过如何上传一个文件到文件服务器的文章,其实对文件的操作就是基于IO流的操作,没有什么区别,这里主要看下如何读取某个磁盘下的目录文件。

首先创建固定一下磁盘的路径,然后使用File提供的方法去判断文件是否存在以及是目录的方法。

代码语言:javascript
复制
file.exists() && file.isDirectory()

若文件存在且是目录则获取当前目录下所有的文件信息,这里就使用了下面的方式进行信息的输出

代码语言:javascript
复制
   File[] listFiles = file.listFiles();
      Objects.requireNonNull(listFiles, "文件信息不能为空");
     for (File f : listFiles) {
           System.out.println("f = " + f);
      }

这里自己在本地D盘的files文件下创建了三个空白的文件,看下输出的文件信息吧。

代码语言:javascript
复制
f = D:\files\1.txt
f = D:\files\2.txt
f = D:\files\3.txt

这里看下如何定位到某个磁盘的具体文件目录的写法吧

代码语言:javascript
复制
 String pathName = "D:" + File.separator + "files/";
 File file = new File(pathName);

这里采用了硬编码的写法,不过作为一个示例程序而言,这种情况还可以忍受,但是去开发企业应用时尽量不要使用硬编码的方式,不然...,自己思考一下

那么一般我们对文件操作都是基于某个路径下进行操作,所以获取文件的绝对路径就是基于下面的方法去操作了

代码语言:javascript
复制
   file.getAbsolutePath()

除了文件的绝对路径我们要知道以外,文件的名称以及文件的大小都是我们平时开发会遇到的,因为我们可以获取名称以及文件大小去做一些限制,不过这些只能防止一般用户的操作,但是对于其他攻击者而言还需要进行一些设置

代码语言:javascript
复制
  file.length()
  file.getName()

linux的哲学就是"万物皆文件",是的,看到文件你会想到什么,那自然而言就是读写执行的权限设置了,那么java既然提供了上层操作文件IO的方法,自然会提供一些方法进行判断文件是否有读写以及可执行的操作。

代码语言:javascript
复制
file.canWrite()
file.canRead()
file.canExecute()

到这里就介绍完了java提供的File方法的基本使用,但是使用file时我们主要还是基于IO操作流进行文件的写入和读取操作,所以后面这里写了一下示例程序进行文件的写入和读取操作。

先看下基于装饰模式的方式将数据写入文件,然后再从文件中进行读取数据,输出到控制台。

代码语言:javascript
复制
try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file))) {
                bufferedOutputStream.write("123456789".getBytes());
                bufferedOutputStream.flush();
    }

这里看到了吗?我是不是没有进行资源关闭的close()方法,但是这样也不会导致资源泄露,因为我使用了try-with-resources模式,资源的关闭和释放完全不用我们管了。

下面我这里同样也是用了装饰者模式的缓冲区读入数据,然后将数据输出到内存中,进行控制台信息的打印。

代码语言:javascript
复制
try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file))) {
                byte[] b = new byte[1024];
                int len;
                while ((len = bufferedInputStream.read(b)) != -1) {
                    String s = new String(b, 0, len);
                    System.out.println("s = " + s);
                }
            }

除了上面的方法需要掌握一下,不知道你看到这里有什么思考没?基于上面的操作,自己使用java对文件IO的操作这篇文章就结束了

我喜欢分享,你喜欢阅读@WwpwW

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档