Java对文件的写入和读取 (File类详解以及Input,OutputStream用法,注意事项)

您所在的位置:网站首页 java判断是否读到文件末尾的方法 Java对文件的写入和读取 (File类详解以及Input,OutputStream用法,注意事项)

Java对文件的写入和读取 (File类详解以及Input,OutputStream用法,注意事项)

2024-07-17 05:07| 来源: 网络整理| 查看: 265

Java中,操作文件的类有很多, 核心的部分是File类,InputStream,OutputStream类

文章目录 File类通过File类创建文件通过File类创建目录 文件内容的读写 -- 数据流InputStream方法 OutputStream方法.flush缓冲区

File类

我们先来看看 File类中的常见属性、构造方法和方法

属性

修饰符及类型属性说明static StringpathSeparator依赖于系统的路径分隔符,String 类型的表示static charpathSeparator依赖于系统的路径分隔符,char 类型的表示

构造方法

签名说明File(File parent, String child)根据父目录 + 孩子文件路径,创建一个新的 File 实例File(String pathname)根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径File(String parent, String child)根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

方法

修饰符及返回值类型方法签名说明StringgetParent()返回 File 对象的父目录文件路径StringgetName()返回 FIle 对象的纯文件名称StringgetPath()返回 File 对象的文件路径StringgetAbsolutePath()返回 File 对象的绝对路径StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径booleanexists()判断 File 对象描述的文件是否真实存在booleanisDirectory()判断 File 对象代表的文件是否是一个目录booleanisFile()判断 File 对象代表的文件是否是一个普通文件booleancreateNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 truebooleandelete()根据 File 对象,删除该文件。成功删除后返回 truevoiddeleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行String[]list()返回 File 对象代表的目录下的所有文件名File[]listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示booleanmkdir()创建 File 对象代表的目录booleanmkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录booleanrenameTo(File dest)进行文件改名,也可以视为我们平时的剪切、粘贴操作booleancanRead()判断用户是否对文件有可读权限booleancanWrite()判断用户是否对文件有可写权限

注意,File类并不是给一个路径得到的就一定是文件 ,还有可能是一个目录!因此存在isDirectory() / isFile()方法来进行判断是否是目录/ 文件.

举一些用例:

import java.io.File; import java.io.IOException; public class Demo1 { public static void main(String[] args) throws IOException { //绝对路径 File f = new File("e:/test.txt"); //获取文件父目录 System.out.println(f.getParent()); //e:\ //获取到文件名 System.out.println(f.getName()); //test.txt //获取到文件路径 System.out.println(f.getPath()); //e:\test.txt //获取到绝对路径 System.out.println(f.getAbsolutePath()); //e:\test.txt //获取绝对路径 System.out.println(f.getCanonicalPath()); // E:\test.txt System.out.println("=============="); //构造一个相对路径文件 File f2 = new File("./test.txt"); //获取文件父目录 System.out.println(f2.getParent()); // . //获取到文件名 System.out.println(f2.getName()); // test.txt //获取到文件路径 System.out.println(f2.getPath()); // .\test.txt //获取到绝对路径 System.out.println(f2.getAbsolutePath()); // D:\HaoXiangsWareHouse\JavaCode\blogProject\.\test.txt //获取绝对路径 System.out.println(f2.getCanonicalPath()); // D:\HaoXiangsWareHouse\JavaCode\blogProject\test.txt } }

运行结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PRze2hr6-1681816516779)(assets/image-20230418094535369.png)]

有两个点需要注意

指定一个File的pathName的时候 即使该路径并没有所在的文件 / 目录, 仍然可以指定

上述Demo中pathName 是 “e:/test.txt” , 但是电脑中并没有 test.txt 文件,但是仍然是能够指定的,因此如果需要判断该路径是否有效,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eaPiFBRw-1681816516780)(assets/image-20230418094723202.png)]

因此需要使用exists() 之后在判断 isDirectory() / isFile() .

