File类
File类概述
将文件或者文件夹封装成对象,方便对文件或者文件夹的属性信息进行操作来弥补流类的不足
分隔符 String separat
File类对象方法_创建,删除,判断,获取信息
1. 创建
boolean createNewFile();
在指定位置创建文件,如果该文件已经存在,则不创建。和输出流不同
static File creatTempFile(String 前缀名, String 后缀名, File 存放地址);
在指定位置创建临时文件
boolean mkdir();
只能创建一级文件夹
boolean mkdirs();
创建多级文件夹
2. 删除
boolean delete();
删除失败返回false
void deleteOnExit();
File f = new File("file.txt");
f.deleteOnExit();
使用中的文件不能被删除,可使用此方法,表示当退出时删除此文件
3. 判断
boolean canExecute();
判断文件是否可执行
int compareTo(File 路径);
按照字母顺序比较两个抽象路径名
boolean exists();
判断文件是否存在
boolean isDirectory();
判断是否是目录
boolean isFile();
判断是否是文件
//在使用isDirectory();或isFile();方法时,必须要先通过exists();方法判断该File对象封装的内容是否存在
boolean isHidden();
判断是否是隐藏文件
boolean isAbsolute();
判断是否是绝对路径
4. 获取信息
String getName();
获取文件名
String getPath();
获取文件目录
String getParent();
获取文件上一层目录,封装的对象中如果没有,则返回null
String getAbsolutePath();
获取文件绝对路径
File getAbsolutePath();
获取文件绝对路径
long lastModified();
获取最后一次修改时间
long length();
获取文件大小
boolean renameTo();
在同目录下实现改名称功能,在不同目录下类似于剪切复制功能
File类对象方法_文件列表
static File[] listRoots();
列出机器里面有效的盘符
String[] list();
返回指定目录下的文件及文件夹名称(包含隐藏文件),如果指定的对象为文件则返回null
String[] list(FilenameFilter Filter);
返回指定目录下符合筛选条件的文件及文件夹名称
File[] listFile();
返回指定目录下的文件及文件夹对象(包含隐藏文件),如果指定的对象为文件则返回null
File[] listFile(FilenameFilter filter);
返回指定目录下符合筛选条件的文件及文件夹对象
练习:用String[] list(FilenameFilter Filter)方法,返回所有后缀是.JAVA的文件
public class TestFileMethod_3 {
public static void main(String[] args){
File dir = new File("d:\\test");
String[] arr = dir.list(new FilenameFilter(){
public boolean accept(File dir, String name) {
/*if(name.endsWith(".java"))
return true;
else
return false;
*/
return name.endsWith(".java");
}
});
for(String name: arr){
System.out.println(name);
}
}
}
列出目录下所有的内容
/*
递归:程序调用自身的编程技巧称为递归(recursion)
1. 限定条件
2. 注意递归的次数,避免内存溢出
*/
public static void main(String[] args){
File f = new File("d:\\test");
showDir(f, 0);
}
public static String getLevel(int level){
StringBuilder sb = new StringBuilder();
for(int x=0; x<level; x++){
sb.append("|--");
}
return sb.toString();
}
public static void showDir(File dir, int level){
System.out.println(getLevel(level) + dir.getName());
level++;
File[] files = dir.listFiles();
for(File temp : files){
if(temp.isDirectory()){
showDir(temp, level);
}else
System.out.println(getLevel(level) + temp.getName());
}
}
删除带内容的目录
删除原理:在windows中,删除目录从里面往外删除
从里往外删除,就需要用到递归
public static void removeDir(File dir){
File[] files = dir.listFiles();
for(File temp: files){
if(temp.isDirectory())
removeDir(temp);
else
System.out.println(temp.toString() +"::file::" + temp.delete());
}
System.out.println(dir + "::dir::" + dir.delete());
}
创建java文件列表
/*
遍历指定目录,创建一个java文件清单
思路:
1. 对指定的目录进行递归
2. 获取递归过程中java文件的路径
3. 将这些路径存储到集合中
4. 将集合中的数据写入到文件中
*/
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class JavaFileList {
public static void main(String[] args) throws IOException{
File dir = new File("d:\\test");
List<File> list = new ArrayList<File>();
fileToList(dir, list);
System.out.println(list.size());
File jlf = new File(dir, "JavaList.txt");
writeToFile(list, jlf);
}
public static void fileToList(File dir, List<File> list){
File[] files = dir.listFiles();
for(File temp: files){
if(temp.isDirectory())
fileToList(temp, list);
else{
if(temp.getName().endsWith(".java"))
list.add(temp);
}
}
}
public static void writeToFile(List<File> list, File jlf) throws IOException{
BufferedWriter bufw = null;
try{
bufw = new BufferedWriter(
new FileWriter(jlf));
for(File f: list){
String path = f.getAbsolutePath();
bufw.write(path);
bufw.newLine();
bufw.flush();
}
}catch(IOException e){
throw e;
}finally{
try{
if(bufw != null)
bufw.close();
}catch(IOException e){
throw e;
}
}
}
}
Properties类
Properties类是hashtable的子类,具有map集合的特点,对象中存储的键值对都是字符串
是集合中和IO技术相结合的集合容器,可以用于键值对形式的配置文件,在加载数据时,需要数据有固定的格式
Properties类存取配置文件
import java.util.Properties;
import java.util.Set;
public class PropertiesDemo {
public static void main(String[] args){
setAndGet();
}
//设置和获取元素
public static void setAndGet(){
Properties prop = new Properties();
prop.setProperty("张三", "30");
prop.setProperty("李四", "40");
//System.out.println(prop);
String value = prop.getProperty("李四");
System.out.println(value);
prop.setProperty("张三", 100+"");
Set<String> names = prop.stringPropertyNames();
for(String temp: names){
System.out.println(temp + "::" + prop.getProperty(temp));
}
}
}
将info.txt中键值数据存到集合中进行操作
1. 用一个流和info.txt文件关联
2. 读取一行数据,将该行数据用“=”号分割
3. “=”左边为建,右边为值, 存到Properties集合中即可
public static void method_1(String src) throws IOException{
//Properties类load方法原理
BufferedReader bufr =
new BufferedReader(
new FileReader(src));
String line = null;
Properties prop = new Properties();
while((line = bufr.readLine()) != null){
String[] arr = line.split("=");
//System.out.println(line);
prop.setProperty(arr[0], arr[1]);
}
bufr.close();
System.out.println(prop);
}
public static void loadDemo() throws IOException{
Properties prop = new Properties();
FileInputStream fis = new FileInputStream("d:\\test\\info.txt");
prop.load(fis);
//System.out.println(prop);
prop.setProperty("lee", 39+"");
prop.list(System.out);
FileOutputStream fos = new FileOutputStream("d:\\test\\info.txt");
prop.store(fos, "change");
fos.close();
fis.close();
}
Properties类练习:
dom4j 方便快捷的读取文件信息的类
/*
用于记录应用程序运行次数
如果使用次数已到,给出注册提示
该配置文件使用键值对的形式(map集合),便于阅读数据并操作数据。
数据是以文件形式存储,使用io技术
map + io --> Properyies
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class RunCount {
public static void main(String[] args) throws IOException{
Properties prop = new Properties();
File file = new File("count.ini");
if(!file.exists())
file.createNewFile();
FileInputStream fis = new FileInputStream(file);
prop.load(fis);
int count = 0;
String value = prop.getProperty("time");
if(value != null){
count = Integer.parseInt(value);
if(count >= 5){
System.out.println("您好,请交钱");
return ;
}
}
count++;
prop.setProperty("time", count+"");
FileOutputStream fos = new FileOutputStream(file);
prop.store(fos, "");
fos.close();
fis.close();
}
}