目录
正文:
1.File类
1.1概述
1.2常用方法
2.FileInputStream
2.1概述
2.2常用方法
3.FileOutputStream
3.1概述
3.2常用方法
总结:
正文:
1.File类
1.1概述
File类是Java中用来表示文件或目录的类,它提供了一系列方法来操作文件和目录。但File类并不是一个真正的文件对象,它只是一个用于操作文件的引用。它允许你访问和修改文件的属性,如名称、路径、权限等,以及执行一些基本的文件操作,如创建、删除、移动文件或目录
1.2常用方法
构造方法:File类提供了多种构造方法来创建File对象:
File(String pathname)
:根据给定的路径名创建一个新File
对象。File(String parent, String child)
:根据父路径和子路径创建一个新File
对象。File(File parent, String child)
:根据父File
对象和子路径创建一个新File
对象。
exists()
:检查指定的文件或目录是否存在。
boolean exists = file.exists();
isFile()
:检查指定的路径是否指向一个文件。
boolean isFile = file.isFile();
isDirectory()
:检查指定的路径是否指向一个目录。
boolean isDirectory = file.isDirectory();
delete()
:删除文件或目录。如果文件是目录,则只有当它为空时才能被删除。
boolean deleted = file.delete();
mkdir()
:创建文件指示的目录。
boolean created = file.mkdir();
mkdirs()
:创建文件指示的目录,包括任何必需但不存在的父目录。
boolean created = file.mkdirs();
renameTo(File dest)
:将文件重命名为指定的目标文件。如果目标是一个目录,则原文件将被移动到该目录下。
File dest = new File("path/to/new/location"); boolean renamed = file.renameTo(dest);
listFiles()
:列出当前目录下的文件和子目录。
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.getName());
}
length()
:返回文件的长度,如果表示的是一个目录,则返回0L。
long size = file.length();
getAbsolutePath()
:返回文件的绝对路径。
String path = file.getAbsolutePath();
getPath()
:返回文件的路径名字符串。
String path = file.getPath();
getName()
:返回由父目录的路径分隔符分隔的文件名。
String name = file.getName();
lastModified()
:返回文件的最后一次修改时间。
long time = file.lastModified();
setLastModified(long time)
:设置文件的最后一次修改时间。
boolean modified = file.setLastModified(System.currentTimeMillis());
setReadOnly()
:将文件设置为只读。
boolean readOnly = file.setReadOnly();
canRead()
:检查应用程序是否有权限读取此文件。
boolean canRead = file.canRead();
canWrite()
:检查应用程序是否有权限修改此文件。
boolean canWrite = file.canWrite();
下面给几个代码示例来加深理解
普通文件的创建,删除示例
import java.io.File;
import java.io.IOException;
public class test {
public static void main(String[] args) throws IOException {
//当前文件并不存在
File file = new File("hello-world.txt");
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.createNewFile());
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.createNewFile());
}
}
这段代码需要注意的是,调用File的构造方法并不会创建出这个文件,只是创建出文件的引用即使这个文件并不存在,调用crateNewFile后才真正有了文件。
运行结果:
目录创建示例:
import java.io.File;
import java.io.IOException;
public class test {
public static void main(String[] args) throws IOException {
//该文件并不存在
File dir = new File("some-parent\\some-dir");
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdir());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
mkdir() 的时候,如果中间目录不存在,则无法创建成功; mkdirs() 可以解决这个问题。
运行结果为:
2.FileInputStream
2.1概述
字节输入流(InputStream)是Java中用于从输入源读取字节数据的抽象类。它是所有字节输入流类的超类,提供了一系列方法来读取字节数据。FileInputStream是字节输入流的一种,用于从文件中读取字节数据。它继承自InputStream类,并提供了一系列方法用于读取文件中的数据。
2.2常用方法
-
构造方法:
- FileInputStream(String name):根据指定的文件名创建FileInputStream对象。
- FileInputStream(File file):根据指定的File对象创建FileInputStream对象。
-
读取数据方法:
- int read():从输入流中读取下一个字节的数据,返回读取的字节(0-255),如果到达文件末尾则返回-1。
- int read(byte[] b):从输入流中最多读取b.length个字节的数据到字节数组b中,返回实际读取的字节数。
- int read(byte[] b, int off, int len):从输入流中最多读取len个字节的数据到字节数组b中,从数组的off位置开始存储,返回实际读取的字节数。
-
其他方法:
- long skip(long n):跳过n个字节的数据,返回实际跳过的字节数。
- int available():返回剩余可读取的字节数。
- void close():关闭输入流并释放与之关联的资源。
使用FileInputStream的一般步骤如下:
- 创建FileInputStream对象,指定要读取的文件。
- 使用read()方法读取文件中的数据,可以逐字节读取或读取到字节数组中。
- 处理读取的数据。
- 关闭FileInputStream对象,释放资源。
代码示例:
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class InputStreamExample {
public static void main(String[] args) {
// 尝试打开一个文件输入流
try (InputStream in = new FileInputStream("example.txt")) {
byte[] buffer = new byte[1024];
int bytesRead;
// 循环读取数据直到文件结束
while ((bytesRead = in.read(buffer)) != -1) {
// 将读取的字节转换为字符串
String readData = new String(buffer, 0, bytesRead);
System.out.println(readData);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项
InputStream
的read()
方法可能会抛出IOException
,因此在读取数据时需要进行异常处理。- 使用
try-with-resources
语句可以确保InputStream
在使用完毕后被正确关闭,避免资源泄露。 - 读取操作是阻塞的,如果读取到流的末尾,
read()
方法将返回-1。 available()
方法返回的是一个估计值,实际可读取的字节数可能会更少。FileInputStream
是以字节为单位进行读取的,因此无法直接处理中文字符。当使用FileInputStream
读取包含中文的文件时,需要将字节数据转换为字符数据。
3.FileOutputStream
3.1概述
Java中的输出流是用于将数据从Java程序发送到外部目的地的I/O流。OutputStream是所有字节输出流的抽象类,定义了写入字节数据的基本方法。FileOutputStream是Java中用于向文件写入数据的输出流类。它继承自OutputStream类,是字节输出流的一种。FileOutputStream可以用来写入字节数据到文件中,可以创建新文件或覆盖已有文件的内容。
3.2常用方法
-
构造方法:
- FileOutputStream(String name):根据指定的文件名创建FileOutputStream对象。如果文件不存在,则会创建新文件;如果文件已存在,则会覆盖原有内容。
- FileOutputStream(String name, boolean append):根据指定的文件名和追加标志创建FileOutputStream对象。如果append为true,则会在文件末尾追加数据;如果为false,则会覆盖原有内容。
- FileOutputStream(File file):根据指定的File对象创建FileOutputStream对象。
-
常用方法:
- void write(int b):将指定的字节写入文件。
- void write(byte[] b):将字节数组b中的数据写入文件。
- write(byte[] b, int off, int len):写入字节数组的一部分,从偏移量 off 开始,长度为 len。
- void close():关闭输出流并释放资源。
示例代码:
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamExample {
public static void main(String[] args) {
String content = "Hello, World!";
String fileName = "example.txt";
try (FileOutputStream fos = new FileOutputStream(fileName)) {
// 将字符串转换为字节并写入文件
fos.write(content.getBytes());
System.out.println("Data written to " + fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这段代码实现了将字符串内容"Hello, World!"写入到文件"example.txt"中的功能。通过FileOutputStream的write方法,将字符串转换为字节数组并写入文件。
注意事项
- 使用
FileOutputStream
写入文件时,如果文件不存在,它会自动创建文件;如果文件已存在,它将覆盖文件内容,除非在构造方法中指定append
参数为true
。 FileOutputStream
的写入方法是阻塞的,意味着在所有数据被写入之前,调用线程将被阻塞。- 必须处理
IOException
,因为写入操作可能会失败,例如,如果设备已满或访问被拒绝。 - 使用
try-with-resources
语句可以确保FileOutputStream
在使用完毕后被正确关闭,即使发生异常也是如此。 - 如果需要写入字符数据,应使用
Writer
类(如FileWriter
),因为FileOutputStream
只能处理字节数据。
总结:
File类用于文件和目录的管理,FileInputStream用于从文件中读取字节数据,FileOutputStream用于向文件写入字节数据。这三个类在文件操作中扮演着不同的角色,分别用于文件的元数据操作、读取数据和写入数据。在文件处理中,这三个类通常会结合使用,实现对文件的完整操作。