Java中文件操作和IO(如果想知道Java中有关文件操作和IO的知识,那么只看这一篇就足够了!)
前言:在 Java 中,输入输出(I/O)是常见的操作,字节流和字符流是处理文件和数据的核心类,本文将介绍 InputStream、OutputStream、Reader 和 Writer 类的基本用法。
✨✨✨这里是秋刀鱼不做梦的BLOG
✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客
在正式开始讲解之前,先让我们看一下本文大致的讲解内容:
目录
1.File 类
(1)构造方法
【1】File(String pathname):最简单的方式,直接传入文件的路径
【2】File(String parent, String child):我们也可以先给出父目录,然后再给出子文件或子目录的名称
【3】File(File parent, String child):首先先创建一个 File 对象表示父目录,然后用它来构建子文件或子目录
(2)File中的方法
【1】获取文件信息类
【2】判断文件状态类
【3】文件与目录操作
【4】列出目录内容
2.数据流类
(1)InputStream 类
(2)OutputStream 类
(3)Reader 类
(4)Writer 类
1.File 类
首先先让我们了解一下Java中的File 类,在 Java 中,File
类是我们用来操作文件和目录的工具,虽然它并不能直接读取或写入文件的内容,但它提供了很多方法,让我们能够管理文件系统,比如检查文件是否存在、获取文件信息、创建文件和目录、删除文件等等,简而言之,它是与文件打交道时的一个基础类。
(1)构造方法
初步了解了File类是个什么东西之后,那么我们在Java中如何去创建File类呢?常见的创建方式有如下三种:
【1】File(String pathname):最简单的方式,直接传入文件的路径
File file = new File(\"path/to/file.txt\");
【2】File(String parent, String child):我们也可以先给出父目录,然后再给出子文件或子目录的名称
File file = new File(\"path/to\", \"file.txt\");
【3】File(File parent, String child):首先先创建一个 File
对象表示父目录,然后用它来构建子文件或子目录
File parentDir = new File(\"path/to\");File file = new File(parentDir, \"file.txt\");
通过上述方法,我们就可以方便地根据路径创建 File
对象,之后就可以对这些文件或目录进行各种操作了!!!
(2)File中的方法
File类中提供了很多方法,能帮助我们做各种文件和目录的操作,比如获取文件信息、检查文件状态、创建和删除文件等等,我们来看看其中一些最常用的方法:
【1】获取文件信息方法
getName():返回文件的名称,不包括路径。
File file = new File(\"path/to/file.txt\");System.out.println(file.getName()); // 输出 file.txt
getAbsolutePath():返回文件的绝对路径,这个路径不管你在哪个目录下都能访问到文件。
System.out.println(file.getAbsolutePath());
getPath():返回文件的路径,可能是相对路径,也可能是绝对路径,取决于创建 File
对象时传入的是什么路径
System.out.println(file.getPath());
getParent():返回文件的父目录,如果文件在根目录或者没有父目录,这个方法会返回null。
System.out.println(file.getParent());
【2】判断文件状态方法
exists():检查文件或目录是否存在,如果存在,返回 true
,否则返回 false
。
if (file.exists()) { System.out.println(\"文件存在\");} else { System.out.println(\"文件不存在\");}
isFile():判断它是否是一个文件,如果是文件,返回 true,
如果是目录,返回 false
。
if (file.isFile()) { System.out.println(\"是文件\");}
isDirectory():判断它是否是一个目录,如果是目录,返回 true,
如果是文件,返回 false
。
if (file.isDirectory()) { System.out.println(\"是目录\");}
【3】文件与目录操作方法
createNewFile():用来创建一个新文件,如果文件已经存在,这个方法会返回 false
。
try { if (file.createNewFile()) { System.out.println(\"文件创建成功\"); } else { System.out.println(\"文件已存在\"); }} catch (IOException e) { e.printStackTrace();}
mkdir():创建一个目录。如果目录已存在,返回 false,
如果成功创建,返回 true
。
File dir = new File(\"path/to/directory\");if (dir.mkdir()) { System.out.println(\"目录创建成功\");}
【4】列出目录内容方法
listFiles():返回一个 File
数组,包含目录下所有的文件和子目录,如果这个 File
对象代表的不是目录,返回 null
。
File dir = new File(\"path/to/directory\");File[] files = dir.listFiles();if (files != null) { for (File f : files) { System.out.println(f.getName()); }}
这样我们就大致的了解了File中的常用方法了!!!
2.数据流类
在 Java 中,处理文件和数据流的输入输出是非常常见的操作,为了让这些操作更加高效,Java 提供了字节流和字符流的不同方式,这些类分为 InputStream 和 OutputStream,以及 Reader 和 Writer,接下来让我们一一讲解一下:
(1)InputStream 类
InputStream 是所有字节输入流的超类,它负责从外部读取字节数据,你可以把它想象成一个“读取器”,它帮助你从磁盘文件、网络连接或者内存等地方读取数据。
常用方法:
——read():从输入流中读取一个字节并返回它,如果流的末尾已经到达,则返回 -1
InputStream inputStream = new FileInputStream(\"file.txt\");int byteData = inputStream.read();while (byteData != -1) { System.out.print((char) byteData); // 转换为字符并输出 byteData = inputStream.read(); // 继续读取下一个字节}inputStream.close(); // 别忘了关闭流
代码解释:这个例子逐个字节读取文件内容,直到到达文件末尾。我们将每个字节转换为字符并打印出来
——read(byte[] b):一次性读取多个字节到字节数组 b
中,返回实际读取的字节数,如果已经到达流的末尾,它返回 -1
。
byte[] buffer = new byte[1024];int bytesRead = inputStream.read(buffer);System.out.println(\"读取了 \" + bytesRead + \" 个字节\");inputStream.close();
代码解释:这个例子中我们使用read方法将数据读到了buffer这个数组中,并返回了读取到的字节数。
——read(byte[] b, int off, int len):从字节数组 b
的 off
偏移量开始,最多读取 len
个字节,返回实际读取的字节数。
byte[] buffer = new byte[1024];int bytesRead = inputStream.read(buffer, 0, 100); // 从数组开头读取 100 字节inputStream.close();
代码解释:和read(byte[] b)方法类似,只不过我们只读取了0到100字节而已
至此,我们就了解了InputStream类的常用方法了!!!
(2)OutputStream 类
与 InputStream
类相对应,OutputStream
负责将数据写入输出流,它可以用于文件、网络或内存等目标的写入。
常用方法:
——write(int b):将一个字节的数据写入输出流,需要注意,write()
方法接受的是一个 int
类型的参数,它会自动转换为字节。
OutputStream outputStream = new FileOutputStream(\"output.txt\");outputStream.write(65); // 写入字节 \'A\'(ASCII 码为 65)outputStream.close();
代码解释:这个例子将字节 65
写入文件。
——write(byte[] b):将字节数组中的数据写入输出流。
byte[] data = \"Hello\".getBytes();outputStream.write(data);outputStream.close();
代码解释:我们将字符串 \"Hello\"
转换成字节数组,然后写入文件。
——write(byte[] b, int off, int len):从字节数组 b
的 off
偏移量开始,最多写入 len
个字节。
byte[] data = \"HelloWorld\".getBytes();outputStream.write(data, 0, 5); // 写入 \"Hello\"outputStream.close();
代码解释:这段代码将 \"HelloWorld\"
字符串中的前 5 个字节写入文件
——flush():在某些情况下,写入的数据会被暂时保存在缓冲区中,直到缓冲区满了才会被写入,如果你需要强制将缓冲区中的数据立即写入目标,可以使用 flush()
。
outputStream.flush();
以上就是OutputStream 类的常见方法了!!!
(3)Reader 类
如果你要处理文本文件中的字符数据,Reader
类是一个非常方便的选择,它是所有字符输入流的超类,专门用来处理字符而不是字节。
常用方法:
——read():读取一个字符并返回它的 Unicode 值。如果已到文件末尾,返回 -1
。
Reader reader = new FileReader(\"file.txt\");int charData = reader.read();while (charData != -1) { System.out.print((char) charData); // 转换为字符并输出 charData = reader.read(); // 继续读取下一个字符}reader.close();
代码解释:这个例子将逐字符读取文件内容,直到遇到文件的末尾。
——read(char[] cbuf):一次性读取多个字符并将它们存入字符数组 cbuf
中,返回实际读取的字符数。
char[] buffer = new char[1024];int charsRead = reader.read(buffer);System.out.println(\"读取了 \" + charsRead + \" 个字符\");reader.close();
代码解释:我们使用一个char数组来接收读取到的数据,并且read方法返回了读取到的个数
——read(char[] cbuf, int off, int len):从字符数组 cbuf
的 off
偏移量开始,最多读取 len
个字符。
char[] buffer = new char[1024];int charsRead = reader.read(buffer, 0, 100); // 从数组开头读取 100 个字符reader.close();
代码解释:我们使用了char数组来接收读取的数据,只读取了前100个字节
至此,我们就了解了Reader类的常用方法了!!!
(4)Writer 类
与 Reader
类相对应,Writer
类用于将字符数据写入目标输出流,它专门用于处理字符数据,避免了字节流处理文本时的编码问题。
常用方法:
——write(int c):将一个字符的 Unicode 值写入到输出流。
Writer writer = new FileWriter(\"output.txt\");writer.write(65); // 写入字符 \'A\'writer.close();
代码解释:这段代码将字符 \'A\'
写入到文件中。
——write(char[] cbuf):将字符数组中的数据一次性写入输出流。
char[] data = \"Hello\".toCharArray();writer.write(data);writer.close();
代码解释:这里我们将字符串 \"Hello\"
转换为字符数组,然后写入文件
——write(char[] cbuf, int off, int len):从字符数组 cbuf
的 off
偏移量开始,最多写入 len
个字符。
char[] data = \"HelloWorld\".toCharArray();writer.write(data, 0, 5); // 写入 \"Hello\"writer.close();
代码解释: 这段代码将 \"HelloWorld\"
字符串中的前 5 个字符写入文件
——flush():与字节流类似,Writer
类也有 flush()
方法,可以将缓冲区中的数据强制写入文件。
writer.flush();
以上就是Writer类的常见方法了!!!
以上就是本篇文章全部内容了