1.File中的两个常量:
static String | pathSeparator
与系统相关的路径分隔符字符,为方便起见,表示为字符串。
|
static String | separator
与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串
|
package IO01;
import java.io.File;
/**
* 两个常量
*
* 1、路径分隔符 ; File.pathSeparator
* 2、名称分隔符 \(windows) /(linux 等) File.separator
*
*
* @author Wang
*
*/
public class Demo01 {
public static void main(String[] args) {
System.out.println(File.pathSeparator);
System.out.println(File.separator);
//路径表示形式
String path ="E:\\xp\\test\\2.jpg"; //这里有两个\\是因为一个是转义字符
path="E:"+File.separator+"xp"+File.separator+"test"+File.separator+"2.jpg"; //这种方式可以用于跨平台上
//推荐方式
path="E:/xp/test/2.jpg";
}
}
2.构造方法
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的
File 实例。
|
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的
File 实例。
|
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的
File 实例。
|
File(URI uri)
通过将给定的
file: URI转换为抽象路径名来创建新的
File实例。
|
package IO01;
import java.io.File;
/**
*
* 相对路径与绝对路径构造 File对象
* 1、相对路径
* File(String parent, String child) ==>File("E:/xp/test","2.jpg")
* File(File parent, String child) ==> File(new File("E:/xp/test"),"2.jpg")
* 2、绝对路径
* File(String name);
*
*
* @author Wang
*
*/
public class Demo02 {
public static void main(String[] args) {
String parentPath ="F:/xp/test";
String name ="2.jpg";
//相对路径
File src =new File(parentPath,name);
src =new File(new File(parentPath),name);
//输出
System.out.println(src.getName());
System.out.println(src.getPath());
//绝对路径
src =new File("F:/xp/test/2.jpg");
System.out.println(src.getName());
System.out.println(src.getPath());
//没有盘符: 以你当前的工作区构建
src =new File("test.txt");
src =new File(".");
System.out.println(src.getName());
System.out.println(src.getPath());
System.out.println(src.getAbsolutePath());//这个方法是是获得绝对路径
}
}
3.File的基本操作:
package IO01;
import java.io.File;
import java.io.IOException;
/**
*
* 测试File的常用方法
*
* @author Wang
*
*/
public class Demo03 {
public static void main(String[] args) throws IOException, InterruptedException {
//test01();
//test02();
test03();
}
public static void test01(){ //关于文件名
//File file =new File("F:/testIO/2.txt");
//File file =new File("testIO/2.txt");
File file =new File("2.txt");
System.out.println(file.getName()); //返回名称
System.out.println(file.getPath()); //如果是绝对路径,返回完整路径,否则相对路径
System.out.println(file.getAbsolutePath());//返回绝对路径
System.out.println(file.getParent());//返回上一级目录,如果是相对,返回null
}
public static void test02() { //输出文件的信息 这里的信息指的是文件属性里面的信息
System.out.println("============++++++++++++");
String path ="F:/testIO/200.txt";
File file =new File(path);
System.out.println("文件是否存在:"+file.exists()); //判断文件是否存在
System.out.println("文件是否可写"+file.canWrite()); //判断文件是否可读 写 canWrite() canRead()
System.out.println("============++++++++++++");
//判断是不是文件 isFile()
//判断是不是文件夹 isDirectory()
if(file.isFile()){
System.out.println("文件");
}else if(file.isDirectory()){
System.out.println("文件夹");
}else{
System.out.println("文件不存在");
}
System.out.println("是否为绝对路径"+file.isAbsolute());
System.out.println("长度为:"+file.length()); //这里输出的是文件属性里面的长度
}
public static void test03() throws IOException, InterruptedException {
//createNewFile() //不存在创建新文件 存在就不创建文件了会返回false
String path="F:/testIO/200.txt";
File file =new File(path);
if(!file.exists()){
boolean flag;
flag = file.createNewFile();
System.out.println(flag?"成功":"失败");
}
//删除文件
boolean flag =file.delete();
System.out.println(flag?"成功":"失败");
//static createTempFile(前缀3个字节长,后缀默认.temp) 默认临时空间
//static createTempFile(前缀3个字节长,后缀默认.temp,目录)
File temp= File.createTempFile("tes", ".temp",new File("F:/testIO")); //创建临时文件
Thread.sleep(10000); //这句话我们已经用过很多次了 就是让系统睡眠10000毫秒 所以你会在这里看见一个存在10s的文件
temp.deleteOnExit(); //退出即删除
}
}
4.
Interface FilenameFilter
accept
boolean accept(File dir, String name)
测试指定文件是否应包含在文件列表中。-
参数
-
dir
- 找到该文件的目录。 -
name
- 文件的名称。
结果
-
true
当且仅当该名称应包含在文件列表中时;false
否则。
-
5.下面是对文件的操作:
package IO01;
import java.io.File;
import java.io.FilenameFilter;
/**
*
* 对目录的操作
*
* @author Wang
*
*/
public class Demo04 {
public static void main(String[] args) {
String path ="F:/testIO/";
File file =new File(path); //与文件夹建立链接
if(file.isDirectory()){ //存在并且为目录
System.out.println("======子目录|文件名===");
String[] subNames =file.list(); //这个方法返回的是一个String数组【输出为文件的名字】 作用是输出他这个目录下的所有文件
for(String temp:subNames){ //遍历输出
System.out.println(temp);
}
System.out.println("=====子目录|文件File对象====");
File[] subFiles =file.listFiles(); //这个方法返回的是一个文件数组【输出的是文件的路径】 作用是输出他这个目录下的所有文件
for(File temp:subFiles){
System.out.println(temp.getAbsolutePath());
}
System.out.println("=====子文件.java对象====");
//命令设计模式
subFiles =file.listFiles(new FilenameFilter(){ //接口建立对象 使用了匿名内部类 重写接口的方法
@Override
//dir 代表file
public boolean accept(File dir, String name) {//这个方法的作用是测试指定文件是否在指定的文件夹中
//return System.out.println(dir.getAbsolutePath());
//return new File(dir,name).getName().endsWith(".java"); //这个会把所有后缀是.java都输出 输出的不一定是文件 可能是个.java的文件夹
return new File(dir,name).isFile()&&name.endsWith(".java"); //这里是限制了一下必须是文件
}
});
for(File temp:subFiles){
System.out.println(temp.getAbsolutePath());
}
}
}
}
6.输出一个文件夹的所有文件(递归)
package IO01;
import java.io.File;
import java.util.Arrays;
/**
*
* 输出子孙级目录|文件的名称(绝对路径)
* 1、listFiles()
* 2、递归
*
* static listRoots() 根路径
*
* @author Wang
*
*/
public class Demo05 {
public static void main(String[] args) {
String path = "F:/testIO";
File file = new File(path);
printName(file);
File[] roots =File.listRoots(); //这方法的作用是返回一个File的目录里面装的是根目录
//System.out.println(Arrays.toString(roots)); //这里使用toString来打印 我们再来一个用加强for来遍历
for(File temp : roots) {
System.out.println(temp);
}
//for(File temp:roots){ 打印你计算机的所有文件
// printName(temp);
//}
}
public static void printName(File file){//我们使用递归来把这个目录里面的文件全部输出
if(file == null || !file.exists()){ //如果不存在或者是文件夹为空 那么没有往下检索的必要了 递归的结束条件
return ;
}
System.out.println(file.getAbsolutePath()); //输出文件的绝对地址
if(file.isDirectory()){ //这里是递归体 如果这个文件还是一个文件夹 那么遍历输出里面的问价
for(File temp:file.listFiles()){
printName(temp);//递归的根本 自己掉自己
}
}
}
}
注意:
1.文件的后缀跟文件的内容没有关系 后缀只是决定了文件要使用什么软件打开;
2.这里的File文件的操作可以是文件也可以是文件夹;
3.File中的length()这个方法是没有办法读取文件夹的长度的;(也可以读取.jpg因为文件的后缀跟文件的内容没有关系 后缀只是决定了文件要使用什么软件打开)
4.接口是没法直接创建对象的 所以我们在用接口创建对象的时候我们就会写一个匿名内部类,然后重写里面的方法就能创建对象了;