
如何学习第九章 java Io 流?
我们从基础四个类开始:
fileoutputStream类
fileinputStream类
FileReader类
FileWriter类
到常用高级的
字节缓冲流类
字符缓冲流类
InputStreamReader类
OutputStreamWriter类
ObjectOutputStream类
Propertites类
总之就是十个类的学习
## ⼀、File类
概念:代表物理盘符中的⼀个⽂件或者⽂件夹。
⽅法名 描述
createNewFile() 创建⼀个新⽂件。
mkdir() 创建⼀个新⽬录。
delete() 删除⽂件或空⽬录。
exists() 判断File对象所对象所代表的对象是否存在。
getAbsolutePath() 获取⽂件的绝对路径。
getName() 取得名字。
getParent() 获取⽂件/⽬录所在的⽬录。
isDirectory() 是否是⽬录。
isFile() 是否是⽂件。
length() 获得⽂件的⻓度。
listFiles() 列出⽬录中的所有内容。
开始演示代码:
FileDemo1 文件的一波 *** 作 非常简单 没有任何疑问
package com.tuling.part1;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
File file =new File("D:\tuling\test1\demo1.java");
System.out.println("文件的绝对路径:"+file.getAbsolutePath());
System.out.println("文件的名字:"+file.getName());
System.out.println("文件的大小:"+file.length());
}
}
运行结果 没有任何疑问
文件的绝对路径:D:tulingtest1demo1.java 文件的名字:demo1.java 文件的大小:9
文件和文件夹的 *** 作是一模一样的 文件是否存在不影响方法的使用 非常简单
package com.tuling.part1;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
File file =new File("D:\tuling\test1\demo1.java");
System.out.println("文件的绝对路径:"+file.getAbsolutePath());
System.out.println("文件的名字:"+file.getName());
System.out.println("文件的大小:"+file.length());
File dir =new File("D:\tuling\test");
System.out.println("文件夹的绝对路径:"+dir.getAbsolutePath());
System.out.println("文件夹的名字:"+dir.getName());
System.out.println("文件夹的大小:"+dir.length());
}
}
运行结果
文件的绝对路径:D:tulingtest1demo1.java 文件的名字:demo1.java 文件的大小:9 文件夹的绝对路径:D:tulingtest 文件夹的名字:test 文件夹的大小:0
**//判断以下文件是否存在**
if(file.exists()){
file.delete();
}else{
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
思考 如何递归遍历一个文件夹下所有的文件和文件夹呢
代码如下;
package com.tuling.part1;
import java.io.File;
import java.io.IOException;
public class FileDemo {
//递归遍历文件夹所有的内容
public static void printDir(File dir){
if(dir.isFile()){
System.out.println(dir);
}else{
File[] files = dir.listFiles();
for (File file:files
) {
if(file.isFile()){
System.out.println(file);
}else{
printDir(file);
}
}
}
}
public static void main(String[] args) {
File file =new File("D:\tuling\test1\demo.txt");
System.out.println("文件的绝对路径:"+file.getAbsolutePath());
System.out.println("文件的名字:"+file.getName());
System.out.println("文件的大小:"+file.length());
//判断以下文件是否存在
if(file.exists()){
file.delete();
}else{
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("是否是文件:"+file.isFile());
System.out.println("是否是文件夹:"+file.isDirectory());
File dir =new File("D:\tuling\test1");
System.out.println("文件夹的绝对路径:"+dir.getAbsolutePath());
System.out.println("文件夹的名字:"+dir.getName());
System.out.println("文件夹的大小:"+dir.length());
if(!dir.exists()){
dir.mkdirs();
}else{
// dir.delete();
}
System.out.println("是否是文件:"+file.isFile());
System.out.println("是否是文件夹:"+file.isDirectory());
String[] list = dir.list();
for (String str:list
) {
System.out.println(str);
}
// File[] files = dir.listFiles();
// for (File ele:files
// ) {
// System.out.println(ele);
//
// }
printDir(dir);
}
}
运行结果如下:
文件的绝对路径:D:tulingtest1demo.txt 文件的名字:demo.txt 文件的大小:0 是否是文件:true 是否是文件夹:false 文件夹的绝对路径:D:tulingtest1 文件夹的名字:test1 文件夹的大小:0 是否是文件:true 是否是文件夹:false child demo.txt demo1.java demo2.java D:tulingtest1childchild.txt D:tulingtest1demo.txt D:tulingtest1demo1.java D:tulingtest1demo2.java
异常 来了
空指针异常案例
public static void printDir(File dir){
if(dir.isFile()&&dir.getName().endsWith(".java")){
System.out.println(dir);
}else{
File[] files = dir.listFiles();
for (File file:files
) {
if(file.isFile()&&file.getName().endsWith(".java")){
System.out.println(file);
}else{
printDir(file);
}
}
}
```java Exception in thread "main" java.lang.NullPointerException at com.tuling.part1.FileDemo.printDir(FileDemo.java:16) at com.tuling.part1.FileDemo.printDir(FileDemo.java:23) at com.tuling.part1.FileDemo.printDir(FileDemo.java:23) at com.tuling.part1.FileDemo.main(FileDemo.java:77)
因为有些文件是.txt结尾的 而不是.java结尾的
FileFilter接⼝
FileFilter:⽂件过滤器接⼝boolean accept(File pathname) 。
当调⽤File类中的listFiles()⽅法时,⽀持传⼊FileFilter接⼝接⼝实现类,对获取⽂件进⾏过滤,只有满
⾜条件的⽂件的才可出现在listFiles()的返回值中。初学者学起来比较绕 有点复杂 多来几遍比较好
案例代码演示:
package com.tuling.part1;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
public class FileDemo {
//递归遍历文件夹所有的内容
public static void printDir(File dir){
if(dir.isFile()&&dir.getName().endsWith(".java")){
System.out.println(dir);
}else{
File[] files = dir.listFiles();
if(files!=null){
for (File file:files
) {
if(file.isFile()&&file.getName().endsWith(".java")){
System.out.println(file);
}else{
printDir(file);
}
}
}}
}
public static void printDir2(File dir){
if(dir.isFile()&&dir.getName().endsWith(".java")){
System.out.println(dir);
}else{
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory()||file.isFile()&&file.getName().endsWith(".java");
}
});
if(files!=null){
for (File file:files
) {
if(file.isDirectory()){
printDir(file);
}else{
System.out.println(file);
}
}
}}
}
public static void main(String[] args) {
File file =new File("D:\tuling\test1\demo.txt");
System.out.println("文件的绝对路径:"+file.getAbsolutePath());
System.out.println("文件的名字:"+file.getName());
System.out.println("文件的大小:"+file.length());
//判断以下文件是否存在
if(file.exists()){
file.delete();
}else{
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("是否是文件:"+file.isFile());
System.out.println("是否是文件夹:"+file.isDirectory());
File dir =new File("D:\tuling\test1");
System.out.println("文件夹的绝对路径:"+dir.getAbsolutePath());
System.out.println("文件夹的名字:"+dir.getName());
System.out.println("文件夹的大小:"+dir.length());
if(!dir.exists()){
dir.mkdirs();
}else{
// dir.delete();
}
System.out.println("是否是文件:"+file.isFile());
System.out.println("是否是文件夹:"+file.isDirectory());
String[] list = dir.list();
for (String str:list
) {
System.out.println(str);
}
// File[] files = dir.listFiles();
// for (File ele:files
// ) {
// System.out.println(ele);
//
// }
printDir2(dir);
}
}
运行结果
文件的绝对路径:D:tulingtest1demo.txt 文件的名字:demo.txt 文件的大小:0 是否是文件:true 是否是文件夹:false 文件夹的绝对路径:D:tulingtest1 文件夹的名字:test1 文件夹的大小:0 是否是文件:true 是否是文件夹:false child demo.txt demo1.java demo2.java D:tulingtest1childchild.java D:tulingtest1demo1.java D:tulingtest1demo2.java
总结: 本节知识点主要讲解了 file类的常用方法 以及一个filefilter接口的使用
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)