public static void main(String[] args) { File f2 = new File("e:/test.txt"); File f = new File("./test.txt"); System.out.println(f.exists()); System.out.println(f.isDirectory()); System.out.println(f.isFile()); }

运行结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUrxLkhv-1681816516782)(assets/image-20230418095855844.png)]

还有一个注意的点就是当我们写相对路径的时候, 需要搞清楚当前目录位置在哪里,这里的相对目录位置就是项目所在目录即

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4G5Dwmli-1681816516782)(assets/image-20230418100130250.png)]

此处我建立一个 test.txt文件,这样就可以正确的检测出是文件还是目录了.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wwkljop8-1681816516783)(assets/image-20230418100413389.png)]

运行结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VzesDDNQ-1681816516783)(assets/image-20230418100552385.png)]

有了两点注意事项之后, 就可以通过相对路径来进行创建文件操作了.

通过File类创建文件 public class Demo3 { public static void main(String[] args) throws IOException { File f = new File("./test.txt"); System.out.println(f.exists()); System.out.println("创建文件"); //成功会返回一个Boolean类型 System.out.println(f.createNewFile()); System.out.println("创建文件结束"); System.out.println(f.exists()); } }

文件当前目录结构如下: (不存在 test.txt文件)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bUabAfL4-1681816516784)(assets/image-20230418100830024.png)]

运行结果如下 :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQlcRnGm-1681816516784)(assets/image-20230418101006724.png)]

再看目录结构, 就发现 test.txt文件已经被创建好了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Votmf19F-1681816516784)(assets/image-20230418101054244.png)]

通过File类创建目录

创建单级目录 mkdir(); 该方法会在指定目录位置创建一个目录(文件夹)

但是如果中间目录不存在那么就会创建失败

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WV20bAn-1681816516784)(assets/image-20230418115753093.png)]

当前项目位置并不存在 aaa/bbb/ccc目录,此时不创建中间目录 aaa/bbb 查看**mkdir()**方法是否会成功

public static void main(String[] args) { File f = new File("./aaa/bbb/ccc"); System.out.println(f.exists()); System.out.println(f.mkdir()); System.out.println(f.isDirectory()); System.out.println(f.exists()); }

运行结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHaPVTSK-1681816516785)(assets/image-20230418120148631.png)]

创建中间目录aaa/bbb后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AMUVsunH-1681816516785)(assets/image-20230418120301018.png)]

可以看到目录ccc创建成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ElPPI1UZ-1681816516785)(assets/image-20230418120403955.png)]

创建多级目录 mkdirs() 如果中间目录不存在就会直接把中间目录全部创建

JavaEE目录下是没有aaa/bbb/ccc目录的, 观察是否会被创建成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQRGfxJi-1681816516785)(assets/image-20230418120509113.png)]

import java.io.File; public class Demo5 { public static void main(String[] args) { File f = new File("./aaa/bbb/ccc"); System.out.println(f.exists()); System.out.println(f.mkdirs()); System.out.println(f.isDirectory()); System.out.println(f.exists()); } }

运行结果如下 :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0WHG0XKQ-1681816516786)(assets/image-20230418120554537.png)]

显而易见,目录之前不存在, 后来通过 mkdirs()方法 创建了多级目录之后,目录就已经存在啦.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qBTEsAcm-1681816516786)(assets/image-20230418121237152.png)]

文件内容的读写 – 数据流 InputStream

InputStream源码如下:

public abstract class InputStream implements Closeable { // MAX_SKIP_BUFFER_SIZE is used to determine the maximum buffer size to // use when skipping. private static final int MAX_SKIP_BUFFER_SIZE = 2048; public abstract int read() throws IOException; public int read(byte b[]) throws IOException { return read(b, 0, b.length); } public int read(byte b[], int off, int len) throws IOException { if (b == null) { throw new NullPointerException(); } else if (off


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3