File文件基本概述
File类,文件包括文件,和文件夹。流只能操作数据,不能操作文件夹
File基本方法
//new File(“a.txt”);把a.txt封装成一个对象,如果不存在这个文件,系统创建一个a.txt
File f1=new File(“a.txt”);//参数是String,注意a.txt是一个相对路径,绝对路径比如c:\\aaa\\a.txt
File F2=new File(“c:\\abc”,”b.txt”)//传递两个字符串,父路径+具体文件。功能其实和c:\\abc\\b.txt功能一样,不过可以在b.txt中传递一个变量
File d=new File(“c:\\abc”);
File d3=new File(d,”c.txt”)
知识点:sop方法是System.out.println()的缩写
public static voidsop(Object obj) {//sop方法就等控制台输出的简版,
System.out.println(obj);
}
定义一个静态方法 sop(),接收的参数是Object,当调用sop方法时,它就会执行他内部的语句System.out.println(obj);将传入的obj打印出来。
对于程序中每一次调用sop()的作用,其实就是为了每次需要打印结果时少写一句System.out.println()这句代码。sop的作用就等同于这句话。
sop(“s1=”+str)= System.out.println(“s1=”+str);
分隔符重点:new File(“c:aaa\\bbb\\a.txt”)
Windows 和Unix ,Linux系统默认分隔符不同 windows 下是\ unix.linux是/,但是代码中要加\转义字符,为了提高代码的可移植性,跨平台 可以用File.separator()
例如:new File(“c:aaa”+“File.separator()”+bbb +“File.separator()”+“a.txt”)
重点掌握的方法:创建一个文件:
Boolean creatNewFile(); 创建一个文件注意返回值是boolean类型,用来判断是否创建了具体文件,如果第一次运行 sop(file.creatNewFile()) 返回打印true 第二次运行打印显示false 注意和输出流的区别,输出流管道对象创建以后,再次创建就会覆盖原来的文件。
删除文件:delete(); 第一次删除返回true 第二次删除返回false
Void deleteOnExit(); 程序运行当jvm退出时,自动删除标记的文件对象;
例如:File f=new File(“a.txt”)
f.deleteOnExit();
判断:boolean exists(); 判断文件是否存在,new File(“a.txt”)
IsFile()//false,加f.creatNewFIle(),返回true,
IsDirectory(); // new File(“aaa”),f.madir(),创造一级文件夹,new File(“d:\\a\\aa”),f.madirs().创建多级目录
IsHidden()//是否为隐藏文件,并不是所有的文件流都可以读取,虽然字节流可以读取大部分的文件,但是c盘中一个system隐藏的文件不能读取,一般软件开发都要判断是否为隐藏文件,如果不判断,读取文件,不论是否隐藏都可以被读取。
IsAbsoulte();//是否为抽象路径 d:\\aa\\bb\\c.txt返回true
获取信息:
例如:File f1=new File(“c:\\a.txt”) 返回是String类型 获取抽象路径名表示文件,或者文件夹,f1.getName(),获取文件名字
File f2=new File(“d:\\ct.txt”) 获取抽象路径名字f2.getPath();返回字符串类型
F2.getPatent():获取父目录文件夹\\
GetPath()有可能获取的是抽象路径名字:new File(“d:\\aaa\bbb\c.txt”) \\此时f2.getPath()获取的就是抽象路径,也是绝对路径
F2.getAbsolutePath()=f.getParent()+f.getName():获取抽象路径名字,例如c:\\aaa\test.java
返回类型是long类型 lastModified();最后修改时间。
文件
Boolean renameTo(File file)方法
例如:File f1=new File(“c:\\a.txt”)
File f2=new File(“d:\\b.txt”):
F1.renameTo(“d:\\b.txt”);
方法 listRoots() 静态方法,没有对象,返回一个File 数组;
package 文件;
importjava.io.*;
/*
* 目标打印出盘下的所有文件*/
public classtest01 {
publicstatic void main(String[] args) {
//fieltest();
dayinpanfu();
}
publicstatic void fieltest(){
File f=new File("d:\\");//打印出包括隐藏文件内的所有文件
String[]f1=f.list();//注意返回类型是字符数组类型
for(Stringf2:f1)
{
System.out.println(f2);
}
}
publicstatic void dayinpanfu(){
File []f=File.listRoots();//打印根路径盘符,返回文件类型
for(File f2:f)//f2获得盘符,把盘符传递给文件对象
{
System.out.println(f2);
Filef3=new File(f2.toString());//打印出包括隐藏文件内的所有文件
String[]f1=f3.list();//注意返回类型是字符数组类型
for(Stringf4:f1)
{
System.out.println(f4);
}
}
}
}
获取文件对象listFiles();返回File[]数组类型
package 文件;
importjava.io.*;
/*
* 需求分析:
* 获取d:\\Test文件夹下文件名字,路径,长度
* listFiles(),返回文件数组*/
public class listFIles {
public static void main(String[] args) {
f=new File("d:\\Test");
f1=f.listFiles();//获取子类文件对象,比获取字符数组 list,有优势,通过获取文件对像就可以获取,文件名字,文件路径,文件长度
for(File d2:f1)
//打印出子文件名字,路径,长度
System.out.println("文件名字="+d2.getName()+"文件路径"+d2.getAbsolutePath()+"文件长度"+d2.length());
}
}
}
递归调用,实现输出一个文件夹中所有文件
package 文件;
importjava.io.*;
/*
* 便利出d:\\Temp下子文件,和文件下的子文件,和目录
* 思路:把一个文件夹,用listFiles();方法存到一个文件数组中,对这个文件数组中每一个文件进行判断,如果是文件就打印,如果是文件夹
* 递归调用show函数,传递给show函数参数是一个文件夹*/
public class 递归求目录文件 {
public static void main(String[] args) {
f=new File("d:\\TempFile");
show(f);
}
public static void show(File f){
System.out.println(f);
f1=f.listFiles();//文件夹子文件存到文件数组中
for(int i=0 ;i<f1.length;i++)
{
if(f1[i].isDirectory())//递归调用,当时文件夹时
show(f1[i]);
else System.out.println(f1[i]);//文件打印
}
}
}
/*
* public static void main(String[] args){
File f=newFile("d:\\TempFile");
show(f);
}
public static void show(File file){
File []f2=file.listFiles();
for(File f3:f2)
{ System.out.println(f3);
if(f3.isDirectory())
show(f3);
else System.out.println(f3);
}
}*/
//java实现文件夹删除
/*
删除一个带内容的目录。
删除原理:
在window中,删除目录从里面往外删除的。
既然是从里往外删除。就需要用到递归。
*/
import java.io.*;
class RemoveDir
{
publicstatic void main(String[] args)
{
Filedir = new File("d:\\testdir");
removeDir(dir);
}
publicstatic void removeDir(File dir)
{
File[]files = dir.listFiles();
for(intx=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());
}
}
//文件过滤器(作用)过滤指定文件名保留我们需要的
List(FilenameFilter 参数)//实现具体FilenameFilter接口的accept方法
例如:
package 文件;
importjava.io.*;
/*
*1: list方法参数实现具体FilenameFilter的accept方法
*1:list方法参数传递一个FilenameFilter或者其子类的对象
*2:创建实现接口FilenameFilter接口的类,或者实现其接口的子类
*3:实现public boolean accept(Fiel fiel,Stringname)方法
*该方法将制定File的所有子文件夹,目录进行迭代,如果返回true则该方法,就会列出该子目录
*或者文件夹
* */
public class FilenameFilterTest {
public static void main(String[] args) {
fp=new File("d:\\Test");
filename=fp.list(new MyFilenameFilter());
/*
*注意这里不能用for(inti=0;i<filename.length;i++)
*syso ctro+/
*不是所有的子文件,或者文件佳都是以.java结尾的,可能导致数组越界异常*/
for(String name :filename)
System.out.println(name);
/*
*或者是增强for循环,for(String name :filename)
*syso(name)*/
}
}
/*实现过滤器的FilenameFilter的accept方法*/
classMyFilenameFilter implements FilenameFilter{
public boolean accept(File filename,String name)
{
return name.endsWith(".java");
}