File类
用来将文件或者文件夹封装成对象
方便对文件与文件夹的属性信息进行操作
File对象可以作为参数传递给流的构造函数
static String separator 跨平台的分隔符
String filePath = ‘a.txt’;
System.out.println(new File(filePath)); //结果为filePath,无论文件是否存在
File类的常见方法
1.创建
在指定位置创建文件,如果该文件已经存在,则不创建,返回false;
和输出流不一样,输出流对象一建立则马上创建文件,而且文件存在时会覆盖
boolean createNewFile(); 抛出IOException
创建文件夹
boolean mkdir();创建文件夹
boolean mkdirs();创建多级文件夹
2.删除
boolean delete(); 删除失败返回false
void deleteOnExit(); 在程序退出时删除指定文件
3.判断
boolean exists(); 文件是否存在
对一个文件对象判断是否为文件或者是目录时,必须先判断该文件对象封装的内容是否存在,可通过exsists()判断
boolean isDirectory(); 判断是否是一个目录
boolean isFile(); 判断是否为一个文件
boolean isHidden();判断是否是隐藏文件
boolean isAbsolute();判断是否为绝对路径
4.获取信息
1)String getName();获得文件名
2)String getParent(); //该方法返回的是绝对路径中父目录,如果封装的是相对路径则返回空
3)String getPath(); 和封装的路径有关
4)String getAbsolutePath(); 返回绝对路径
5)long length();获得文件长度
6)long lastModified();获得文件最后一次修改的时间
7)boolean renameTo(File file); 类似于文件移动
8)static File[] listRoots();列出有效盘符
9)String[] list(); 列出指定目录下的所以文件和目录,注意调用list方法的file必须封装了一个目录,且目录必须存在,以字符串数组的形式返回
10)File[] listFiles();列出指定目录下的所以文件和目录,注意调用list方法的file必须封装了一个目录,且目录必须存在,以文件数组的形式返回
练习1:列出目录下所有内容
代码:
public static void main(String[] args) throws IOException {
File file = new File("e:/media");
if(file.isDirectory()){
listFiles(file);
}else{
System.out.println("该文件不是一个目录");
}
}
static void listFiles(File dir){
System.out.println(dir);
File[] files = dir.listFiles();
for(int i=0; i<files.length; i++){
if(files[i].isDirectory()){
listFiles(files[i]);
}else{
System.out.println(files[i]);
}
}
}
运行截图:
如果你希望输出的文件之间带有缩进,可以这样做:
static String getLevel(int level){
StringBuilder sb = new StringBuilder();
for(int i=0; i<level; i++){
sb.append(" ");
}
sb.append("|--");
return sb.toString();
}
static void listFiles(File dir, int level){
System.out.println(getLevel(level)+dir.getName());
level++;
File[] files = dir.listFiles();
for(int i=0; i<files.length; i++){
if(files[i].isDirectory()){
listFiles(files[i], level);
}else{
System.out.println(getLevel(level)+files[i].getName());
}
}
运行截图:
练习2:删除带内容的目录
static void delDir(File dir){
File[] files = dir.listFiles();
for(int i=0; i<files.length; i++){
if(files[i].isDirectory()){
delDir(files[i]);
}else{
files[i].delete();
}
}
dir.delete();
}
public static void main(String[] args) throws IOException {
File file = new File("D:\\Program Files\\Eclipse\\demo");
if(file.isDirectory()){
List<File> fileList = new ArrayList<File>();
getJavaFiles(file, fileList);
PrintWriter pw = new PrintWriter(new FileWriter("f:/javaFileList.txt"));
Iterator<File> iter = fileList.iterator();
while(iter.hasNext()){
pw.println(iter.next().getPath());
}
pw.close();
}else{
System.out.println("该文件不是一个目录");
}
}
static void getJavaFiles(File dir, List<File> fileList){
File[] files = dir.listFiles();
for(File file: files){
if(file.isDirectory()){
getJavaFiles(file, fileList);
}else{
if(file.getName().endsWith(".java")){
fileList.add(file);
}
}
}
}
运行截图:
Properties
是HashTable的子类
具备map集合的特点,而且它里面存储的键值对都是字符串
是集合和IO技术相结合的集合容器
该对象的特点:可以用于键值对形式的配置文件
常用方法:
1)String getProperty(String key); 得到属性名对应的值
2)Object setProperty(String key, String value); 调用HashTable的put方法,添加元素
3)Set<String> stringPropertyNames(); 获得属性名的Set集合
4)void load(InputStream in); 从输入流中加载属性列表
5)void load(Reader r);
6)void store(Writer w, String comments); 将属性列表写入到输出流中
7) void store(OutputStream out, String comments);