java基础9(IO流)-File类
File类
File:文件和目录路径名的抽象表示形式。即java中把文件或者目录都封装成File对象
代码练习1
import java.io.File;
public class FileDemo1{
public static void main(String[] args){
//将路径封装成一个file对象
File file = new File("/home/hadoop/javatest/wujiadong1.txt");
System.out.println(file);
}
}
---------------------------------------
输出结果
/home/hadoop/javatest/wujiadong1.txt
---------------------------------------
File类构造方法
代码练习2
import java.io.File;
public class FileDemo1{
public static void main(String[] args){
//方式1
File file1 = new File("/home/hadoop/javatest/wujiadong1.txt");
//方式2
File file2 = new File("/home/hadoop/javatest","wujiadong1.txt");
//方式3
File file3 = new File("/home/hadoop/javatest");
File file4 = new File(file3,"wujiadong1.txt");
System.out.println(file1);
System.out.println(file2);
System.out.println(file3);
System.out.println(file4);
}
}
-----------------------------------------------
输出结果
/home/hadoop/javatest/wujiadong1.txt
/home/hadoop/javatest/wujiadong1.txt
/home/hadoop/javatest
/home/hadoop/javatest/wujiadong1.txt
-----------------------------------------------------
创建功能
代码练习3
import java.io.File;
import java.io.IOException;
public class FileDemo{
public static void main(String[] args) throws IOException {
//根据一个路径得到File对象
File file = new File("/home/hadoop/a.txt");
File file2 =new File("/home/hadoop","b.txt");
File file3 = new File("/home/hadoop");
File file4 = new File(file3,"c.txt");
File file5 = new File("/home/hadoop/aaa");
File file6 = new File("/home/hadoop/bbb/ccc/ddd");
//创建文件
System.out.println(file.createNewFile());
System.out.println(file2.createNewFile());
System.out.println(file4.createNewFile());
System.out.println(file5.mkdir());//创建一级目录
System.out.println(file6.mkdirs());//创建多级目录
}
}
删除功能
代码练习4
import java.io.File;
import java.io.IOException;
public class FileDemo{
public static void main(String[] args) throws IOException {
//根据一个路径得到File对象
File file = new File("/home/hadoop/a.txt");
file.delete();//注意只能删除文件或单级目录
}
}
重命名功能
代码练习5
import java.io.File;
import java.io.IOException;
public class FileDemo{
public static void main(String[] args) throws IOException {
//根据一个路径得到File对象
File file = new File("/home/hadoop/a.txt");
file.createNewFile();
File file1 = new File("/home/hadoop/wujiadong.txt");
file.renameTo(file1);
}
}
判断功能
代码练习6
import java.io.File;
import java.io.IOException;
public class FileDemo{
public static void main(String[] args) throws IOException {
//根据一个路径得到File对象
File file = new File("/home/hadoop/a.txt");
file.createNewFile();
File file1 = new File("/home/hadoop/wujiadong.txt");
file.renameTo(file1);
System.out.println("isDirectory:"+file1.isDirectory());
System.out.println("isFile:"+file1.isFile());
System.out.println("exists:"+file1.exists());
System.out.println("canRead:"+file1.canRead());
System.out.println("canWrite:"+file1.canWrite());
System.out.println("isHidden:"+file1.isHidden());
}
}
-----------------------------------
输出结果
isDirectory:false
isFile:true
exists:true
canRead:true
canWrite:true
isHidden:false
----------------------------------
获取功能
代码练习7
import java.io.File;
import java.io.IOException;
public class FileDemo{
public static void main(String[] args) throws IOException {
//根据一个路径得到File对象
File file = new File("/home/hadoop/a.txt");
file.createNewFile();
System.out.println("getAbsolutePath:"+file.getAbsolutePath());//绝对路径
System.out.println("getPath:"+file.getPath());//相对路径
System.out.println("getName:"+file.getName());//名称
System.out.println("length:"+file.length());//大小
System.out.println("lastModified:"+file.lastModified());//获取最后一次修改时间,毫秒值
}
}
-------------------------------
输出结果
getAbsolutePath:/home/hadoop/a.txt
getPath:/home/hadoop/a.txt
getName:a.txt
length:0
lastModified:1480772014000
---------------------------------
高级获取功能(重点)
代码练习8
import java.io.File;
public class FileDemo{
public static void main(String[] args){
//指定一个目录
File file = new File("/home/hadoop/javatest");
//public String[] list():获取指定目录下的所有文件夹的名称数组
String[] strArray = file.list();//只列出文件名称
for(String s:strArray){
System.out.println(s);
}
System.out.println("---------");
//public File[] listFiles():获取指定目录下的所有文件夹的File数组
File[] fileArray = file.listFiles();//文件详细路径和名称
for(File f:fileArray){
System.out.println(f.getName());
}
}
}
练习:判断目录/home/hadoop下是否有后缀名为.txt的文件,如果有,就输出此文件名称
代码练习9
/*
* 判断目录/home/hadoop下是否有后缀名为.txt的文件,如果有,就输出此文件名称
* 封装目录;遍历文件或目录;判断获取到的是否是文件;是否以.txt结尾
*/
import java.io.File;
public class FileDemo1{
public static void main(String[] args){
File file = new File("/home/hadoop");
//获取该目录下所有文件或者文件夹的File数组
File[] fileArray = file.listFiles();
for(File f:fileArray){
//判断是否是文件
if(f.isFile()){
//判断是否以.txt结尾
if(f.getName().endsWith(".txt")){
System.out.println(f.getName());
}
}
}
}
}
-------------------------------------------------
输出结果
c.txt
b.txt
a.txt
wujiadong.txt
-----------------------------------------------
代码练习10
方法二(使用过滤器)
import java.io.File;
import java.io.FilenameFilter;
public class FileDemo1{
public static void main(String[] args){
File file = new File("/home/hadoop");
File[] fileArr = file.listFiles(new MyFileFilter());//传递过滤器
for(File f:fileArr){
System.out.println(f);
}
}
}
//自定义类继承FilenameFilter过滤器接口
class MyFileFilter implements FilenameFilter{
public boolean accept(File dir,String name){
return name.endsWith(".txt");
}
}
练习:获取/home/hadoop下的所有文件夹(过滤器)
import java.io.File;
import java.io.FileFilter;
public class FileDemo1{
public static void main(String[] args){
File file = new File("/home/hadoop");
File[] fileArr = file.listFiles(new FileFilterByDir());//获取指定目录下的文件夹
for(File f:fileArr){
System.out.println(f);
}
}
}
class FileFilterByDir implements FileFilter{
public boolean accept(File pathname){
return pathname.isDirectory();
}
}
FilenameFilter与FileFilter的比较
- FilenameFilter过滤器中的accept方法接受两个参数,一个是当前文件夹或文件夹所在路径,一个是当期文件或文件夹对象的名称
- FileFilter过滤器中的accept方法接受一个参数,这个参数是当期文件或文件夹对象
- 当需过滤文件名称时使用FilenameFilter;当需对当前文件或文件夹进行过滤,就可以使用FileFilter
练习:批量修改文件名
练习:递归输出指定目录下所有以.java格式结尾的文件
代码练习10
import java.io.File;
public class FilePathDemo{
public static void main(String[] args){
//封装目录
File srcFolder = new File("/home/hadoop/javatest");
getAllFilePath(srcFolder);
}
//递归功能
private static void getAllFilePath(File srcFolder){
File[] fileArray = srcFolder.listFiles();
//遍历
for(File file:fileArray){
if(file.isDirectory()){
getAllFilePath(file);
}else{
if(file.getName().endsWith(".java")){
System.out.println(file.getAbsolutePath());
}
}
}
}
}
练习:递归删除带内容的目录
代码练习11
import java.io.File;
public class FileDeleteDemo1{
public static void main(String[] args){
//封装目录
File srcFolder = new File("/home/hadoop/javatest/test");
deleteFolder(srcFolder);
}
private static void deleteFolder(File srcFolder){
//获取所有文件或目录
File[] fileArray = srcFolder.listFiles();
//遍历
for(File file:fileArray){
if(file.isDirectory()){
deleteFolder(file);
}else{
System.out.println("file.getName():"+file.delete());
}
}
System.out.println("srcFolder.getName()"+srcFolder.delete());
}
}
-------------------------------
这里需要注意的是fileArray不能等于null。
可以加入判断if(fileArray != null){}
递归:指在当前方法内调用自己的这种现象
public void show(){
show();
}
注意事项
- 递归一定要有限制条件
- 递归次数不能太多
- 构造方法不能递归使用