File类
I:iuput(输入流)
O:output(输入流)
此文写的类都在io包下
File类的使用
1,File类的一个对象,代表一个文件或一个文件目录(文件夹)
2,File类声明在java.io包下
3,常用构造器
了解一些知识
相对路径:相较于某个路径下指明的路径
绝对路径:包含盘符在内的文件或文件目录的路径(完整的写完)
路径分隔符和系统有关:
–》windows和DOS系统默认使用“\”来表示(java用两个“\”是因为,java一个“\”有转义的意思)
–》UNIX和URL使用“/”来表示
(java中用“/”也是可以的)
Java支持跨平台运行,因此分隔符要慎用
为了解决这种隐患,File类提供了一个常量去识别操作系统,动态的提供分隔符
public static final String separator
比如:
File file=new File("D:\\abc\\hello.text");
File file=new File("D:"+File.separatorabc+"abc"+File.separatorabc+"hello.text");
File常用的构造器
public File(String pathname);
public File(String parent,String child);
public File(File parent,String child);
static class FileTest{
public void test1(){
/**
* 构造器1
*/
File file=new File("hello.text");//相对路径
File file1=new File("C:\\Users\\87627\\Desktop\\java project\\IOText\\Hello.text");//绝对路径
System.out.println(file);
/**
* 构造器2
*/
File file2=new File("C:\\Users\\87627\\Desktop\\java project","IOText");
//指定child这个文件目录(当然也可以是文件)
/**
* 构造器3
*/
File file3=new File(file2,"Hello.text");
//指定child这个文件
}
}
运行上面代码,会输出文件路径,即使对应的文件夹里没有对应文件,也不会报异常,它还不需要对应硬盘中的文件,此时仅仅只是内存层面中的对象,因为还没有涉及到对文件中数据的操作。
File的使用:常用方法
File类的获取功能
public String getAbsolutePath() 获取绝对路径
public String getPath() 获取路径
public String getName() 获取名称
public String getParent() 获取上层文件目录路径,若无,返回null
public loog Length() 获取长度(即字节数),不能获得目录长度
public loog lastModifind() 获取最后一次修改的时间,毫秒值
(下面相应的文件并没有创建)
public void method(){
File f1=new File("hello.txt");
File f2=new File("D:\\io\\hi.txt");
System.out.println(f1.getAbsolutePath());
System.out.println(f1.getPath());
System.out.println(f1.getName());
System.out.println(f1.getParent());
System.out.println(f1.length());
System.out.println(f1.lastModified());
System.out.println();
System.out.println(f2.getAbsolutePath());
System.out.println(f2.getPath());
System.out.println(f2.getName());
System.out.println(f2.getParent());
System.out.println(f2.length());
System.out.println(f1.lastModified());
}
(运行后打印结果如上图所示,这时候都是内存层面上得,并不涉及硬件上的。)
首先有几个点要注意下,首先,按理来说,f1得上级文件应该是“C:\Users\87627\Desktop\java project\”。但却输入null; 还有就是,因为我们的文件并不存在,所以长度及最后一次操作时间都是“0”。
之后去创建对应得文件(里面内容随便输入):
可以看到,用相对路径得上级文件目录依旧为null
最后操作时间为毫秒值,如果我们要看到具体时间可以修改为:
System.out.println(new Date(f1.lastModified()));
之后,在介绍两个方法:
如下两个方法设用于文件目录
public String[] list() //获取指定目录下所有文件或者文件目录得名称数组
public Filep[] listFiles() //获取指定目录下所有文件或文件目录得File数组
File file1=new File("D:\\");
String[] list=file1.list();
for(String s:list){
System.out.println(s);
}
for(String s:list) 的意思是:
for(int i=0;i< lists.size();i++)
{
String s=list.get(i);
}
(遍历数组,依次赋值给s)
第二个方法也是同样的方式
File[] files=file1.listFiles();
for(File f:files){
System.out.println(f);
}
不同的点在于:第二个方法打印的是绝对路径,包含后缀也会打印出来。
File类的重命名
常用方法:
public boolean renameTo(File dest); 把文件重命名为指定的文件路径
这个方法意思是:将一个文件改名后,放到别的路径下,之后返回一个布尔值,如果是true表示成功,false表示失败。
public void method(){
File file1=new File("hello.txt");
File file2=new File("D:\\io\\hi.txt");
boolean t=file1.renameTo(file2);
System.out.println(t);
}
如果要返回true的话,要关注几个问题:
1,要被重命名的文件在硬盘中 必须要存在
2,转移后的目录下,不能出现重命名一样的文件,
以上任意一条未达成都会返回false。
File类的判断功能
public boolean isDirectory() 判断是否是文件目录
public boolean isFile() 判断是否是文件
public boolean exists() 判断是否存在
public boolean canRead() 判断是否可读
public boolean canWrite() 判断是否可写
public boolean isHidden() 判断是否隐藏
以一个存在的文件为例:
public void method(){
File file=new File("D:\\io\\hi.txt");
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.exists());
System.out.println(file.canRead());
System.out.println(file.canWrite());
System.out.println(file.isHidden());
file.isDirectory();
file.isFile();
file.exists();
file.canRead();
file.canWrite();
file.isHidden();
}
File的创建及删除功能
public boolean creatNewFile() 创建文件,若文件存在,则不创建,返回false
public boolean mkdirs() 创建文件目录,如果上层文件不存在,一并创建
public boolean medir() 创建文件目录,如果存在,则不创建。如果上层文件村在,不创建
public boolean delete() 删除文件或文件夹
注意事项:java删除不走回收站
public void method() throws IOException {
File file1=new File("hi.txt");
File file2=new File("D:\\io\\hi2");
if(file1.exists()) {
file1.delete();
System.out.println("删除成功");
}else{
file1.createNewFile();
System.out.println("创建成功");
}
System.out.println(file2.mkdir());
}
public boolean creatNewFile():如果没有后缀,会生成一个未知格式的文件,而不会生成一个文件目录。
小知识
假设有两个文件分别为:file1.txt,file2.txt。
其中实际硬盘洪存在的只有file1.txt
其中file1.txt很多属性都是具有的,
而内存中的file2.txt很多属性都是默认值。
如果需要读写文件内容,必须使用到IO流来完成;
File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”