JAVA那些事(九)文件操作
在程序中要对磁盘文件或目录进行操作,首先要对文件或目录建立连接,为此Java提供了File类。File类也位于java.io包中,但不是流类,而是专门用来管理磁盘文件和目录。
一个File类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息,如名称、长度、所含文件个数等,其方法可以完成对文件或目录的常用管理操作,如创建、删除等。
建立File对象?
File类提供了3个不同的构造方法 :
File(String path):String类参数path指定所建对象对应的磁盘文件名或目录名及其路径名。
File(String path, String name):此构造方法中的参数path表示文件或目录的路径,参数name表示文件或目录名。
File(File dir, String name):此构造方法中的参数dir表示一个磁盘目录对应的File对象,参数name表示文件名或目录名。
?
File类代表了文件或目录路径名,并提供了与系统相关的文件信息查询、创建、删除、重命名等功能。
File类可以代表文件或目录,如:
File x=new File(“D:\\Data");
File y= new File("D:\\Data\\command.txt");
或者:File y = new File(x, “command.txt")
File file = new File("path/to/file.txt");
file.createNewFile(); // 创建新文件
boolean exists = file.exists(); // 检查文件是否存在
file.delete(); // 删除文件
file.renameTo(new File("newPath")); // 重命名文件
字节流
字节流(Byte Stream)是用于处理原始字节数据的一种I/O流。它包括两种类型:输入流(InputStream)和输出流(OutputStream),分别用来从源读取数据以及向目标写入数据。
输入字节流(InputStream)
java.io.InputStream
?是所有输入字节流的超类?
- 常用的子类有:
FileInputStream
:从文件中读取字节数据。ByteArrayInputStream
:从内存中的字节数组读取数据。BufferedInputStream
:提供缓冲功能,提高读取效率,它包装在其他InputStream之上。FileInputStream fis = new FileInputStream("file.txt"); byte[] buffer = new byte[1024]; int bytesRead = fis.read(buffer); // 从文件读取字节到缓冲区 fis.close();
输出字节流(OutputStream)
java.io.OutputStream
?是所有输出字节流的超类。
- 常用的子类有:
FileOutputStream
:将数据写入到文件。ByteArrayOutputStream
:将数据写入内存中的字节数组。BufferedOutputStream
:同样提供缓冲功能,提高写入效率,包装在其他OutputStream之上。FileOutputStream fos = new FileOutputStream("file.txt"); fos.write("Hello, World!".getBytes()); // 将字符串转换为字节并写入文件 fos.close();
字节流操作方法
- 字节流的基本操作是对单个字节或一组字节的读取和写入。
- 输入流常用的方法有:
int read()
:读取一个字节并返回,如果到达流末尾则返回-1。int read(byte[] b)
:读取一定数量的字节,并存储到提供的字节数组中,返回实际读取的字节数。
- 输出流常用的方法有:
void write(int b)
:写入一个字节。void write(byte[] b)
?或?void write(byte[] b, int off, int len)
:写入字节数组的部分或全部内容。
注意事项
- 字节流主要用于处理二进制数据,如图片、音频、视频等非文本文件,也可以用于处理文本文件,但需要开发者自己处理字符编码问题。
- 使用字节流时,务必记得关闭流资源以释放系统资源,可以使用 try-with-resources 语句自动关闭,或者在 finally 块中手动调用 close() 方法。
字符流?
字符流(Character Stream)是用于处理字符数据的I/O流。与字节流不同,字符流是以16位Unicode编码格式进行读写操作,更便于处理文本文件和字符串等包含字符的数据。
字符输入流(Reader)
java.io.Reader
?是所有字符输入流的超类。- 常用的子类有:
FileReader
:从文件中读取字符数据。BufferedReader
:提供缓冲功能,提高读取效率,通常包装在其他Reader之上以减少系统调用次数。InputStreamReader
:将字节流转换为字符流,常用于结合字节输入流一起使用,处理不同的字符编码。
FileReader fr = new FileReader("file.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line); // 逐行读取并打印文本文件内容
}
br.close();
字符输出流(Writer)
java.io.Writer
?是所有字符输出流的超类。
- 常用的子类有:
FileWriter
:将字符数据写入到文件。PrintWriter
:提供了方便的方法来写入各种类型的数据,并可以自动添加换行符等。BufferedWriter
:同样提供缓冲功能,提高写入效率,它包装在其他Writer之上。OutputStreamWriter
:将字符流转换为字节流,用于处理特定字符编码的输出。
FileWriter fw = new FileWriter("file.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Hello, World!"); // 写入文本
bw.newLine(); // 添加换行符
bw.close();
字符流操作方法
-
字符流的基本操作是对单个字符、字符串或行的读取和写入。
-
Reader常用的方法有:
int read()
:读取一个字符并返回,如果到达流末尾则返回-1。int read(char[] cbuf)
:读取一定数量的字符,并存储到提供的字符数组中,返回实际读取的字符数。String readLine()
:读取一行文本并返回。
-
Writer常用的方法有:
void write(int c)
:写入一个字符。void write(char[] cbuf)
?或?void write(char[] cbuf, int off, int len)
:写入字符数组的部分或全部内容。void write(String str)
?或?void write(String str, int off, int len)
:写入字符串的部分或全部内容。
注意事项
- 字符流适合处理文本数据,尤其是需要考虑字符集编码的场景。
- 在打开和关闭流时,务必正确处理资源管理,避免内存泄漏和文件资源占用不释放的问题,可以使用 try-with-resources 结构自动关闭流资源。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!