JAVA入门之JAVA如何操作文件
1、操作一 : 创建文件
我们这里通过 JAVA API 在 D盘 创建一个文本文件 “NewFileByJava.txt”:
在 JAVA 中,类 java.io.File 代表一个文件,我们通过指定文件路径来创建这个类的对象,并判断如果这个文件不存在,则创建新文件, 具体代码如下 :
// 指定文件路径创建 File 对象
File theNewFile = new File("D:/NewFileByJava.txt");
// 判断文件是否存在,如果不存在,则尝试创建文件
if(!theNewFile.exists()){
try {
// 调用 createNewFile 放创建文件,并返回创建结果
boolean createResult = theNewFile.createNewFile();
if(createResult){
System.out.println("文件创建成功!");
}else{
System.out.println("文件创建失败!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
理论上,通过 JAVA API 可以创建任意格式的文件(任何格式文件从磁盘这个角度看,就是一堆二进制数据而已),但使用JAVA原生的文件API,我们通常只会创建文本文件,因为其他格式的文件都有非常严格的规范,我们一般都通过第三方开发包来操作,比如通过 POI 来操作 Excel !
关于 POI 来操作 Excel,大家如果有兴趣可以参考如下经验:
2、操作二 : 向文件输出内容
我们通过JAVA输出流相关类向刚刚创建的文件中输出两行内容 :
// 创建一个文件对象,我们刚刚创建这个文件
File theNewFile = new File("D:/NewFileByJava.txt");
// 创建一个文件输出流对象
FileOutputStream fos = new FileOutputStream(theNewFile);
// 创建带缓冲区的字符流输出对象,通过这个对象,我们的内容输出效率较高
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
// 输出第一行信息
bw.write("第一行信息");
// 输出回车符(\r)换行符(\n)
// 对于 Windows系统,我们输出这两个字符后,在文件中就表现为"另起一行"
bw.write("\r\n");
bw.write("第二行信息");
// 将缓冲区的内容输出到文件中
bw.flush();
// 关闭输入流对象!!这是最佳实践!!
// 任何文件流操作完毕后,必须将流对象关闭!!
fos.close();
bw.close();
System.out.println("文件输入完毕!");
再强调一遍 : IO流对象操作完毕后,一定要关闭!!!否则你可能会遇到很多意想不到的问题!!!
3、操作三 : 从文件中读取内容
我们通过 JAVA API 将刚刚写入文件的内容读取出来,并输出到控制台中 :
// 创建一个文件对象,我们刚刚创建这个文件
File theNewFile = new File("D:/NewFileByJava.txt");
// 创建文件输入流对象,注意,这里的输入流和输出流是相对程序而言的!
// 从程序中往外输出就是输出流,往程序中读入就是输入流
FileInputStream fis = new FileInputStream(theNewFile);
// 创建带缓冲区的字符流输入对象
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
// 调用br.readLine(), 逐行读入所有数据,读到文件末尾,返回 null
while((line = br.readLine()) != null){
System.out.println(line);
}
// 操作完毕,关闭所有流对象
fis.close();
br.close();
4、操作四 : 删除文件
我们通过 File 对象的 delete 放将文件删除!该方法返回一个 boolean 值,表明我们这个删除操作是否成功!
该方法适用于任何文件,只要我们知道该文件的具体路径,就可以删除!
// 创建一个文件对象
File theNewFile = new File("D:/NewFileByJava.txt");
// 调用 delete 方法将自己删除,并返回删除结果
boolean deleteResult = theNewFile.delete();
if(deleteResult){
System.out.println("文件删除成功!");
}else{
System.out.println("文件删除失败!");
}
注意 : 这个方法同样适用于删除文件夹,在 JAVA 中,一个文件夹也是一个文件,也通过 File 对象来表示!
5、操作五 : 通过递归操作,遍历一个文件夹下所有的文件
我们先看看通过递归调用输出文件下所有具体文件路径的方法 :
/**
* 递归调用,输出文件夹下所有的内容
* @param fileObj
*/
private static void outputAllFileNames(File fileObj){
if(null == fileObj){
return;
}
/**
* 如果是文件夹,则列出其中所有子文件 :
* 如果子文件是具体文件,则输出 其文件路径;
* 如果子文件是文件夹,则递归调用该方法,输出其内容。
*/
if(fileObj.isDirectory()){
File[] allFiles = fileObj.listFiles();
for(File file : allFiles){
// 如果子文件是文件夹,则递归调用该方法,输出其内部的信息
if(file.isDirectory()){
outputAllFileNames(file);
}else{ // 对于具体文件,直接输出文件路径即可
System.out.println(file.getAbsolutePath());
}
}
}else{
// 对于具体文件,直接输出文件路径即可
System.out.println(fileObj.getAbsolutePath());
}
}
我们可以基于这个遍历所有文件的方法,构造一个自己的文件搜索程序!
6、总结 : 我们通过常用的 JAVA API 进行了文件的创建,输出,读入,删除,遍历操作!通过这些基本操作的组合,我们能构造出很多非常好用的功能!