Java中的文件操作函数解析
文件操作是Java编程中经常需要用到的操作之一,也是Java中的IO流操作的一部分。Java提供了丰富的文件操作函数,这一节将对Java中常用的文件操作函数进行详细解析。
一、File类
Java提供了File类,它用于表示文件系统中的文件或目录。File类提供了多个构造方法来创建文件对象,常用的有如下方法:
1、File(String pathname)
将指定路径名转换为抽象路径名。
例如:
File file = new File("D:\\test\\test.txt");
2、File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的File实例。
例如:
File file = new File("D:\\test", "test.txt");
3、File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的File实例。
例如:
File parent = new File("D:\\test");
File child = new File(parent, "test.txt");
File类提供了很多方法来操作文件和目录,如下:
1、创建文件
在File类中,通过createNewFile()方法可以创建一个新的空文件,如果文件已经存在,此时将不会创建新的文件。
File file = new File("D:\\test\\test.txt");
if (file.createNewFile()) {
System.out.println("创建文件成功!");
} else {
System.out.println("文件已经存在!");
}
2、创建目录
通过mkdir()方法可以在指定的目录下创建一个单级目录,如果目录已经存在,则此时不会创建。
File file = new File("D:\\test\\testDir");
if (file.mkdir()) {
System.out.println("创建目录成功!");
} else {
System.out.println("目录已经存在!");
}
通过mkdirs()方法可以在指定的目录下创建一个多级目录,如果目录已经存在,则此时不会创建。例如:
File file = new File("D:\\test\\testDir\\subDir");
if (file.mkdirs()) {
System.out.println("创建目录成功!");
} else {
System.out.println("目录已经存在!");
}
3、删除文件或目录
在File类中,通过delete()方法可以删除指定的文件或目录,如果删除成功,则返回true,否则返回false。
File file = new File("D:\\test\\test.txt");
if (file.delete()) {
System.out.println("删除文件成功!");
} else {
System.out.println("文件不存在或删除失败!");
}
4、修改文件名
在File类中,通过renameTo()方法可以修改指定文件的名称,这个方法可以用来重命名文件或移动文件。
File file = new File("D:\\test\\test.txt");
File destFile = new File("D:\\test\
ew.txt");
if (file.renameTo(destFile)) {
System.out.println("修改文件名称成功!");
} else {
System.out.println("修改文件名称失败!");
}
5、获取文件信息
在File类中,通过一系列的方法可以获得文件或目录的相关信息,如下:
a. getName(): 获取文件或目录的名称。
b. getPath(): 获取文件或目录的路径。
c. getParent():获取文件或目录的上一级目录。
d. isFile(): 判断当前File表示的是否是一个文件。
e. isDirectory(): 判断当前File表示的是否是一个目录。
f. length(): 获取文件的大小。
g. lastModified(): 获取最后一次修改时间。
h. list(): 获取目录下的所有文件名数组。
例如:
File file = new File("D:\\test\\test.txt");
System.out.println("文件名称:" + file.getName());
System.out.println("文件路径:" + file.getPath());
System.out.println("文件上一级目录:" + file.getParent());
System.out.println("是否是文件:" + file.isFile());
System.out.println("是否是目录:" + file.isDirectory());
System.out.println("文件大小:" + file.length());
System.out.println("最后一次修改时间:" + file.lastModified());
File dir = new File("D:\\test");
String[] list = dir.list();
System.out.println("目录下包含的文件名:");
for (String name : list) {
System.out.println(name);
}
二、字节流操作
字节流是Java中另外一个常见的文件操作方式,主要包括InputStream和OutputStream两个类,其中InputStream用来读取文件数据,OutputStream用来输出文件数据。常见的如下:
1、InputStream
InputStream是Java中所有输入流的父类,提供了read()方法和read(byte[] b)方法来读取数据。
a. read(): 从输入流中读取一字节的数据。
例如:
FileInputStream fis = new FileInputStream("D:\\test\\test.txt");
int b;
while ((b = fis.read()) != -1) {
System.out.print((char) b);
}
fis.close();
b. read(byte[] b): 从输入流中读取数据到字节数组b中。
例如:
FileInputStream fis = new FileInputStream("D:\\test\\test.txt");
byte[] b = new byte[3];
int len;
while ((len = fis.read(b)) != -1) {
System.out.print(new String(b, 0, len));
}
fis.close();
2、OutputStream
OutputStream是Java中所有输出流的父类,提供了write()方法和write(byte[] b)方法来输出数据。
a. write(int b): 将一个字节写入输出流中。
例如:
FileOutputStream fos = new FileOutputStream("D:\\test\\test.txt");
fos.write('a');
fos.close();
b. write(byte[] b): 将字节数组b中的数据写入输出流中。
例如:
FileOutputStream fos = new FileOutputStream("D:\\test\\test.txt");
String str = "Hello, world!";
byte[] b = str.getBytes();
fos.write(b);
fos.close();
三、字符流操作
字符流是一种更高层次的文件操作方式,主要包括Reader和Writer两个类。Reader和Writer类提供了一些读写字符的方法,可以让我们更方便地操作文本文件。常见的如下:
1、Reader
Reader是Java中所有读取字符流的父类,提供了read()方法和read(char[] cbuf)方法来读取数据。
a. read(): 从输入流中读取一个字符。
例如:
FileReader fr = new FileReader("D:\\test\\test.txt");
int c;
while ((c = fr.read()) != -1) {
System.out.print((char) c);
}
fr.close();
b. read(char[] cbuf): 从输入流中读取数据到字符数组cbuf中。
例如:
FileReader fr = new FileReader("D:\\test\\test.txt");
char[] cbuf = new char[3];
int len;
while ((len = fr.read(cbuf)) != -1) {
System.out.print(new String(cbuf, 0, len));
}
fr.close();
2、Writer
Writer是Java中所有写入字符流的父类,提供了write()方法和write(char[] cbuf)方法来输出数据。
a. write(int c): 将一个字符写入输出流中。
例如:
FileWriter fw = new FileWriter("D:\\test\\test.txt");
fw.write('a');
fw.close();
b. write(char[] cbuf): 将字符数组cbuf中的数据写入输出流中。
例如:
FileWriter fw = new FileWriter("D:\\test\\test.txt");
String str = "Hello, world!";
char[] cbuf = str.toCharArray();
fw.write(cbuf);
fw.close();
四、使用缓冲流
在进行文件读写时,由于磁盘写入速度较慢,为了提升读写效率,可以使用缓冲流来减少IO操作次数。在Java中,提供了BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter等缓冲流类。
1、BufferedInputStream和BufferedOutputStream
BufferedInputStream和BufferedOutputStream是Java中提供的缓冲字节流类,可以用来快速读写字节数据。使用时只需要将字节流对象作为参数传入,就可以创建一个缓冲流对象。
例如:
`java
FileInputStream fis = new FileInputStream("D:\\test\\test.txt");
Buffer
