File类
用于将文件或文件夹封装成对象
方便对文件与文件夹进行操作
File对象可以作为参数传递给刘的构造函数
import java.io.*;
class FileDemo{
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
consMethod();
}
// 创建对象
public static void consMethod(){
// 封装File对象,可以将已有和未有的文件封装
File f1=new File("a.txt");
File f2=new File("c:\\abc","b.txt");
File d=new File("c:\\abc");
File f3=new File(d,"c.txt");
sop(f1);
sop(f2);
sop(f3);
// separator为自动切换与系统相关的分隔符
File f4=new File("c:"+File.separator+"e.txt");
}
}
创建与删除
// 创建文件 boolean createNewFile();
// 在指定位置创建文件,如果已经存在,返回false,不创建
public static void method_1()throws IOException{
File f=new File("file.txt");
sop("create:"+f.createNewFile());
// 删除文件 boolean delete(); void deleteOnExit();
sop("delete:"+f.delete());
// 在结束时删除
f.deleteOnExit();
}
判断
// 判断 boolean exists();是否存在
public static void method_2()throws IOException{
File e=new File("file.txt");
sop(e.exists());
// sop(e.canExecute());文件能否运行
// 创建目录
File dir=new File("abc");
sop(dir.mkdir()); //创建多级目录 mkdirs();
}
public static void method_3{
File e1=new File("file.txt");
// 再判断文件是否是文件或目录时,必须先判断是否封装
sop(e1.exists());
sop(e1.isDirectory());
sop(e1.isDFile());
}
获取
// 获取信息 getName(); getPath(); getParent();
// getAbsolutePath(); getAbsoluteFile();
public static void metod_4{
// File e3=new File("c:\\a.txt");
File e3=new File("a.txt");
sop(e3.getPath());
sop(e3.getAbsolutePath());//绝对路径
//该方法返回的是绝对路径中的文件父目录,如果是相对路径返回null
// 如果相对路径有上一层,则返回该目录
sop(e3.getParent());
}
public static void method_5{
File e4=new File("c:\\text.java");
File e5=new File("c:\\haha.java");
//重命名
sop(e4.renameTo(e5));
}
文件列表
//列出可用的系统根
public static void listRootsDemo(){
File[]files=File.listRoots();
for(File f:files){
System.out.println(f);
}
}
//列出所有目录,包含隐藏
public static void listDemo(){
File f=new File("c:\\");//对象必须是已封装的目录
String[]names=f.list();
for(String name:names){
System.out.println(name);
}
}
筛选文件格式
public static void listDemo2(){
File dir=new File("c:\\");
String[]arr=dir.list(new FilenameFilter(){
public boolean accept(File dir,String name){
// System.out.println("dir:"+dir+"....name:"+name);
//判断是否需要返回
// return true;
return name.endsWith(".dll");
}
});
System.out.println("len:"+arr.length);
for(String name:arr){
System.out.println(name);
}
}
获取更多信息
public static void main(String[] args){
File dir=new File("c:\\");
//listFiles()相比list()可以获取更多信息
File[]files=dir.listFiles();
for(File f:files){
System.out.println(f.getName()+"__"+f.length());
}
}
列出目录下所有内容-递归
/*
列出指定目录下文件或者文件夹,包含子目录中的内容
即列出指定目录下所有内容
因为目录中还有目录,只要使用同一个列出目录功能的函数即可
在列出过程中出现的还是目录的话,可以再次调用本功能
函数自身调用自身,称为递归
**递归要注意的是
1.限定条件
2.递归次数,避免内存溢出
*/
import java.io.*;
class FileDemo3{
public static void main(String[] args)throws IOException{
File dir=new File("H:\\life4life");
showDir(dir,0);
}
public static String getLevel(int level){
StringBuilder sb=new StringBuilder();
for(int x=0;x<level;x++){
sb.append("|-");
}
return sb.toString();
}
/*递归函数演示
public static void toBin(int num){
if(num>0){
toBin(num/2);
System.out.println(num%2);
}
}
public static void getSum(int n){
if(n==1){
return 1;
}
return n+getSum(n-1);
}
*/
public static void showDir(File dir,int level){
System.out.println(getLevel(level)+dir.getName());
level++;
File[]files=dir.listFiles();
for(int x=0;x<files.length;x++){
if(files[x].isDirectory()){
showDir(files[x],level);
}
else{
System.out.println(getLevel(level)+files[x]);
}
}
}
}
删除带内容的目录
/*
删除一个带内容的目录
原理:在Windows中,删除目录是从里面往外删除
因此需要用到递归
*/
import java.io.*;
class RemoveDir{
public static void main(String[] args){
File dir=new File("d:\\testdir");
removeDir(dir);
}
public static void removeDir(File dir){
File[]files=dir.listFiles();
for(int x=0;x<files.length;x++){
if(files[x].isDirectory()){
removeDir(files[x]);
}
else{
System.out.println(files[x].toString()+"-file-"+files[x].delete());
}
}
System.out.println(dir+"--dir--"+dir.delete());
}
}
创建java文件列表
/*
练习
将一个指定目录下的java文件的绝对路径储存到一个文本文件中
建立一个java文件列表文件
思路:
1.对指定目录进行递归
2.获取递归过程中所有的java文件路径
3.将这些路径存储到集合中
*/
import java.io.*;
import java.util.*;
class JavaFileList{
public static void main(String[] args)throws IOException{
File dir=new File("H:\\");
List<File>list=new ArrayList<File>();
fileToList(dir,list);
// System.out.println(list.size());
File file=new File(dir,"javalist.txt")
writeToFile(list,file.toString());
}
public static void fileToList(File dir,List<File> list){
File[]files=dir.listFiles();
for(File file:files){
if(file.isDirectory()){
fileToList(file,list);
}
else{
if(file.getName().endsWith(".java")){
list.add(file);
}
}
}
}
public static void writeToFile(List<File>list,String javaListFile)throws IOException{
BufferedWriter bufw=null;
try{
bufw=new BufferedWriter(new FileWriter(javaListFile));
for(File f:list){
String path=f.getAbsolutePath();
bufw.write(path);
bufw.newLine();
bufw.flush();
}
}
catch(IOException e){
throw e;
}
finally{
try{
if(bufw!=null){
bufw.close();
}
}
catch(IOException e1){
throw e1;
}
}
}
}