(1)如何创建一个文件夹?
java.io.File 有很多处理文件和文件夹的方法。
创建文件夹如下
File file = new File("E://demo");
file.mkdir();
这样就会在 E 盘创建一个 demo 文件夹,这个方法返回一个布尔值,如果文件夹已存在,就返回 false,否则返回 true。还有一个也是创建文件夹的方法
File file = new File("E://demo/demo1/demo2");
file.mkdirs();
这个方法会把所有需要的文件夹都创建,就是如果你原来只有一个 demo 文件夹,这方法就会将 demo1 和 demo2 都创建。而用第一个方法 mkdir() ,如果 demo1 文件夹不存在,就会创建失败。
(2)如何列出目录下的文件?
File file = new File("E://demo");
if(file.isDirectory()) {
for(String fileName : file.list()) {
System.out.println(fileName);
}
}
这段代码列出 E 盘下 demo 文件夹下的文件和目录。
File 的 list() 方法会返回一个 String[],包括该目录下的文件和文件夹的名字。如果该路径指定的文件不是一个文件夹,这个 list() 方法就会返回一个 null 值,所以我们可以先使用 isDirectory() 方法判断这个 file 是否是一个文件夹。
(3)如何遍历一个目录及其子目录下的所有文件?
public void listFile(File file) {
File[] files = file.listFiles();
for(File f : files) {
if(f.isDirectory()) {
listFile(f);
} else {
System.out.println(f.getName());
}
}
}
写了个递归的方法。
public static void main(String[] args) {
File file = new File("E://demo");
listFile(file);
}
这样就列出 “E//demo” 里包括子目录的所有文件了。
(4)如何创建一个文件?
创建文件跟创建目录有点类似,有两种方法:
- 一种是创建一个 File 对象,给定文件路径
File file = new File("E://demo/test.txt");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
- 一种是使用 File 类的静态方法 createTempFile(prefix, suffix, directory),使用给定的 prefix 、suffix 、directory 分别作为文件的前缀、后缀、目录。
File file = new File("E://demo");
try {
File.createTempFile("test", ".txt", file);
} catch (IOException e1) {
e1.printStackTrace();
}
这两个方法当指定的目录不存在是会抛出异常。
(5)如何获取文件的长度?
File file = new File("E://demo/test.txt");
long length = file.length();
length() 方法返回这个文件的字节长度。
(6)如何判断指定的文件是否存在?
用 exists() 方法
File file = new File("E://demo/test.txt");
if(file.exists()) {
System.out.println("file is exists");
} else {
System.out.println("file is not exist");
}
(7)如何按照指定的编码向文件中写入文本?
这里我们使用 java.io.OutputStreamWriter 类,
File file = new File("E://demo/test.txt");
OutputStreamWriter out;
try {
out = new OutputStreamWriter(new FileOutputStream(file), "UTF8"); //指定编码为 "UTF8"
out.write("hello world"); //写入文本
out.close();
} catch (IOException e) {
e.printStackTrace();
}
OutputStreamWriter 类有个构造方法可以在创建的时候指定字符编码,如果不指定,则使用系统的默认编码。注意这里写入文本会覆盖文件原来的文本。
(8)如何在文件末尾追加文本?
java.io.FileWriter 类继承了 OutputStreamWriter 类,它有一个构造方法 FileWriter(File file, boolean append),当 append = true 时,调用 write 方法就会将文本附加到文件末尾。
File file = new File("E://demo/test.txt");
FileWriter out;
try {
out = new FileWriter(file, true); //追加模式
out.write("hello world");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
(9)如何按行读取文本文件的内容?
我们可以使用 java.io.FileReader 来读取,不过需要写循环一个一个字符读,这样性能太低,所以我们用 BufferedReader 类。从这个类的名字就可以看出它会使用到缓存,这样我们就不用每读一个字符就访问一次文件。
File file = new File("E://demo/test.txt");
BufferedReader in;
try {
in = new BufferedReader(new FileReader(file));
String line = in.readLine(); //读取一行,如果已经到达文件结尾就返回 null
} catch (IOException e) {
e.printStackTrace();
}