先说下为什么要写这篇java文件操作的文章吧,记得17年时那个夏天自己基于装饰者模式进行对文件在不同的磁盘目录下进行拷贝时,使用了java程序进行操作了一下,但是那时的我还没有开始输出文章,所以就没有进行总结,就是靠脑海的一点回忆,我现在觉得既然自己写的java文章就缺少了java操作File的文章就写下吧,毕竟为以后自己写个学习路线埋下一点铺垫吧。
在以往的文章中,写过如何上传一个文件到文件服务器的文章,其实对文件的操作就是基于IO流的操作,没有什么区别,这里主要看下如何读取某个磁盘下的目录文件。
首先创建固定一下磁盘的路径,然后使用File提供的方法去判断文件是否存在以及是目录的方法。
file.exists() && file.isDirectory()
若文件存在且是目录则获取当前目录下所有的文件信息,这里就使用了下面的方式进行信息的输出
File[] listFiles = file.listFiles();
Objects.requireNonNull(listFiles, "文件信息不能为空");
for (File f : listFiles) {
System.out.println("f = " + f);
}
这里自己在本地D盘的files文件下创建了三个空白的文件,看下输出的文件信息吧。
f = D:\files\1.txt
f = D:\files\2.txt
f = D:\files\3.txt
这里看下如何定位到某个磁盘的具体文件目录的写法吧
String pathName = "D:" + File.separator + "files/";
File file = new File(pathName);
这里采用了硬编码的写法,不过作为一个示例程序而言,这种情况还可以忍受,但是去开发企业应用时尽量不要使用硬编码的方式,不然...,自己思考一下
那么一般我们对文件操作都是基于某个路径下进行操作,所以获取文件的绝对路径就是基于下面的方法去操作了
file.getAbsolutePath()
除了文件的绝对路径我们要知道以外,文件的名称以及文件的大小都是我们平时开发会遇到的,因为我们可以获取名称以及文件大小去做一些限制,不过这些只能防止一般用户的操作,但是对于其他攻击者而言还需要进行一些设置
file.length()
file.getName()
linux的哲学就是"万物皆文件",是的,看到文件你会想到什么,那自然而言就是读写执行的权限设置了,那么java既然提供了上层操作文件IO的方法,自然会提供一些方法进行判断文件是否有读写以及可执行的操作。
file.canWrite()
file.canRead()
file.canExecute()
到这里就介绍完了java提供的File方法的基本使用,但是使用file时我们主要还是基于IO操作流进行文件的写入和读取操作,所以后面这里写了一下示例程序进行文件的写入和读取操作。
先看下基于装饰模式的方式将数据写入文件,然后再从文件中进行读取数据,输出到控制台。
try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file))) {
bufferedOutputStream.write("123456789".getBytes());
bufferedOutputStream.flush();
}
这里看到了吗?我是不是没有进行资源关闭的close()方法,但是这样也不会导致资源泄露,因为我使用了try-with-resources模式,资源的关闭和释放完全不用我们管了。
下面我这里同样也是用了装饰者模式的缓冲区读入数据,然后将数据输出到内存中,进行控制台信息的打印。
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的操作这篇文章就结束了