1. 两个常量及路径表示形式
import java.io.File;
/**
* 两个常量
* 1、 路径分隔符 ;
* 2、 名称分隔符 \(windows系统) /(非windows系统 linux 等)
* @author Administrator
*
*/
public class Test01 {
public static void main(String[] args) {
System.out.println(File.pathSeparator);
System.out.println(File.separator);
//路径的表示形式
String path = "D:\\CER\\img";//\在java中表示转义字符,需要使用\\才能表示名称分隔符
path = "D:"+File.separator+"CER"+File.separator+"img";//适用于路径动态生成
path = "D:/CER/img";
}
}
2. File对象的构造方式
import java.io.File;
/**
* 相对路径与绝对路径构造File对象
* 1、相对路径(根据父路径位置确定子文件/目录位置)
* File(String parent,String child) ---> File("D:/CER/img","connecting.gif");
* File(File parent,String child) ---> File(new File("D:/CER/img"),"connecting.gif");
* 2、 绝对路径(直接定义子文件/目录位置)
* File(String path);
* @author Administrator
*
*/
public class Test02 {
public static void main(String[] args) {
//相对路径构造方法1
File f1 = new File("D:/CER/img", "connecting.gif") ;
System.out.println(f1.getName());
System.out.println(f1.getPath());
//相对路径构造方法2
File f_parent = new File("D:/CER/img");
File f2 = new File(f_parent, "connecting.gif");
System.out.println(f2.getName());
System.out.println(f2.getPath());
//绝对路径构造方法
File f3 = new File("D:/CER/img/connecting.gif");
System.out.println(f3.getName());
System.out.println(f3.getPath());
//没有盘符"D:",则按照工作空间"user。dir"构建
File f4 = new File("connecting.gif");
System.out.println(f4.getName());
System.out.println(f4.getPath());
System.out.println(f4.getAbsolutePath());
}
}
3. File类的常用方法
import java.io.File;
import java.io.IOException;
/**
* 常用方法
* 1、创建File对象、获取文件名、路径、上级路径
* 2、判断信息
* 3、长度 字节数(即文件大小)
* 4、创建和删除文件
* 5、临时文件
* @author Administrator
*
*/
public class Test03 {
public static void main(String[] args) {
get_Name();
check_Message();
file_Length();
try {
creat_Delete_File();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("操作文件失败");
}
try {
creat_Temp_File();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取文件名称、路径
public static void get_Name(){
//相对路径构造方法1
File f1 = new File("D:/CER/img", "connecting.gif") ;
System.out.println(f1.getName());
System.out.println(f1.getPath());
System.out.println(f1.getParent());//可能返回null
File f4 = new File("connecting.gif");
System.out.println(f4.getParent());//上级返回null
}
//判断信息
public static void check_Message(){
File f1 = new File("D:/CER/img", "connecting.gif") ;
//exists();文件是否存在?
System.out.println(f1.exists());
//canWrite()/read();文件是否可以读写?
System.out.println(f1.canWrite());
System.out.println(f1.canRead());
//isFile();是一个文件?
System.out.println(f1.isFile());
//isDirectory();是一个目录?
System.out.println(f1.isDirectory());
if (f1.isFile()) {
System.out.println("是一个文件");
}else if(f1.isDirectory()){
System.out.println("是一个目录");
}else{
System.out.println("文件不存在");
}
//isAbsolute();是否为绝对路径?
System.out.println(f1.isAbsolute());
}
public static void file_Length(){
File f1 = new File("D:/CER/img", "connecting.gif") ;
//文件大小,字节数;若为一个目录则长度为0
System.out.println(f1.length());
}
public static void creat_Delete_File() throws IOException{
File f3 = new File("D:/CER/img/demo.jpg");
if (!f3.exists()) {
//若文件不存在,创建新文件;若已存在相同文件,创建失败,返回false;若创建文件为操作系统关键字,创建失败
Boolean flag = f3.createNewFile();
System.out.println(flag?"创建成功":"创建失败");
Boolean flag1 = f3.delete();
System.out.println(flag1?"删除成功":"删除失败");
}
}
public static void creat_Temp_File() throws IOException, InterruptedException{
File temp = File.createTempFile("tempFile", ".temp", new File("D:/CER/img"));
Thread.sleep(1000);
temp.deleteOnExit();//程序退出删除临时文件
}
}
4. 目录(Directory)操作
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
/**
* 操作目录
* mkdir(),创建单个目录,必须保证上一级目录存在才能创建成功
* mkdirs(),将多级目录依次创建
* listFiles(new FilenameFilter()),根据要求输出文件,根据return的返回值判断
* listRoots 查询根路径
* @author Administrator
*
*/
public class Test04 {
public static void main(String[] args) {
File f = new File("D:/CER/img/a");
// 保证上一级目录存在,仅生成当前级别目录
f.mkdir();
File f2 = new File("D:/CER/img/aa/bb/cc.txt");
// 生成多级目录,直到生成最低级别目录
f2.mkdirs();
File f3 = new File("D:/CER/img");
if (f3.isDirectory()) {
String[] sunNames = f3.list();
System.out.println("输出子目录、文件名称");
for (String string : sunNames) {
System.out.println(string);
}
File[] subFiles = f3.listFiles();
System.out.println("输出子目录、文件路径");
for (File file : subFiles) {
System.out.println(file);
}
}
File f4 = new File("D:/CER/img");
if (f4.isDirectory()) {
System.out.println("**************测试命令设计模式***************");
// 命令设计模式 返回抽象路径名数组
File[] subFiles = f4.listFiles(new FilenameFilter() {
@Override
// dir 即代表 f4
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
System.out.println(dir.getName());
//是一个文件且以。gif结尾
return new File(dir,name).isFile()&&name.endsWith(".gif");
}
});
for (File file : subFiles) {
System.out.println(file);
}
}
//查询根路径
File[] roots = File.listRoots();
System.out.println(Arrays.toString(roots));
for (File file : roots) {
//输出设备中的所有文件
System.out.println(file.getName());
}
}
}
5. 使用递归方法打印目录下多级子目录及文件
import java.io.File;
/**
* 输出目录下多级子目录
* 使用递归的方法
* @author Administrator
*
*/
public class Test05 {
public static void main(String[] args) {
File f = new File("D:/CER/img");
printName(f,0);
}
public static void printName(File src,int level){
File[] subFiles = src.listFiles();
if (src==null||!src.exists()) {
return ;
}
for (int i = 0; i < level; i++) {
System.out.print("-");
}
System.out.println(src.getName());
if (src.isDirectory()) {
for (File file : subFiles) {
printName(file,level++);
}
}
}
}