IO中的分隔符应该用 "/"来表示 而不是"\" 因为在linux的盘符中无法识别"\" 而"/"可以兼容linux和windows
如 : d:/abc/123.txt 而不是 d:\abc\123.txt
基本方法
File f1 = new File("c:/abc","123.txt");
//获取文件的绝对路径
String absolutePath = f1.getAbsolutePath();//c:\abc\123.txt
File absoluteFile = f1.getAbsoluteFile();//c:\abc\123.txt
//file和String互相转换
File f2 = new File(absolutePath);
String path1 = f2.toString();
//获取文件路径
String path = f2.getPath();//c:\abc\123.txt
//获取文件名
String name = f2.getName();//123.txt
//获取上级文件夹名称
String parent = f2.getParent();//c:\abc
//获取上级文件夹
File parentFile = f2.getParentFile();//c:\abc
//file本身也只是一个路径,跟String是一样的
---------------------------------------------------------------------
//是否可执行 --只要能打开就算可执行的文件
boolean canExecute = f2.canExecute();//true
//是否可读 --可读可写和系统文件权限有关(可以手动设置)
boolean canRead = f2.canRead();//true
//是否可写 --可读可写和系统文件权限有关(可以手动设置)
boolean canWrite = f2.canWrite();//true
//是否为隐藏文件
boolean hidden = f2.isHidden();//false
//最后修改时间(格林威治时间)
long lastModified = f2.lastModified();//1527592541180
//字节长度
long length = f2.length();//6
File f1 = new File("c:/abc","123333.txt");
//是否是文件
boolean file = f1.isFile();//true
//新建文件 --判断是否存在,不存在则新建
boolean exists = f1.exists();//false
if(!exists){
boolean createNewFile = f1.createNewFile();
}else{
//存在该文件则重命名
//f1.renameTo(new File("c:/abc/1.txt"));
//删除文件对象
boolean delete = f1.delete();
//java虚拟机退出时删除文件对象
f1.deleteOnExit();
}
//创建临时文件 -- prefix(String)前缀 文件名 --suffix(String)后缀 文件类型
//--directory(File)存放到哪个文件夹 默认为windows/Temp文件夹
File.createTempFile("xxx",".textsd",new File("c:/abc"));//C:\abc\xxx7183939415209379196.textsd
-----------------------------------------------------------------------------------
File f1 = new File("c:/abc","123333.txt");
//是否为目录
boolean directory = f1.isDirectory();//false 非文件夹
//目录是否存在
boolean exists = f1.exists();//true 存在文件..但是不存在文件夹
File f2 = new File("c:/abc/dis/12");
//创建目录(单层目录) --注意文件和文件夹也不能重名
boolean mkdir = f2.mkdir();
//多层目录创建(此时用mkdir方法无效)
f2 = new File("c:abc/12/123/aaa");
boolean mkdirs = f2.mkdirs();
//获取该目录下的文件的名称(目录和文件)
f2 = new File("c:abc");
String[] list = f2.list();
for(String a : list){
System.out.println(a);
}
//获取该目录下的文件
File[] listFiles = f2.listFiles();
for (File file : listFiles) {
System.out.println(file);
}
//获取系统所有磁盘根目录 C:\ D:\ E:\ F:\ G:\ (只在windows上应用)
File[] listRoots = File.listRoots();
for (File file : listRoots) {
System.out.println(file);
}
练习 :找出一个目录下的所有子文件 递归
public static void main(String[] args) throws IOException {
File f1 = new File("c:/Program");
File[] listFiles = f1.listFiles();
getFiles(listFiles);
}
private static void getFiles(File[] f) {
for (File file : f) {
if(file.isDirectory()){
getFiles(file.listFiles());
}else{
System.out.println(file);
}
}
}
----文件名过滤器
public static void main(String[] args) throws IOException {
File fs = new File("c:/abc");
//获取目录下的所有文件
File[] listFiles = fs.listFiles();
for (File file : listFiles) {
System.out.println(file);
}
/* 输出所有文件和文件夹
c:\abc\1.txt
c:\abc\12
c:\abc\123.txt
c:\abc\123333.txt
c:\abc\dis
c:\abc\xxx7183939415209379196.textsd
*/
System.out.println("---------------");
//只输出为txt类型的文件
File[] listFiles2 = fs.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//要过滤掉文件夹
if(new File(dir,name).isFile() && name.endsWith(".txt")){
return true;
}else{
return false;
}
}
});
for (File file : listFiles2) {
System.out.println(file);
}
/* 只有.txt类型的文件
c:\abc\1.txt
c:\abc\123.txt
c:\abc\123333.txt
*/
//可将代码优化为 --效果同上
File[] listFiles3 = fs.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//要过滤掉文件夹
return new File(dir,name).isFile() && name.endsWith(".txt");
}
});
}